diff --git a/.idea/builds.iml b/.idea/builds.iml new file mode 100644 index 00000000..24643cc3 --- /dev/null +++ b/.idea/builds.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..9569dc6c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/0.12.8/fonts/icomoon.eot b/0.12.8/fonts/icomoon.eot new file mode 100644 index 00000000..7561391f Binary files /dev/null and b/0.12.8/fonts/icomoon.eot differ diff --git a/0.12.8/fonts/icomoon.svg b/0.12.8/fonts/icomoon.svg new file mode 100644 index 00000000..c8cf2ff5 --- /dev/null +++ b/0.12.8/fonts/icomoon.svg @@ -0,0 +1,24 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/0.12.8/fonts/icomoon.ttf b/0.12.8/fonts/icomoon.ttf new file mode 100644 index 00000000..382b2a6d Binary files /dev/null and b/0.12.8/fonts/icomoon.ttf differ diff --git a/0.12.8/fonts/icomoon.woff b/0.12.8/fonts/icomoon.woff new file mode 100644 index 00000000..d5ec0e41 Binary files /dev/null and b/0.12.8/fonts/icomoon.woff differ diff --git a/0.12.8/survey.angular.js b/0.12.8/survey.angular.js new file mode 100644 index 00000000..b0ba1da5 --- /dev/null +++ b/0.12.8/survey.angular.js @@ -0,0 +1,11869 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define("Survey", [], factory); + else if(typeof exports === 'object') + exports["Survey"] = factory(); + else + root["Survey"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ 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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 83); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __assign; }); +/* harmony export (immutable) */ __webpack_exports__["b"] = __extends; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __decorate; }); +var __assign = Object["assign"] || function (target) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + target[p] = s[p]; + } + return target; +}; +function __extends(thisClass, baseClass) { + for (var p in baseClass) + if (baseClass.hasOwnProperty(p)) + thisClass[p] = baseClass[p]; + function __() { this.constructor = thisClass; } + thisClass.prototype = baseClass === null ? Object.create(baseClass) : (__.prototype = baseClass.prototype, new __()); +} +; +var __decorate = function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyLocalization; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyStrings; }); +var surveyLocalization = { + currentLocale: "", + locales: {}, + getString: function (strName) { + var loc = this.currentLocale ? this.locales[this.currentLocale] : surveyStrings; + if (!loc || !loc[strName]) + loc = surveyStrings; + return loc[strName]; + }, + getLocales: function () { + var res = []; + res.push(""); + for (var key in this.locales) { + res.push(key); + } + res.sort(); + return res; + } +}; +var surveyStrings = { + pagePrevText: "Previous", + pageNextText: "Next", + completeText: "Complete", + otherItemText: "Other (describe)", + progressText: "Page {0} of {1}", + emptySurvey: "There is no visible page or question in the survey.", + completingSurvey: "Thank you for completing the survey!", + loadingSurvey: "Survey is loading...", + optionsCaption: "Choose...", + requiredError: "Please answer the question.", + requiredInAllRowsError: "Please answer questions in all rows.", + numericError: "The value should be numeric.", + textMinLength: "Please enter at least {0} symbols.", + textMaxLength: "Please enter less than {0} symbols.", + textMinMaxLength: "Please enter more than {0} and less than {1} symbols.", + minRowCountError: "Please fill in at least {0} rows.", + minSelectError: "Please select at least {0} variants.", + maxSelectError: "Please select no more than {0} variants.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "The '{0}' should be equal or more than {1}", + numericMax: "The '{0}' should be equal or less than {1}", + invalidEmail: "Please enter a valid e-mail address.", + urlRequestError: "The request returned error '{0}'. {1}", + urlGetChoicesError: "The request returned empty data or the 'path' property is incorrect", + exceedMaxSize: "The file size should not exceed {0}.", + otherRequiredError: "Please enter the other value.", + uploadingFile: "Your file is uploading. Please wait several seconds and try again.", + addRow: "Add row", + removeRow: "Remove", + choices_firstItem: "first item", + choices_secondItem: "second item", + choices_thirdItem: "third item", + matrix_column: "Column", + matrix_row: "Row" +}; +surveyLocalization.locales["en"] = surveyStrings; +if (!String.prototype["format"]) { + String.prototype["format"] = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match; + }); + }; +} + + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return JsonObjectProperty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return JsonMetadataClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return JsonMetadata; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return JsonError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return JsonUnknownPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return JsonMissingTypeErrorBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return JsonMissingTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return JsonIncorrectTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return JsonRequiredPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return JsonObject; }); + +var JsonObjectProperty = (function () { + function JsonObjectProperty(name) { + this.name = name; + this.typeValue = null; + this.choicesValue = null; + this.choicesfunc = null; + this.className = null; + this.alternativeName = null; + this.classNamePart = null; + this.baseClassName = null; + this.defaultValue = null; + this.readOnly = false; + this.visible = true; + this.isLocalizable = false; + this.serializationProperty = null; + this.onGetValue = null; + } + Object.defineProperty(JsonObjectProperty.prototype, "type", { + get: function () { return this.typeValue ? this.typeValue : "string"; }, + set: function (value) { this.typeValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseGetValue", { + get: function () { return this.onGetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.isDefaultValue = function (value) { + return (this.defaultValue) ? (this.defaultValue == value) : !(value); + }; + JsonObjectProperty.prototype.getValue = function (obj) { + if (this.onGetValue) + return this.onGetValue(obj); + if (this.serializationProperty) + return obj[this.serializationProperty].getJson(); + return obj[this.name]; + }; + JsonObjectProperty.prototype.getPropertyValue = function (obj) { + if (this.isLocalizable) + return obj[this.serializationProperty].text; + return this.getValue(obj); + }; + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseSetValue", { + get: function () { return this.onSetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) { + if (this.onSetValue) { + this.onSetValue(obj, value, jsonConv); + } + else { + if (this.serializationProperty) + obj[this.serializationProperty].setJson(value); + else + obj[this.name] = value; + } + }; + JsonObjectProperty.prototype.getObjType = function (objType) { + if (!this.classNamePart) + return objType; + return objType.replace(this.classNamePart, ""); + }; + JsonObjectProperty.prototype.getClassName = function (className) { + return (this.classNamePart && className.indexOf(this.classNamePart) < 0) ? className + this.classNamePart : className; + }; + Object.defineProperty(JsonObjectProperty.prototype, "choices", { + get: function () { + if (this.choicesValue != null) + return this.choicesValue; + if (this.choicesfunc != null) + return this.choicesfunc(); + return null; + }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setChoices = function (value, valueFunc) { + this.choicesValue = value; + this.choicesfunc = valueFunc; + }; + return JsonObjectProperty; +}()); + +var JsonMetadataClass = (function () { + function JsonMetadataClass(name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + this.name = name; + this.creator = creator; + this.parentName = parentName; + this.properties = null; + this.requiredProperties = null; + this.properties = new Array(); + for (var i = 0; i < properties.length; i++) { + var prop = this.createProperty(properties[i]); + if (prop) { + this.properties.push(prop); + } + } + } + JsonMetadataClass.prototype.find = function (name) { + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == name) + return this.properties[i]; + } + return null; + }; + JsonMetadataClass.prototype.createProperty = function (propInfo) { + var propertyName = typeof propInfo === "string" ? propInfo : propInfo.name; + if (!propertyName) + return; + var propertyType = null; + var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol); + if (typeIndex > -1) { + propertyType = propertyName.substring(typeIndex + 1); + propertyName = propertyName.substring(0, typeIndex); + } + propertyName = this.getPropertyName(propertyName); + var prop = new JsonObjectProperty(propertyName); + if (propertyType) { + prop.type = propertyType; + } + if (typeof propInfo === "object") { + if (propInfo.type) { + prop.type = propInfo.type; + } + if (propInfo.default) { + prop.defaultValue = propInfo.default; + } + if (propInfo.visible === false) { + prop.visible = false; + } + if (propInfo.isRequired) { + this.makePropertyRequired(prop.name); + } + if (propInfo.choices) { + var choicesFunc = typeof propInfo.choices === "function" ? propInfo.choices : null; + var choicesValue = typeof propInfo.choices !== "function" ? propInfo.choices : null; + prop.setChoices(choicesValue, choicesFunc); + } + if (propInfo.onGetValue) { + prop.onGetValue = propInfo.onGetValue; + } + if (propInfo.onSetValue) { + prop.onSetValue = propInfo.onSetValue; + } + if (propInfo.serializationProperty) { + prop.serializationProperty = propInfo.serializationProperty; + var s; + if (prop.serializationProperty && prop.serializationProperty.indexOf("loc") == 0) { + prop.isLocalizable = true; + } + } + if (propInfo.isLocalizable) { + prop.isLocalizable = propInfo.isLocalizable; + } + if (propInfo.className) { + prop.className = propInfo.className; + } + if (propInfo.baseClassName) { + prop.baseClassName = propInfo.baseClassName; + } + if (propInfo.classNamePart) { + prop.classNamePart = propInfo.classNamePart; + } + if (propInfo.alternativeName) { + prop.alternativeName = propInfo.alternativeName; + } + } + return prop; + }; + JsonMetadataClass.prototype.getPropertyName = function (propertyName) { + if (propertyName.length == 0 || propertyName[0] != JsonMetadataClass.requiredSymbol) + return propertyName; + propertyName = propertyName.slice(1); + this.makePropertyRequired(propertyName); + return propertyName; + }; + JsonMetadataClass.prototype.makePropertyRequired = function (propertyName) { + if (!this.requiredProperties) { + this.requiredProperties = new Array(); + } + this.requiredProperties.push(propertyName); + }; + return JsonMetadataClass; +}()); + +JsonMetadataClass.requiredSymbol = '!'; +JsonMetadataClass.typeSymbol = ':'; +var JsonMetadata = (function () { + function JsonMetadata() { + this.classes = {}; + this.childrenClasses = {}; + this.classProperties = {}; + this.classRequiredProperties = {}; + } + JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName); + this.classes[name] = metaDataClass; + if (parentName) { + var children = this.childrenClasses[parentName]; + if (!children) { + this.childrenClasses[parentName] = []; + } + this.childrenClasses[parentName].push(metaDataClass); + } + return metaDataClass; + }; + JsonMetadata.prototype.overrideClassCreatore = function (name, creator) { + var metaDataClass = this.findClass(name); + if (metaDataClass) { + metaDataClass.creator = creator; + } + }; + JsonMetadata.prototype.getProperties = function (className) { + var properties = this.classProperties[className]; + if (!properties) { + properties = new Array(); + this.fillProperties(className, properties); + this.classProperties[className] = properties; + } + return properties; + }; + JsonMetadata.prototype.findProperty = function (className, propertyName) { + var properties = this.getProperties(className); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == propertyName) + return properties[i]; + } + return null; + }; + JsonMetadata.prototype.createClass = function (name) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return null; + return metaDataClass.creator(); + }; + JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) { + if (canBeCreated === void 0) { canBeCreated = false; } + var result = []; + this.fillChildrenClasses(name, canBeCreated, result); + return result; + }; + JsonMetadata.prototype.getRequiredProperties = function (name) { + var properties = this.classRequiredProperties[name]; + if (!properties) { + properties = new Array(); + this.fillRequiredProperties(name, properties); + this.classRequiredProperties[name] = properties; + } + return properties; + }; + JsonMetadata.prototype.addProperty = function (className, propertyInfo) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return; + var property = metaDataClass.createProperty(propertyInfo); + if (property) { + this.addPropertyToClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.removeProperty = function (className, propertyName) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return false; + var property = metaDataClass.find(propertyName); + if (property) { + this.removePropertyFromClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) { + if (metaDataClass.find(property.name) != null) + return; + metaDataClass.properties.push(property); + }; + JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) { + var index = metaDataClass.properties.indexOf(property); + if (index < 0) + return; + metaDataClass.properties.splice(index, 1); + if (metaDataClass.requiredProperties) { + index = metaDataClass.requiredProperties.indexOf(property.name); + if (index >= 0) { + metaDataClass.requiredProperties.splice(index, 1); + } + } + }; + JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) { + this.classProperties[metaDataClass.name] = null; + var childClasses = this.getChildrenClasses(metaDataClass.name); + for (var i = 0; i < childClasses.length; i++) { + this.classProperties[childClasses[i].name] = null; + } + }; + JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) { + var children = this.childrenClasses[name]; + if (!children) + return; + for (var i = 0; i < children.length; i++) { + if (!canBeCreated || children[i].creator) { + result.push(children[i]); + } + this.fillChildrenClasses(children[i].name, canBeCreated, result); + } + }; + JsonMetadata.prototype.findClass = function (name) { + return this.classes[name]; + }; + JsonMetadata.prototype.fillProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.parentName) { + this.fillProperties(metaDataClass.parentName, list); + } + for (var i = 0; i < metaDataClass.properties.length; i++) { + this.addPropertyCore(metaDataClass.properties[i], list, list.length); + } + }; + JsonMetadata.prototype.addPropertyCore = function (property, list, endIndex) { + var index = -1; + for (var i = 0; i < endIndex; i++) { + if (list[i].name == property.name) { + index = i; + break; + } + } + if (index < 0) { + list.push(property); + } + else { + list[index] = property; + } + }; + JsonMetadata.prototype.fillRequiredProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.requiredProperties) { + Array.prototype.push.apply(list, metaDataClass.requiredProperties); + } + if (metaDataClass.parentName) { + this.fillRequiredProperties(metaDataClass.parentName, list); + } + }; + return JsonMetadata; +}()); + +var JsonError = (function () { + function JsonError(type, message) { + this.type = type; + this.message = message; + this.description = ""; + this.at = -1; + } + JsonError.prototype.getFullDescription = function () { + return this.message + (this.description ? "\n" + this.description : ""); + }; + return JsonError; +}()); + +var JsonUnknownPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonUnknownPropertyError, _super); + function JsonUnknownPropertyError(propertyName, className) { + var _this = _super.call(this, "unknownproperty", "The property '" + propertyName + "' in class '" + className + "' is unknown.") || this; + _this.propertyName = propertyName; + _this.className = className; + var properties = JsonObject.metaData.getProperties(className); + if (properties) { + _this.description = "The list of available properties are: "; + for (var i = 0; i < properties.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += properties[i].name; + } + _this.description += '.'; + } + return _this; + } + return JsonUnknownPropertyError; +}(JsonError)); + +var JsonMissingTypeErrorBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeErrorBase, _super); + function JsonMissingTypeErrorBase(baseClassName, type, message) { + var _this = _super.call(this, type, message) || this; + _this.baseClassName = baseClassName; + _this.type = type; + _this.message = message; + _this.description = "The following types are available: "; + var types = JsonObject.metaData.getChildrenClasses(baseClassName, true); + for (var i = 0; i < types.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += "'" + types[i].name + "'"; + } + _this.description += "."; + return _this; + } + return JsonMissingTypeErrorBase; +}(JsonError)); + +var JsonMissingTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeError, _super); + function JsonMissingTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "missingtypeproperty", "The property type is missing in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonMissingTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonIncorrectTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonIncorrectTypeError, _super); + function JsonIncorrectTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "incorrecttypeproperty", "The property type is incorrect in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonIncorrectTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonRequiredPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonRequiredPropertyError, _super); + function JsonRequiredPropertyError(propertyName, className) { + var _this = _super.call(this, "requiredproperty", "The property '" + propertyName + "' is required in class '" + className + "'.") || this; + _this.propertyName = propertyName; + _this.className = className; + return _this; + } + return JsonRequiredPropertyError; +}(JsonError)); + +var JsonObject = (function () { + function JsonObject() { + this.errors = new Array(); + } + Object.defineProperty(JsonObject, "metaData", { + get: function () { return JsonObject.metaDataValue; }, + enumerable: true, + configurable: true + }); + JsonObject.prototype.toJsonObject = function (obj) { + return this.toJsonObjectCore(obj, null); + }; + JsonObject.prototype.toObject = function (jsonObj, obj) { + if (!jsonObj) + return; + var properties = null; + if (obj.getType) { + properties = JsonObject.metaData.getProperties(obj.getType()); + } + if (!properties) + return; + for (var key in jsonObj) { + if (key == JsonObject.typePropertyName) + continue; + if (key == JsonObject.positionPropertyName) { + obj[key] = jsonObj[key]; + continue; + } + var property = this.findProperty(properties, key); + if (!property) { + this.addNewError(new JsonUnknownPropertyError(key.toString(), obj.getType()), jsonObj); + continue; + } + this.valueToObj(jsonObj[key], obj, key, property); + } + }; + JsonObject.prototype.toJsonObjectCore = function (obj, property) { + if (!obj.getType) + return obj; + var result = {}; + if (property != null && (!property.className)) { + result[JsonObject.typePropertyName] = property.getObjType(obj.getType()); + } + var properties = JsonObject.metaData.getProperties(obj.getType()); + for (var i = 0; i < properties.length; i++) { + this.valueToJson(obj, result, properties[i]); + } + return result; + }; + JsonObject.prototype.valueToJson = function (obj, result, property) { + var value = property.getValue(obj); + if (value === undefined || value === null) + return; + if (property.isDefaultValue(value)) + return; + if (this.isValueArray(value)) { + var arrValue = []; + for (var i = 0; i < value.length; i++) { + arrValue.push(this.toJsonObjectCore(value[i], property)); + } + value = arrValue.length > 0 ? arrValue : null; + } + else { + value = this.toJsonObjectCore(value, property); + } + if (!property.isDefaultValue(value)) { + result[property.name] = value; + } + }; + JsonObject.prototype.valueToObj = function (value, obj, key, property) { + if (value == null) + return; + if (property != null && property.hasToUseSetValue) { + property.setValue(obj, value, this); + return; + } + if (this.isValueArray(value)) { + this.valueToArray(value, obj, property.name, property); + return; + } + var newObj = this.createNewObj(value, property); + if (newObj.newObj) { + this.toObject(value, newObj.newObj); + value = newObj.newObj; + } + if (!newObj.error) { + obj[property.name] = value; + } + }; + JsonObject.prototype.isValueArray = function (value) { return value && Array.isArray(value); }; + JsonObject.prototype.createNewObj = function (value, property) { + var result = { newObj: null, error: null }; + var className = value[JsonObject.typePropertyName]; + if (!className && property != null && property.className) { + className = property.className; + } + className = property.getClassName(className); + result.newObj = (className) ? JsonObject.metaData.createClass(className) : null; + result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className); + return result; + }; + JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) { + var error = null; + if (newObj) { + var requiredProperties = JsonObject.metaData.getRequiredProperties(className); + if (requiredProperties) { + for (var i = 0; i < requiredProperties.length; i++) { + if (!value[requiredProperties[i]]) { + error = new JsonRequiredPropertyError(requiredProperties[i], className); + break; + } + } + } + } + else { + if (property.baseClassName) { + if (!className) { + error = new JsonMissingTypeError(property.name, property.baseClassName); + } + else { + error = new JsonIncorrectTypeError(property.name, property.baseClassName); + } + } + } + if (error) { + this.addNewError(error, value); + } + return error; + }; + JsonObject.prototype.addNewError = function (error, jsonObj) { + if (jsonObj && jsonObj[JsonObject.positionPropertyName]) { + error.at = jsonObj[JsonObject.positionPropertyName].start; + } + this.errors.push(error); + }; + JsonObject.prototype.valueToArray = function (value, obj, key, property) { + if (obj[key] && value.length > 0) + obj[key].splice(0, obj[key].length); + for (var i = 0; i < value.length; i++) { + var newValue = this.createNewObj(value[i], property); + if (newValue.newObj) { + obj[key].push(newValue.newObj); + this.toObject(value[i], newValue.newObj); + } + else { + if (!newValue.error) { + obj[key].push(value[i]); + } + } + } + }; + JsonObject.prototype.findProperty = function (properties, key) { + if (!properties) + return null; + for (var i = 0; i < properties.length; i++) { + var prop = properties[i]; + if (prop.name == key || prop.alternativeName == key) + return prop; + } + return null; + }; + return JsonObject; +}()); + +JsonObject.typePropertyName = "type"; +JsonObject.positionPropertyName = "pos"; +JsonObject.metaDataValue = new JsonMetadata(); + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.unstable_renderSubtreeIntoContainer = exports.PureComponent = exports.Component = exports.unmountComponentAtNode = exports.findDOMNode = exports.isValidElement = exports.cloneElement = exports.createElement = exports.createFactory = exports.createClass = exports.render = exports.Children = exports.PropTypes = exports.DOM = exports.version = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _proptypes = __webpack_require__(41); + +var _proptypes2 = _interopRequireDefault(_proptypes); + +var _preact = __webpack_require__(39); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var version = '15.1.0'; // trick libraries to think we are react + +var ELEMENTS = 'a abbr address area article aside audio b base bdi bdo big blockquote body br button canvas caption cite code col colgroup data datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hgroup hr html i iframe img input ins kbd keygen label legend li link main map mark menu menuitem meta meter nav noscript object ol optgroup option output p param picture pre progress q rp rt ruby s samp script section select small source span strong style sub summary sup table tbody td textarea tfoot th thead time title tr track u ul var video wbr circle clipPath defs ellipse g image line linearGradient mask path pattern polygon polyline radialGradient rect stop svg text tspan'.split(' '); + +var REACT_ELEMENT_TYPE = typeof Symbol !== 'undefined' && Symbol.for && Symbol.for('react.element') || 0xeac7; + +var COMPONENT_WRAPPER_KEY = typeof Symbol !== 'undefined' ? Symbol.for('__preactCompatWrapper') : '__preactCompatWrapper'; + +// don't autobind these methods since they already have guaranteed context. +var AUTOBIND_BLACKLIST = { + constructor: 1, + render: 1, + shouldComponentUpdate: 1, + componentWillReceiveProps: 1, + componentWillUpdate: 1, + componentDidUpdate: 1, + componentWillMount: 1, + componentDidMount: 1, + componentWillUnmount: 1, + componentDidUnmount: 1 +}; + +var CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip|color|fill|flood|font|glyph|horiz|marker|overline|paint|stop|strikethrough|stroke|text|underline|unicode|units|v|vert|word|writing|x)[A-Z]/; + +var BYPASS_HOOK = {}; + +/*global process*/ +var DEV = typeof process === 'undefined' || !process.env || process.env.NODE_ENV !== 'production'; + +// a component that renders nothing. Used to replace components for unmountComponentAtNode. +function EmptyComponent() { + return null; +} + +// make react think we're react. +var VNode = (0, _preact.h)('a', null).constructor; +VNode.prototype.$$typeof = REACT_ELEMENT_TYPE; +VNode.prototype.preactCompatUpgraded = false; +VNode.prototype.preactCompatNormalized = false; + +Object.defineProperty(VNode.prototype, 'type', { + get: function get() { + return this.nodeName; + }, + set: function set(v) { + this.nodeName = v; + }, + + configurable: true +}); + +Object.defineProperty(VNode.prototype, 'props', { + get: function get() { + return this.attributes; + }, + set: function set(v) { + this.attributes = v; + }, + + configurable: true +}); + +var oldEventHook = _preact.options.event; +_preact.options.event = function (e) { + if (oldEventHook) e = oldEventHook(e); + e.persist = Object; + e.nativeEvent = e; + return e; +}; + +var oldVnodeHook = _preact.options.vnode; +_preact.options.vnode = function (vnode) { + if (!vnode.preactCompatUpgraded) { + vnode.preactCompatUpgraded = true; + + var tag = vnode.nodeName, + attrs = vnode.attributes; + + if (!attrs) attrs = vnode.attributes = {}; + + if (typeof tag === 'function') { + if (tag[COMPONENT_WRAPPER_KEY] === true || tag.prototype && 'isReactComponent' in tag.prototype) { + if (vnode.children && !vnode.children.length) vnode.children = undefined; + if (vnode.children) attrs.children = vnode.children; + + if (!vnode.preactCompatNormalized) { + normalizeVNode(vnode); + } + handleComponentVNode(vnode); + } + } else { + if (vnode.children && !vnode.children.length) vnode.children = undefined; + if (vnode.children) attrs.children = vnode.children; + + if (attrs.defaultValue) { + if (!attrs.value && attrs.value !== 0) { + attrs.value = attrs.defaultValue; + } + delete attrs.defaultValue; + } + + handleElementVNode(vnode, attrs); + } + } + + if (oldVnodeHook) oldVnodeHook(vnode); +}; + +function handleComponentVNode(vnode) { + var tag = vnode.nodeName, + a = vnode.attributes; + + vnode.attributes = {}; + if (tag.defaultProps) extend(vnode.attributes, tag.defaultProps); + if (a) extend(vnode.attributes, a); +} + +function handleElementVNode(vnode, a) { + var shouldSanitize = void 0, + attrs = void 0, + i = void 0; + if (a) { + for (i in a) { + if (shouldSanitize = CAMEL_PROPS.test(i)) break; + }if (shouldSanitize) { + attrs = vnode.attributes = {}; + for (i in a) { + if (a.hasOwnProperty(i)) { + attrs[CAMEL_PROPS.test(i) ? i.replace(/([A-Z0-9])/, '-$1').toLowerCase() : i] = a[i]; + } + } + } + } +} + +// proxy render() since React returns a Component reference. +function render(vnode, parent, callback) { + var prev = parent && parent._preactCompatRendered; + + // ignore impossible previous renders + if (prev && prev.parentNode !== parent) prev = null; + + // default to first Element child + if (!prev) prev = parent.children[0]; + + // remove unaffected siblings + for (var i = parent.childNodes.length; i--;) { + if (parent.childNodes[i] !== prev) { + parent.removeChild(parent.childNodes[i]); + } + } + + var out = (0, _preact.render)(vnode, parent, prev); + if (parent) parent._preactCompatRendered = out; + if (typeof callback === 'function') callback(); + return out && out._component || out.base; +} + +var ContextProvider = function () { + function ContextProvider() { + _classCallCheck(this, ContextProvider); + } + + _createClass(ContextProvider, [{ + key: 'getChildContext', + value: function getChildContext() { + return this.props.context; + } + }, { + key: 'render', + value: function render(props) { + return props.children[0]; + } + }]); + + return ContextProvider; +}(); + +function renderSubtreeIntoContainer(parentComponent, vnode, container, callback) { + var wrap = (0, _preact.h)(ContextProvider, { context: parentComponent.context }, vnode); + var c = render(wrap, container); + if (callback) callback(c); + return c; +} + +function unmountComponentAtNode(container) { + var existing = container._preactCompatRendered; + if (existing && existing.parentNode === container) { + (0, _preact.render)((0, _preact.h)(EmptyComponent), container, existing); + return true; + } + return false; +} + +var ARR = []; + +// This API is completely unnecessary for Preact, so it's basically passthrough. +var Children = { + map: function map(children, fn, ctx) { + if (children == null) return null; + children = Children.toArray(children); + if (ctx && ctx !== children) fn = fn.bind(ctx); + return children.map(fn); + }, + forEach: function forEach(children, fn, ctx) { + if (children == null) return null; + children = Children.toArray(children); + if (ctx && ctx !== children) fn = fn.bind(ctx); + children.forEach(fn); + }, + count: function count(children) { + return children && children.length || 0; + }, + only: function only(children) { + children = Children.toArray(children); + if (children.length !== 1) throw new Error('Children.only() expects only one child.'); + return children[0]; + }, + toArray: function toArray(children) { + return Array.isArray && Array.isArray(children) ? children : ARR.concat(children); + } +}; + +/** Track current render() component for ref assignment */ +var currentComponent = void 0; + +function createFactory(type) { + return createElement.bind(null, type); +} + +var DOM = {}; +for (var i = ELEMENTS.length; i--;) { + DOM[ELEMENTS[i]] = createFactory(ELEMENTS[i]); +} + +function upgradeToVNodes(arr, offset) { + for (var _i = offset || 0; _i < arr.length; _i++) { + var obj = arr[_i]; + if (Array.isArray(obj)) { + upgradeToVNodes(obj); + } else if (obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && !isValidElement(obj) && (obj.props && obj.type || obj.attributes && obj.nodeName || obj.children)) { + arr[_i] = createElement(obj.type || obj.nodeName, obj.props || obj.attributes, obj.children); + } + } +} + +function isStatelessComponent(c) { + return typeof c === 'function' && !(c.prototype && c.prototype.render); +} + +// wraps stateless functional components in a PropTypes validator +function wrapStatelessComponent(WrappedComponent) { + return createClass({ + displayName: WrappedComponent.displayName || WrappedComponent.name, + render: function render() { + return WrappedComponent(this.props, this.context); + } + }); +} + +function statelessComponentHook(Ctor) { + var Wrapped = Ctor[COMPONENT_WRAPPER_KEY]; + if (Wrapped) return Wrapped === true ? Ctor : Wrapped; + + Wrapped = wrapStatelessComponent(Ctor); + + Object.defineProperty(Wrapped, COMPONENT_WRAPPER_KEY, { configurable: true, value: true }); + Wrapped.displayName = Ctor.displayName; + Wrapped.propTypes = Ctor.propTypes; + Wrapped.defaultProps = Ctor.defaultProps; + + Object.defineProperty(Ctor, COMPONENT_WRAPPER_KEY, { configurable: true, value: Wrapped }); + + return Wrapped; +} + +function createElement() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + upgradeToVNodes(args, 2); + return normalizeVNode(_preact.h.apply(undefined, args)); +} + +function normalizeVNode(vnode) { + vnode.preactCompatNormalized = true; + + applyClassName(vnode); + + if (isStatelessComponent(vnode.nodeName)) { + vnode.nodeName = statelessComponentHook(vnode.nodeName); + } + + var ref = vnode.attributes.ref, + type = ref && (typeof ref === 'undefined' ? 'undefined' : _typeof(ref)); + if (currentComponent && (type === 'string' || type === 'number')) { + vnode.attributes.ref = createStringRefProxy(ref, currentComponent); + } + + applyEventNormalization(vnode); + + return vnode; +} + +function cloneElement(element, props) { + if (!isValidElement(element)) return element; + var elementProps = element.attributes || element.props; + var node = (0, _preact.h)(element.nodeName || element.type, elementProps, element.children || elementProps && elementProps.children); + + for (var _len2 = arguments.length, children = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + children[_key2 - 2] = arguments[_key2]; + } + + return normalizeVNode(_preact.cloneElement.apply(undefined, [node, props].concat(children))); +} + +function isValidElement(element) { + return element && (element instanceof VNode || element.$$typeof === REACT_ELEMENT_TYPE); +} + +function createStringRefProxy(name, component) { + return component._refProxies[name] || (component._refProxies[name] = function (resolved) { + if (component && component.refs) { + component.refs[name] = resolved; + if (resolved === null) { + delete component._refProxies[name]; + component = null; + } + } + }); +} + +function applyEventNormalization(_ref) { + var nodeName = _ref.nodeName, + attributes = _ref.attributes; + + if (!attributes || typeof nodeName !== 'string') return; + var props = {}; + for (var _i2 in attributes) { + props[_i2.toLowerCase()] = _i2; + } + if (props.ondoubleclick) { + attributes.ondblclick = attributes[props.ondoubleclick]; + delete attributes[props.ondoubleclick]; + } + // for *textual inputs* (incl textarea), normalize `onChange` -> `onInput`: + if (props.onchange && (nodeName === 'textarea' || nodeName.toLowerCase() === 'input' && !/^fil|che|rad/i.test(attributes.type))) { + var normalized = props.oninput || 'oninput'; + if (!attributes[normalized]) { + attributes[normalized] = multihook([attributes[normalized], attributes[props.onchange]]); + delete attributes[props.onchange]; + } + } +} + +function applyClassName(_ref2) { + var attributes = _ref2.attributes; + + if (!attributes) return; + var cl = attributes.className || attributes.class; + if (cl) attributes.className = cl; +} + +function extend(base, props) { + for (var key in props) { + if (props.hasOwnProperty(key)) { + base[key] = props[key]; + } + } + return base; +} + +function shallowDiffers(a, b) { + for (var _i3 in a) { + if (!(_i3 in b)) return true; + }for (var _i4 in b) { + if (a[_i4] !== b[_i4]) return true; + }return false; +} + +function findDOMNode(component) { + return component && component.base || component; +} + +function F() {} + +function createClass(obj) { + function cl(props, context) { + bindAll(this); + Component.call(this, props, context, BYPASS_HOOK); + newComponentHook.call(this, props, context); + } + + obj = extend({ constructor: cl }, obj); + + // We need to apply mixins here so that getDefaultProps is correctly mixed + if (obj.mixins) { + applyMixins(obj, collateMixins(obj.mixins)); + } + if (obj.statics) { + extend(cl, obj.statics); + } + if (obj.propTypes) { + cl.propTypes = obj.propTypes; + } + if (obj.defaultProps) { + cl.defaultProps = obj.defaultProps; + } + if (obj.getDefaultProps) { + cl.defaultProps = obj.getDefaultProps(); + } + + F.prototype = Component.prototype; + cl.prototype = extend(new F(), obj); + + cl.displayName = obj.displayName || 'Component'; + + return cl; +} + +// Flatten an Array of mixins to a map of method name to mixin implementations +function collateMixins(mixins) { + var keyed = {}; + for (var _i5 = 0; _i5 < mixins.length; _i5++) { + var mixin = mixins[_i5]; + for (var key in mixin) { + if (mixin.hasOwnProperty(key) && typeof mixin[key] === 'function') { + (keyed[key] || (keyed[key] = [])).push(mixin[key]); + } + } + } + return keyed; +} + +// apply a mapping of Arrays of mixin methods to a component prototype +function applyMixins(proto, mixins) { + for (var key in mixins) { + if (mixins.hasOwnProperty(key)) { + proto[key] = multihook(mixins[key].concat(proto[key] || ARR), key === 'getDefaultProps' || key === 'getInitialState' || key === 'getChildContext'); + } + } +} + +function bindAll(ctx) { + for (var _i6 in ctx) { + var v = ctx[_i6]; + if (typeof v === 'function' && !v.__bound && !AUTOBIND_BLACKLIST.hasOwnProperty(_i6)) { + (ctx[_i6] = v.bind(ctx)).__bound = true; + } + } +} + +function callMethod(ctx, m, args) { + if (typeof m === 'string') { + m = ctx.constructor.prototype[m]; + } + if (typeof m === 'function') { + return m.apply(ctx, args); + } +} + +function multihook(hooks, skipDuplicates) { + return function () { + var ret = void 0; + for (var _i7 = 0; _i7 < hooks.length; _i7++) { + var r = callMethod(this, hooks[_i7], arguments); + + if (skipDuplicates && r != null) { + if (!ret) ret = {}; + for (var key in r) { + if (r.hasOwnProperty(key)) { + ret[key] = r[key]; + } + } + } else if (typeof r !== 'undefined') ret = r; + } + return ret; + }; +} + +function newComponentHook(props, context) { + propsHook.call(this, props, context); + this.componentWillReceiveProps = multihook([propsHook, this.componentWillReceiveProps || 'componentWillReceiveProps']); + this.render = multihook([propsHook, beforeRender, this.render || 'render', afterRender]); +} + +function propsHook(props, context) { + if (!props) return; + + // React annoyingly special-cases single children, and some react components are ridiculously strict about this. + var c = props.children; + if (c && Array.isArray(c) && c.length === 1) { + props.children = c[0]; + + // but its totally still going to be an Array. + if (props.children && _typeof(props.children) === 'object') { + props.children.length = 1; + props.children[0] = props.children; + } + } + + // add proptype checking + if (DEV) { + var ctor = typeof this === 'function' ? this : this.constructor, + propTypes = this.propTypes || ctor.propTypes; + if (propTypes) { + for (var prop in propTypes) { + if (propTypes.hasOwnProperty(prop) && typeof propTypes[prop] === 'function') { + var displayName = this.displayName || ctor.name; + var err = propTypes[prop](props, prop, displayName, 'prop'); + if (err) console.error(new Error(err.message || err)); + } + } + } + } +} + +function beforeRender(props) { + currentComponent = this; +} + +function afterRender() { + if (currentComponent === this) { + currentComponent = null; + } +} + +function Component(props, context, opts) { + _preact.Component.call(this, props, context); + this.state = this.getInitialState ? this.getInitialState() : {}; + this.refs = {}; + this._refProxies = {}; + if (opts !== BYPASS_HOOK) { + newComponentHook.call(this, props, context); + } +} +extend(Component.prototype = new _preact.Component(), { + constructor: Component, + + isReactComponent: {}, + + replaceState: function replaceState(state, callback) { + this.setState(state, callback); + for (var _i8 in this.state) { + if (!(_i8 in state)) { + delete this.state[_i8]; + } + } + }, + getDOMNode: function getDOMNode() { + return this.base; + }, + isMounted: function isMounted() { + return !!this.base; + } +}); + +function PureComponent(props, context) { + Component.call(this, props, context); +} +F.prototype = Component.prototype; +PureComponent.prototype = new F(); +PureComponent.prototype.shouldComponentUpdate = function (props, state) { + return shallowDiffers(this.props, props) || shallowDiffers(this.state, state); +}; + +exports.version = version; +exports.DOM = DOM; +exports.PropTypes = _proptypes2.default; +exports.Children = Children; +exports.render = render; +exports.createClass = createClass; +exports.createFactory = createFactory; +exports.createElement = createElement; +exports.cloneElement = cloneElement; +exports.isValidElement = isValidElement; +exports.findDOMNode = findDOMNode; +exports.unmountComponentAtNode = unmountComponentAtNode; +exports.Component = Component; +exports.PureComponent = PureComponent; +exports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer; +exports.default = { + version: version, + DOM: DOM, + PropTypes: _proptypes2.default, + Children: Children, + render: render, + createClass: createClass, + createFactory: createFactory, + createElement: createElement, + cloneElement: cloneElement, + isValidElement: isValidElement, + findDOMNode: findDOMNode, + unmountComponentAtNode: unmountComponentAtNode, + Component: Component, + PureComponent: PureComponent, + unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer +}; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(40))) + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return Base; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Event; }); +var Base = (function () { + function Base() { + } + Base.prototype.getType = function () { + throw new Error('This method is abstract'); + }; + Base.prototype.isTwoValueEquals = function (x, y) { + if (x === y) + return true; + if (!(x instanceof Object) || !(y instanceof Object)) + return false; + for (var p in x) { + if (!x.hasOwnProperty(p)) + continue; + if (!y.hasOwnProperty(p)) + return false; + if (x[p] === y[p]) + continue; + if (typeof (x[p]) !== "object") + return false; + if (!this.isTwoValueEquals(x[p], y[p])) + return false; + } + for (p in y) { + if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) + return false; + } + return true; + }; + return Base; +}()); + +var SurveyError = (function () { + function SurveyError() { + } + SurveyError.prototype.getText = function () { + throw new Error('This method is abstract'); + }; + return SurveyError; +}()); + +var SurveyPageId; +SurveyPageId = "sq_page"; +var SurveyElement = (function () { + function SurveyElement() { + } + SurveyElement.ScrollElementToTop = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (!el || !el.scrollIntoView) + return false; + var elemTop = el.getBoundingClientRect().top; + if (elemTop < 0) + el.scrollIntoView(); + return elemTop < 0; + }; + SurveyElement.GetFirstNonTextElement = function (elements) { + if (!elements || !elements.length) + return; + for (var i = 0; i < elements.length; i++) { + if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") + return elements[i]; + } + return null; + }; + SurveyElement.FocusElement = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (el) { + el.focus(); + return true; + } + return false; + }; + return SurveyElement; +}()); + +var Event = (function () { + function Event() { + } + Object.defineProperty(Event.prototype, "isEmpty", { + get: function () { return this.callbacks == null || this.callbacks.length == 0; }, + enumerable: true, + configurable: true + }); + Event.prototype.fire = function (sender, options) { + if (this.callbacks == null) + return; + for (var i = 0; i < this.callbacks.length; i++) { + var callResult = this.callbacks[i](sender, options); + } + }; + Event.prototype.add = function (func) { + if (this.callbacks == null) { + this.callbacks = new Array(); + } + this.callbacks.push(func); + }; + Event.prototype.remove = function (func) { + if (this.callbacks == null) + return; + var index = this.callbacks.indexOf(func, 0); + if (index != undefined) { + this.callbacks.splice(index, 1); + } + }; + return Event; +}()); + + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ElementFactory; }); + +//TODO replace completely with ElementFactory +var QuestionFactory = (function () { + function QuestionFactory() { + this.creatorHash = {}; + } + Object.defineProperty(QuestionFactory, "DefaultChoices", { + get: function () { + return ["1|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_firstItem"), "2|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_secondItem"), "3|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_thirdItem")]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultColums", { + get: function () { + var colName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_column") + " "; + return [colName + "1", colName + "2", colName + "3"]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultRows", { + get: function () { + var rowName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_row") + " "; + return [rowName + "1", rowName + "2"]; + }, + enumerable: true, + configurable: true + }); + QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + QuestionFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + QuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + QuestionFactory.prototype.createQuestion = function (questionType, name) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(name); + }; + return QuestionFactory; +}()); + +QuestionFactory.Instance = new QuestionFactory(); +var ElementFactory = (function () { + function ElementFactory() { + this.creatorHash = {}; + } + ElementFactory.prototype.registerElement = function (elementType, elementCreator) { + this.creatorHash[elementType] = elementCreator; + }; + ElementFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + ElementFactory.prototype.getAllTypes = function () { + var result = QuestionFactory.Instance.getAllTypes(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ElementFactory.prototype.createElement = function (elementType, name) { + var creator = this.creatorHash[elementType]; + if (creator == null) + return QuestionFactory.Instance.createQuestion(elementType, name); + return creator(name); + }; + return ElementFactory; +}()); + +ElementFactory.Instance = new ElementFactory(); + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ReactQuestionFactory; }); +var ReactQuestionFactory = (function () { + function ReactQuestionFactory() { + this.creatorHash = {}; + } + ReactQuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + ReactQuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ReactQuestionFactory.prototype.createQuestion = function (questionType, params) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(params); + }; + return ReactQuestionFactory; +}()); + +ReactQuestionFactory.Instance = new ReactQuestionFactory(); + + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LocalizableString; }); +var LocalizableString = (function () { + function LocalizableString(owner) { + this.owner = owner; + this.values = {}; + } + Object.defineProperty(LocalizableString.prototype, "locale", { + get: function () { return this.owner ? this.owner.getLocale() : ""; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LocalizableString.prototype, "text", { + get: function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return ""; + var loc = this.locale; + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + if (!res && loc !== LocalizableString.defaultLocale) { + res = this.values[LocalizableString.defaultLocale]; + } + return res ? res : this.values[keys[0]]; + }, + set: function (value) { + this.setLocaleText(this.locale, value); + }, + enumerable: true, + configurable: true + }); + LocalizableString.prototype.getLocaleText = function (loc) { + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + return res ? res : ""; + }; + LocalizableString.prototype.setLocaleText = function (loc, value) { + if (!loc) + loc = LocalizableString.defaultLocale; + if (!value) { + if (this.values[loc]) + delete this.values[loc]; + } + else { + if (typeof value === 'string') { + if (loc != LocalizableString.defaultLocale && value == this.getLocaleText(LocalizableString.defaultLocale)) { + this.setLocaleText(loc, null); + } + else { + this.values[loc] = value; + if (loc == LocalizableString.defaultLocale) { + this.deleteValuesEqualsToDefault(value); + } + } + } + } + }; + LocalizableString.prototype.getJson = function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return null; + if (keys.length == 1 && keys[0] == LocalizableString.defaultLocale) + return this.values[keys[0]]; + return this.values; + }; + LocalizableString.prototype.setJson = function (value) { + this.values = {}; + if (!value) + return; + if (typeof value === 'string') { + this.setLocaleText(null, value); + } + else { + for (var key in value) { + this.setLocaleText(key, value[key]); + } + } + }; + LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) { + var keys = Object.keys(this.values); + for (var i = 0; i < keys.length; i++) { + if (keys[i] == LocalizableString.defaultLocale) + continue; + if (this.values[keys[i]] == defaultValue) + delete this.values[keys[i]]; + } + }; + return LocalizableString; +}()); + +LocalizableString.defaultLocale = "default"; + + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyElementBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionElementBase; }); + + +var SurveyElementBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyElementBase, _super); + function SurveyElementBase(props) { + var _this = _super.call(this, props) || this; + _this.css = props.css; + _this.rootCss = props.rootCss; + _this.isDisplayMode = props.isDisplayMode || false; + return _this; + } + SurveyElementBase.prototype.componentWillReceiveProps = function (nextProps) { + this.css = nextProps.css; + this.rootCss = nextProps.rootCss; + this.isDisplayMode = nextProps.isDisplayMode || false; + }; + return SurveyElementBase; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyQuestionElementBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionElementBase, _super); + function SurveyQuestionElementBase(props) { + var _this = _super.call(this, props) || this; + _this.questionBase = props.question; + _this.creator = props.creator; + return _this; + } + SurveyQuestionElementBase.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.questionBase = nextProps.question; + this.creator = nextProps.creator; + }; + SurveyQuestionElementBase.prototype.shouldComponentUpdate = function () { + return !this.questionBase.customWidget || !!this.questionBase.customWidget.widgetJson.render; + }; + return SurveyQuestionElementBase; +}(SurveyElementBase)); + + + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AnswerRequiredError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return RequreNumericError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ExceedSizeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomError; }); + + + +var AnswerRequiredError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerRequiredError, _super); + function AnswerRequiredError() { + return _super.call(this) || this; + } + AnswerRequiredError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("requiredError"); + }; + return AnswerRequiredError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var RequreNumericError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RequreNumericError, _super); + function RequreNumericError() { + return _super.call(this) || this; + } + RequreNumericError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("numericError"); + }; + return RequreNumericError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var ExceedSizeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ExceedSizeError, _super); + function ExceedSizeError(maxSize) { + var _this = _super.call(this) || this; + _this.maxSize = maxSize; + return _this; + } + ExceedSizeError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("exceedMaxSize")["format"](this.getTextSize()); + }; + ExceedSizeError.prototype.getTextSize = function () { + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + var fixed = [0, 0, 2, 3, 3]; + if (this.maxSize == 0) + return '0 Byte'; + var i = Math.floor(Math.log(this.maxSize) / Math.log(1024)); + var value = this.maxSize / Math.pow(1024, i); + return value.toFixed(fixed[i]) + ' ' + sizes[i]; + }; + return ExceedSizeError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var CustomError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](CustomError, _super); + function CustomError(text) { + var _this = _super.call(this) || this; + _this.text = text; + return _this; + } + CustomError.prototype.getText = function () { + return this.text; + }; + return CustomError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + + + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionbase__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__validator__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Question; }); + + + + + + + + + +var Question = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Question, _super); + function Question(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRequiredValue = false; + _this.hasCommentValue = false; + _this.hasOtherValue = false; + _this.readOnlyValue = false; + _this.errors = []; + _this.validators = new Array(); + _this.isvalueChangedCallbackFiring = false; + _this.isValueChangedInSurvey = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + _this.locCommentTextValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(Question.prototype, "hasTitle", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasInput", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "inputId", { + get: function () { return this.id + "i"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "title", { + get: function () { + var res = this.locTitle.text; + return res ? res : this.name; + }, + set: function (newValue) { + this.locTitle.text = newValue; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locCommentText", { + get: function () { return this.locCommentTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "processedTitle", { + get: function () { return this.survey != null ? this.survey.processText(this.title) : this.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "fullTitle", { + get: function () { + if (this.survey && this.survey.questionTitleTemplate) { + if (!this.textPreProcessor) { + var self = this; + this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__["a" /* TextPreProcessor */](); + this.textPreProcessor.onHasValue = function (name) { return self.canProcessedTextValues(name.toLowerCase()); }; + this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + } + return this.textPreProcessor.process(this.survey.questionTitleTemplate); + } + var requireText = this.requiredText; + if (requireText) + requireText += " "; + var no = this.no; + if (no) + no += ". "; + return no + requireText + this.processedTitle; + }, + enumerable: true, + configurable: true + }); + Question.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + __WEBPACK_IMPORTED_MODULE_3__base__["d" /* SurveyElement */].ScrollElementToTop(this.id); + var id = !onError ? this.getFirstInputElementId() : this.getFirstErrorInputElementId(); + if (__WEBPACK_IMPORTED_MODULE_3__base__["d" /* SurveyElement */].FocusElement(id)) { + this.fireCallback(this.focusCallback); + } + }; + Question.prototype.getFirstInputElementId = function () { + return this.inputId; + }; + Question.prototype.getFirstErrorInputElementId = function () { + return this.getFirstInputElementId(); + }; + Question.prototype.canProcessedTextValues = function (name) { + return name == "no" || name == "title" || name == "require"; + }; + Question.prototype.getProcessedTextValue = function (name) { + if (name == "no") + return this.no; + if (name == "title") + return this.processedTitle; + if (name == "require") + return this.requiredText; + return null; + }; + Question.prototype.supportComment = function () { return false; }; + Question.prototype.supportOther = function () { return false; }; + Object.defineProperty(Question.prototype, "isRequired", { + get: function () { return this.isRequiredValue; }, + set: function (val) { + if (this.isRequired == val) + return; + this.isRequiredValue = val; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasComment", { + get: function () { return this.hasCommentValue; }, + set: function (val) { + if (!this.supportComment()) + return; + this.hasCommentValue = val; + if (this.hasComment) + this.hasOther = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "commentText", { + get: function () { + var res = this.locCommentText.text; + return res ? res : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + }, + set: function (value) { + this.locCommentText.text = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasOther", { + get: function () { return this.hasOtherValue; }, + set: function (val) { + if (!this.supportOther() || this.hasOther == val) + return; + this.hasOtherValue = val; + if (this.hasOther) + this.hasComment = false; + this.hasOtherChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.hasOtherChanged = function () { }; + Object.defineProperty(Question.prototype, "isReadOnly", { + get: function () { return this.readOnly || (this.survey && this.survey.isDisplayMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "readOnly", { + get: function () { return this.readOnlyValue; }, + set: function (value) { + if (this.readOnly == value) + return; + this.readOnlyValue = value; + this.readOnlyChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.readOnlyChanged = function () { + this.fireCallback(this.readOnlyChangedCallback); + }; + Object.defineProperty(Question.prototype, "no", { + get: function () { + if (this.visibleIndex < 0) + return ""; + var startIndex = 1; + var isNumeric = true; + var str = ""; + if (this.survey && this.survey.questionStartIndex) { + str = this.survey.questionStartIndex; + if (parseInt(str)) + startIndex = parseInt(str); + else if (str.length == 1) + isNumeric = false; + } + if (isNumeric) + return (this.visibleIndex + startIndex).toString(); + return String.fromCharCode(str.charCodeAt(0) + this.visibleIndex); + }, + enumerable: true, + configurable: true + }); + Question.prototype.onSetData = function () { + _super.prototype.onSetData.call(this); + this.onSurveyValueChanged(this.value); + }; + Object.defineProperty(Question.prototype, "value", { + get: function () { + return this.valueFromData(this.getValueCore()); + }, + set: function (newValue) { + this.setNewValue(newValue); + if (this.isvalueChangedCallbackFiring) + return; + this.isvalueChangedCallbackFiring = true; + this.fireCallback(this.valueChangedCallback); + this.isvalueChangedCallbackFiring = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "comment", { + get: function () { return this.getComment(); }, + set: function (newValue) { + if (this.comment == newValue) + return; + this.setComment(newValue); + this.fireCallback(this.commentChangedCallback); + }, + enumerable: true, + configurable: true + }); + Question.prototype.getComment = function () { return this.data != null ? this.data.getComment(this.name) : this.questionComment; }; + Question.prototype.setComment = function (newValue) { + this.setNewComment(newValue); + }; + Question.prototype.isEmpty = function () { return this.value == null; }; + Question.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + this.checkForErrors(fireCallback); + return this.errors.length > 0; + }; + Object.defineProperty(Question.prototype, "currentErrorCount", { + get: function () { return this.errors.length; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "requiredText", { + get: function () { return this.survey != null && this.isRequired ? this.survey.requiredText : ""; }, + enumerable: true, + configurable: true + }); + Question.prototype.addError = function (error) { + this.errors.push(error); + this.fireCallback(this.errorsChangedCallback); + }; + Question.prototype.checkForErrors = function (fireCallback) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + this.onCheckForErrors(this.errors); + if (this.errors.length == 0 && this.value) { + var error = this.runValidators(); + if (error) { + this.errors.push(error); + } + } + if (this.survey && this.errors.length == 0) { + var error = this.survey.validateQuestion(this.name); + if (error) { + this.errors.push(error); + } + } + if (fireCallback && (errorLength != this.errors.length || errorLength > 0)) { + this.fireCallback(this.errorsChangedCallback); + } + }; + Question.prototype.onCheckForErrors = function (errors) { + if (this.hasRequiredError()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["b" /* AnswerRequiredError */]()); + } + }; + Question.prototype.hasRequiredError = function () { + return this.isRequired && this.isEmpty(); + }; + Question.prototype.runValidators = function () { + return new __WEBPACK_IMPORTED_MODULE_6__validator__["a" /* ValidatorRunner */]().run(this); + }; + Question.prototype.setNewValue = function (newValue) { + this.setNewValueInData(newValue); + this.onValueChanged(); + }; + Question.prototype.setNewValueInData = function (newValue) { + if (!this.isValueChangedInSurvey) { + newValue = this.valueToData(newValue); + this.setValueCore(newValue); + } + }; + Question.prototype.getValueCore = function () { + return this.data != null ? this.data.getValue(this.name) : this.questionValue; + }; + Question.prototype.setValueCore = function (newValue) { + if (this.data != null) { + this.data.setValue(this.name, newValue); + } + else { + this.questionValue = newValue; + } + }; + Question.prototype.valueFromData = function (val) { return val; }; + Question.prototype.valueToData = function (val) { return val; }; + Question.prototype.onValueChanged = function () { }; + Question.prototype.setNewComment = function (newValue) { + if (this.data != null) { + this.data.setComment(this.name, newValue); + } + else + this.questionComment = newValue; + }; + //IQuestion + Question.prototype.onSurveyValueChanged = function (newValue) { + this.isValueChangedInSurvey = true; + this.value = this.valueFromData(newValue); + this.fireCallback(this.commentChangedCallback); + this.isValueChangedInSurvey = false; + }; + //IValidatorOwner + Question.prototype.getValidatorTitle = function () { return null; }; + return Question; +}(__WEBPACK_IMPORTED_MODULE_2__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("question", [{ name: "title:text", serializationProperty: "locTitle" }, + { name: "commentText", serializationProperty: "locCommentText" }, + "isRequired:boolean", "readOnly:boolean", { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], null, "questionbase"); + + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemValue; }); + +var ItemValue = (function () { + function ItemValue(value, text) { + if (text === void 0) { text = null; } + this.locTextValue = new __WEBPACK_IMPORTED_MODULE_0__localizablestring__["a" /* LocalizableString */](null); + if (text) + this.locText.text = text; + this.value = value; + } + ItemValue.createArray = function (locOwner) { + var items = []; + ItemValue.setupArray(items, locOwner); + return items; + }; + ItemValue.setupArray = function (items, locOwner) { + items.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = locOwner; + return result; + }; + items.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = locOwner; + } + return result; + var _a; + }; + }; + ItemValue.setData = function (items, values) { + items.length = 0; + for (var i = 0; i < values.length; i++) { + var value = values[i]; + var item = new ItemValue(null); + item.setData(value); + items.push(item); + } + }; + ItemValue.getData = function (items) { + var result = new Array(); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item.hasText) { + result.push({ value: item.value, text: item.locText.getJson() }); + } + else { + result.push(item.value); + } + } + return result; + }; + ItemValue.getItemByValue = function (items, val) { + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return items[i]; + } + return null; + }; + ItemValue.prototype.getType = function () { return "itemvalue"; }; + Object.defineProperty(ItemValue.prototype, "locText", { + get: function () { return this.locTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "locOwner", { + get: function () { return this.locText.owner; }, + set: function (value) { this.locText.owner = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "value", { + get: function () { return this.itemValue; }, + set: function (newValue) { + this.itemValue = newValue; + if (!this.itemValue) + return; + var str = this.itemValue.toString(); + var index = str.indexOf(ItemValue.Separator); + if (index > -1) { + this.itemValue = str.slice(0, index); + this.text = str.slice(index + 1); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "hasText", { + get: function () { return this.locText.text ? true : false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "text", { + get: function () { + if (this.hasText) + return this.locText.text; + if (this.value) + return this.value.toString(); + return null; + }, + set: function (newText) { + this.locText.text = newText; + }, + enumerable: true, + configurable: true + }); + ItemValue.prototype.setData = function (value) { + if (typeof (value.value) !== 'undefined') { + var exception = null; + if (this.isObjItemValue(value)) { + value.itemValue = value.itemValue; + this.locText.setJson(value.locText.getJson()); + exception = ItemValue.itemValueProp; + } + this.copyAttributes(value, exception); + } + else { + this.value = value; + } + }; + ItemValue.prototype.isObjItemValue = function (obj) { return typeof (obj.getType) !== 'undefined' && obj.getType() == 'itemvalue'; }; + ItemValue.prototype.copyAttributes = function (src, exceptons) { + for (var key in src) { + if ((typeof src[key] == 'function')) + continue; + if (exceptons && exceptons.indexOf(key) > -1) + continue; + if (key == "text") { + this.locText.setJson(src[key]); + } + else { + this[key] = src[key]; + } + } + }; + return ItemValue; +}()); + +ItemValue.Separator = '|'; +ItemValue.itemValueProp = ["text", "value", "hasText", "locOwner", "locText"]; + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionComment; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionCommentItem; }); + + + + +var SurveyQuestionComment = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionComment, _super); + function SurveyQuestionComment(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionComment.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionComment.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state = { value: this.question.value || '' }; + }; + SurveyQuestionComment.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionComment.prototype.handleOnBlur = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value || '' }); + }; + SurveyQuestionComment.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css }, this.question.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("textarea", { id: this.question.inputId, className: this.css, type: "text", value: this.state.value, placeholder: this.question.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange, cols: this.question.cols, rows: this.question.rows })); + }; + return SurveyQuestionComment; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +var SurveyQuestionCommentItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCommentItem, _super); + function SurveyQuestionCommentItem(props) { + var _this = _super.call(this, props) || this; + _this.question = props.question; + _this.comment = _this.question.comment; + _this.state = { value: _this.comment }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + SurveyQuestionCommentItem.prototype.handleOnChange = function (event) { + this.comment = event.target.value; + this.setState({ value: this.comment }); + }; + SurveyQuestionCommentItem.prototype.handleOnBlur = function (event) { + this.question.comment = this.comment; + }; + SurveyQuestionCommentItem.prototype.componentWillReceiveProps = function (nextProps) { + this.question = nextProps.question; + }; + SurveyQuestionCommentItem.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.question.comment }, this.comment)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "text", className: this.css.question.comment, value: this.state.value, onChange: this.handleOnChange, onBlur: this.handleOnBlur })); + }; + return SurveyQuestionCommentItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("comment", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionComment, props); +}); + + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionSelectBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxBase; }); + + + + + + + + +var QuestionSelectBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionSelectBase, _super); + function QuestionSelectBase(name) { + var _this = _super.call(this, name) || this; + _this.visibleChoicesCache = null; + _this.otherItemValue = new __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */]("other", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText")); + _this.choicesFromUrl = null; + _this.cachedValueForUrlRequestion = null; + _this.storeOthersAsComment = true; + _this.choicesOrderValue = "none"; + _this.isSettingComment = false; + _this.choicesValues = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.choicesByUrl = _this.createRestfull(); + _this.locOtherTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.locOtherErrorTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.choicesByUrl.getResultCallback = function (items) { self.onLoadChoicesFromUrl(items); }; + return _this; + } + Object.defineProperty(QuestionSelectBase.prototype, "otherItem", { + get: function () { + this.otherItemValue.text = this.otherText ? this.otherText : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + return this.otherItemValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "isOtherSelected", { + get: function () { + return this.getStoreOthersAsComment() ? this.getHasOther(this.value) : this.getHasOther(this.cachedValue); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.getHasOther = function (val) { + return val == this.otherItem.value; + }; + QuestionSelectBase.prototype.createRestfull = function () { return new __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__["a" /* ChoicesRestfull */](); }; + QuestionSelectBase.prototype.getComment = function () { + if (this.getStoreOthersAsComment()) + return _super.prototype.getComment.call(this); + return this.commentValue; + }; + QuestionSelectBase.prototype.setComment = function (newValue) { + if (this.getStoreOthersAsComment()) + _super.prototype.setComment.call(this, newValue); + else { + if (!this.isSettingComment && newValue != this.commentValue) { + this.isSettingComment = true; + this.commentValue = newValue; + if (this.isOtherSelected) { + this.setNewValueInData(this.cachedValue); + } + this.isSettingComment = false; + } + } + }; + QuestionSelectBase.prototype.setNewValue = function (newValue) { + if (newValue) + this.cachedValueForUrlRequestion = newValue; + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionSelectBase.prototype.valueFromData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueFromData.call(this, val); + this.cachedValue = this.valueFromDataCore(val); + return this.cachedValue; + }; + QuestionSelectBase.prototype.valueToData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueToData.call(this, val); + this.cachedValue = val; + return this.valueToDataCore(val); + }; + QuestionSelectBase.prototype.valueFromDataCore = function (val) { + if (!this.hasUnknownValue(val)) + return val; + if (val == this.otherItem.value) + return val; + this.comment = val; + return this.otherItem.value; + }; + QuestionSelectBase.prototype.valueToDataCore = function (val) { + if (val == this.otherItem.value && this.getComment()) { + val = this.getComment(); + } + return val; + }; + QuestionSelectBase.prototype.hasUnknownValue = function (val) { + if (!val) + return false; + var items = this.activeChoices; + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return false; + } + return true; + }; + Object.defineProperty(QuestionSelectBase.prototype, "choices", { + get: function () { return this.choicesValues; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.choicesValues, newValue); + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.hasOtherChanged = function () { + this.onVisibleChoicesChanged(); + }; + Object.defineProperty(QuestionSelectBase.prototype, "choicesOrder", { + get: function () { return this.choicesOrderValue; }, + set: function (newValue) { + if (newValue == this.choicesOrderValue) + return; + this.choicesOrderValue = newValue; + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherText", { + get: function () { return this.locOtherText.text; }, + set: function (value) { + this.locOtherText.text = value; + this.updateOtherItem(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherErrorText", { + get: function () { return this.locOtherErrorText.text; }, + set: function (value) { this.locOtherErrorText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherText", { + get: function () { return this.locOtherTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherErrorText", { + get: function () { return this.locOtherErrorTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "visibleChoices", { + get: function () { + if (!this.hasOther && this.choicesOrder == "none") + return this.activeChoices; + if (!this.visibleChoicesCache) { + this.visibleChoicesCache = this.sortVisibleChoices(this.activeChoices.slice()); + if (this.hasOther) { + this.visibleChoicesCache.push(this.otherItem); + } + } + return this.visibleChoicesCache; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "activeChoices", { + get: function () { return this.choicesFromUrl ? this.choicesFromUrl : this.choices; }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.supportComment = function () { return true; }; + QuestionSelectBase.prototype.supportOther = function () { return true; }; + QuestionSelectBase.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (!this.isOtherSelected || this.comment) + return; + var text = this.otherErrorText; + if (!text) { + text = __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherRequiredError"); + } + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](text)); + }; + QuestionSelectBase.prototype.onLocaleChanged = function () { + _super.prototype.onLocaleChanged.call(this); + this.updateOtherItem(); + }; + QuestionSelectBase.prototype.updateOtherItem = function () { + var item = this.otherItem; // set the correct text + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.getStoreOthersAsComment = function () { return this.storeOthersAsComment && (this.survey != null ? this.survey.storeOthersAsComment : true); }; + QuestionSelectBase.prototype.onSurveyLoad = function () { + if (this.choicesByUrl) + this.choicesByUrl.run(); + }; + QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) { + var errorCount = this.errors.length; + this.errors = []; + if (this.choicesByUrl && this.choicesByUrl.error) { + this.errors.push(this.choicesByUrl.error); + } + if (errorCount > 0 || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + var newChoices = null; + if (array && array.length > 0) { + newChoices = new Array(); + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(newChoices, array); + } + this.choicesFromUrl = newChoices; + this.onVisibleChoicesChanged(); + if (this.cachedValueForUrlRequestion) { + this.value = this.cachedValueForUrlRequestion; + } + }; + QuestionSelectBase.prototype.onVisibleChoicesChanged = function () { + this.visibleChoicesCache = null; + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.sortVisibleChoices = function (array) { + var order = this.choicesOrder.toLowerCase(); + if (order == "asc") + return this.sortArray(array, 1); + if (order == "desc") + return this.sortArray(array, -1); + if (order == "random") + return this.randomizeArray(array); + return array; + }; + QuestionSelectBase.prototype.sortArray = function (array, mult) { + return array.sort(function (a, b) { + if (a.text < b.text) + return -1 * mult; + if (a.text > b.text) + return 1 * mult; + return 0; + }); + }; + QuestionSelectBase.prototype.randomizeArray = function (array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + return array; + }; + QuestionSelectBase.prototype.clearUnusedValues = function () { + _super.prototype.clearUnusedValues.call(this); + if (!this.isOtherSelected) { + this.comment = null; + } + }; + return QuestionSelectBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +var QuestionCheckboxBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxBase, _super); + function QuestionCheckboxBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + return _this; + } + Object.defineProperty(QuestionCheckboxBase.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + return QuestionCheckboxBase; +}(QuestionSelectBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("selectbase", ["hasComment:boolean", "hasOther:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "otherText", serializationProperty: "locOtherText" }, { name: "otherErrorText", serializationProperty: "locOtherErrorText" }, + { name: "storeOthersAsComment:boolean", default: true }], null, "question"); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkboxbase", [{ name: "colCount:number", default: 1, choices: [0, 1, 2, 3, 4] }], null, "selectbase"); + + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditionsParser__ = __webpack_require__(28); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__ = __webpack_require__(18); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Condition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ConditionNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionRunner; }); + + +var Condition = (function () { + function Condition() { + this.opValue = "equal"; + } + Object.defineProperty(Condition, "operators", { + get: function () { + if (Condition.operatorsValue != null) + return Condition.operatorsValue; + Condition.operatorsValue = { + empty: function (left, right) { return !left; }, + notempty: function (left, right) { return !(!left); }, + equal: function (left, right) { return left == right; }, + notequal: function (left, right) { return left != right; }, + contains: function (left, right) { return left && left["indexOf"] && left.indexOf(right) > -1; }, + notcontains: function (left, right) { return !left || !left["indexOf"] || left.indexOf(right) == -1; }, + greater: function (left, right) { return left > right; }, + less: function (left, right) { return left < right; }, + greaterorequal: function (left, right) { return left >= right; }, + lessorequal: function (left, right) { return left <= right; } + }; + return Condition.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Condition.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Condition.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Condition.prototype.perform = function (left, right) { + if (left === void 0) { left = null; } + if (right === void 0) { right = null; } + if (!left) + left = this.left; + if (!right) + right = this.right; + return Condition.operators[this.operator](this.getPureValue(left), this.getPureValue(right)); + }; + Condition.prototype.getPureValue = function (val) { + if (!val || (typeof val != "string")) + return val; + var str = ""; + if (val.length > 0 && (val[0] == "'" || val[0] == '"')) + val = val.substr(1); + var len = val.length; + if (len > 0 && (val[len - 1] == "'" || val[len - 1] == '"')) + val = val.substr(0, len - 1); + return val; + }; + return Condition; +}()); + +Condition.operatorsValue = null; +var ConditionNode = (function () { + function ConditionNode() { + this.connectiveValue = "and"; + this.children = []; + } + Object.defineProperty(ConditionNode.prototype, "connective", { + get: function () { return this.connectiveValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (value == "&" || value == "&&") + value = "and"; + if (value == "|" || value == "||") + value = "or"; + if (value != "and" && value != "or") + return; + this.connectiveValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConditionNode.prototype, "isEmpty", { + get: function () { return this.children.length == 0; }, + enumerable: true, + configurable: true + }); + ConditionNode.prototype.clear = function () { + this.children = []; + this.connective = "and"; + }; + return ConditionNode; +}()); + +var ConditionRunner = (function () { + function ConditionRunner(expression) { + this.root = new ConditionNode(); + this.expression = expression; + this.processValue = new __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__["a" /* ProcessValue */](); + } + Object.defineProperty(ConditionRunner.prototype, "expression", { + get: function () { return this.expressionValue; }, + set: function (value) { + if (this.expression == value) + return; + this.expressionValue = value; + new __WEBPACK_IMPORTED_MODULE_0__conditionsParser__["a" /* ConditionsParser */]().parse(this.expressionValue, this.root); + }, + enumerable: true, + configurable: true + }); + ConditionRunner.prototype.run = function (values) { + this.values = values; + return this.runNode(this.root); + }; + ConditionRunner.prototype.runNode = function (node) { + var onFirstFail = node.connective == "and"; + for (var i = 0; i < node.children.length; i++) { + var res = this.runNodeCondition(node.children[i]); + if (!res && onFirstFail) + return false; + if (res && !onFirstFail) + return true; + } + return onFirstFail; + }; + ConditionRunner.prototype.runNodeCondition = function (value) { + if (!value) + return false; + if (value["children"]) + return this.runNode(value); + if (value["left"]) + return this.runCondition(value); + return false; + }; + ConditionRunner.prototype.runCondition = function (condition) { + var left = condition.left; + var name = this.getValueName(left); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return condition.operator === "empty"; + left = this.processValue.getValue(name, this.values); + } + var right = condition.right; + name = this.getValueName(right); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return false; + right = this.processValue.getValue(name, this.values); + } + return condition.perform(left, right); + }; + ConditionRunner.prototype.getValueName = function (nodeValue) { + if (!nodeValue) + return null; + if (typeof nodeValue !== 'string') + return null; + if (nodeValue.length < 3 || nodeValue[0] != '{' || nodeValue[nodeValue.length - 1] != '}') + return null; + return nodeValue.substr(1, nodeValue.length - 2); + }; + return ConditionRunner; +}()); + + + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestion; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionErrors; }); + + + + +var SurveyQuestion = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestion, _super); + function SurveyQuestion(props) { + var _this = _super.call(this, props) || this; + _this.setQuestion(props.question); + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyQuestion.prototype.componentWillReceiveProps = function (nextProps) { + this.creator = nextProps.creator; + this.css = nextProps.css; + this.setQuestion(nextProps.question); + }; + SurveyQuestion.prototype.setQuestion = function (question) { + this.questionBase = question; + this.question = question instanceof __WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */] ? question : null; + var value = this.question ? this.question.value : null; + this.state = { + visible: this.questionBase.visible, value: value, error: 0, renderWidth: 0, + visibleIndexValue: -1, isReadOnly: this.questionBase.isReadOnly + }; + }; + SurveyQuestion.prototype.componentDidMount = function () { + if (this.questionBase) { + var self = this; + this.questionBase["react"] = self; + this.questionBase.renderWidthChangedCallback = function () { + self.state.renderWidth = self.state.renderWidth + 1; + self.setState(self.state); + }; + this.questionBase.visibleIndexChangedCallback = function () { + self.state.visibleIndexValue = self.questionBase.visibleIndex; + self.setState(self.state); + }; + this.questionBase.readOnlyChangedCallback = function () { + self.state.isReadOnly = self.questionBase.isReadOnly; + self.setState(self.state); + }; + var el = this.refs["root"]; + if (el && this.questionBase.survey) + this.questionBase.survey.afterRenderQuestion(this.questionBase, el); + if (this.questionBase.customWidget) { + el = this.refs["widget"]; + if (el) + this.questionBase.customWidget.afterRender(this.questionBase, el); + } + } + }; + SurveyQuestion.prototype.componentWillUnmount = function () { + var el = this.refs["root"]; + if (this.questionBase) { + this.questionBase["react"] = null; + this.questionBase.renderWidthChangedCallback = null; + this.questionBase.visibleIndexChangedCallback = null; + this.questionBase.readOnlyChangedCallback = null; + } + if (this.questionBase.customWidget) { + el = this.refs["widget"]; + if (el) + this.questionBase.customWidget.willUnmount(this.questionBase, el); + } + }; + SurveyQuestion.prototype.render = function () { + if (!this.questionBase || !this.creator) + return null; + if (!this.questionBase.visible) + return null; + var questionRender = this.renderQuestion(); + var title = this.questionBase.hasTitle ? this.renderTitle() : null; + var titleTop = this.creator.questionTitleLocation() == "top" ? title : null; + var titleBottom = this.creator.questionTitleLocation() == "bottom" ? title : null; + var comment = (this.question && this.question.hasComment) ? this.renderComment() : null; + var errors = this.renderErrors(); + var marginLeft = (this.questionBase.indent > 0) ? this.questionBase.indent * this.css.question.indent + "px" : null; + var paddingRight = (this.questionBase.rightIndent > 0) ? this.questionBase.rightIndent * this.css.question.indent + "px" : null; + var rootStyle = { display: 'inline-block', verticalAlign: 'top' }; + if (this.questionBase.renderWidth) + rootStyle["width"] = this.questionBase.renderWidth; + if (marginLeft) + rootStyle["marginLeft"] = marginLeft; + if (paddingRight) + rootStyle["paddingRight"] = paddingRight; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root", id: this.questionBase.id, className: this.css.question.root, style: rootStyle }, + titleTop, + errors, + questionRender, + comment, + titleBottom)); + }; + SurveyQuestion.prototype.renderQuestion = function () { + var customWidget = this.questionBase.customWidget; + if (!customWidget) + return this.creator.createQuestionElement(this.questionBase); + var widget = null; + if (customWidget.widgetJson.isDefaultRender) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget" }, this.creator.createQuestionElement(this.questionBase)); + } + if (customWidget.widgetJson.render) { + widget = customWidget.widgetJson.render(this.questionBase); + } + else { + if (customWidget.htmlTemplate) { + var htmlValue = { __html: customWidget.htmlTemplate }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget", dangerouslySetInnerHTML: htmlValue })); + } + } + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget" }, widget); + }; + SurveyQuestion.prototype.renderTitle = function () { + var titleText = this.question.fullTitle; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h5", { className: this.css.question.title }, titleText)); + }; + SurveyQuestion.prototype.renderComment = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, this.question.commentText), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.css }))); + }; + SurveyQuestion.prototype.renderErrors = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionErrors, { question: this.question, css: this.css, creator: this.creator }); + }; + return SurveyQuestion; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyQuestionErrors = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionErrors, _super); + function SurveyQuestionErrors(props) { + var _this = _super.call(this, props) || this; + _this.setQuestion(props.question); + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyQuestionErrors.prototype.componentWillReceiveProps = function (nextProps) { + this.setQuestion(nextProps.question); + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyQuestionErrors.prototype.setQuestion = function (question) { + this.question = question instanceof __WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */] ? question : null; + if (this.question) { + var self = this; + this.question.errorsChangedCallback = function () { + self.state.error = self.state.error + 1; + self.setState(self.state); + }; + } + this.state = { error: 0 }; + }; + SurveyQuestionErrors.prototype.render = function () { + if (!this.question || this.question.errors.length == 0) + return null; + var errors = []; + for (var i = 0; i < this.question.errors.length; i++) { + var errorText = this.question.errors[i].getText(); + var key = "error" + i; + errors.push(this.creator.renderError(key, errorText)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.error.root }, errors)); + }; + return SurveyQuestionErrors; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_dom__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_dom__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__react_reactSurvey__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__react_reactSurveyWindow__ = __webpack_require__(35); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNG; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyWindowNG; }); + + + + + +var SurveyNG = (function () { + function SurveyNG() { + } + SurveyNG.render = function (elementId, props) { + var element = typeof elementId === 'string' ? document.getElementById(elementId) : elementId; + __WEBPACK_IMPORTED_MODULE_2_react_dom__["render"](__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__react_reactSurvey__["a" /* Survey */], __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */]({}, props)), element); + }; + return SurveyNG; +}()); + +var SurveyWindowNG = (function () { + function SurveyWindowNG() { + } + SurveyWindowNG.render = function (elementId, props) { + var element = typeof elementId === 'string' ? document.getElementById(elementId) : elementId; + __WEBPACK_IMPORTED_MODULE_2_react_dom__["render"](__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_4__react_reactSurveyWindow__["a" /* SurveyWindow */], __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */]({}, props)), element); + }; + return SurveyWindowNG; +}()); + + + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChoicesRestfull; }); + + + + + + +var ChoicesRestfull = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ChoicesRestfull, _super); + function ChoicesRestfull() { + var _this = _super.call(this) || this; + _this.url = ""; + _this.path = ""; + _this.valueName = ""; + _this.titleName = ""; + _this.error = null; + return _this; + } + ChoicesRestfull.prototype.run = function () { + if (!this.url || !this.getResultCallback) + return; + this.error = null; + var xhr = new XMLHttpRequest(); + xhr.open('GET', this.url); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + if (xhr.status == 200) { + self.onLoad(JSON.parse(xhr.response)); + } + else { + self.onError(xhr.statusText, xhr.responseText); + } + }; + xhr.send(); + }; + ChoicesRestfull.prototype.getType = function () { return "choicesByUrl"; }; + Object.defineProperty(ChoicesRestfull.prototype, "isEmpty", { + get: function () { + return !this.url && !this.path && !this.valueName && !this.titleName; + }, + enumerable: true, + configurable: true + }); + ChoicesRestfull.prototype.setData = function (json) { + this.clear(); + if (json.url) + this.url = json.url; + if (json.path) + this.path = json.path; + if (json.valueName) + this.valueName = json.valueName; + if (json.titleName) + this.titleName = json.titleName; + }; + ChoicesRestfull.prototype.clear = function () { + this.url = ""; + this.path = ""; + this.valueName = ""; + this.titleName = ""; + }; + ChoicesRestfull.prototype.onLoad = function (result) { + var items = []; + result = this.getResultAfterPath(result); + if (result && result["length"]) { + for (var i = 0; i < result.length; i++) { + var itemValue = result[i]; + if (!itemValue) + continue; + var value = this.getValue(itemValue); + var title = this.getTitle(itemValue); + items.push(new __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */](value, title)); + } + } + else { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlGetChoicesError")); + } + this.getResultCallback(items); + }; + ChoicesRestfull.prototype.onError = function (status, response) { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlRequestError")["format"](status, response)); + this.getResultCallback([]); + }; + ChoicesRestfull.prototype.getResultAfterPath = function (result) { + if (!result) + return result; + if (!this.path) + return result; + var pathes = this.getPathes(); + for (var i = 0; i < pathes.length; i++) { + result = result[pathes[i]]; + if (!result) + return null; + } + return result; + }; + ChoicesRestfull.prototype.getPathes = function () { + var pathes = []; + if (this.path.indexOf(';') > -1) { + pathes = this.path.split(';'); + } + else { + pathes = this.path.split(','); + } + if (pathes.length == 0) + pathes.push(this.path); + return pathes; + }; + ChoicesRestfull.prototype.getValue = function (item) { + if (this.valueName) + return item[this.valueName]; + var len = Object.keys(item).length; + if (len < 1) + return null; + return item[Object.keys(item)[0]]; + }; + ChoicesRestfull.prototype.getTitle = function (item) { + if (!this.titleName) + return null; + return item[this.titleName]; + }; + return ChoicesRestfull; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("choicesByUrl", ["url", "path", "valueName", "titleName"], function () { return new ChoicesRestfull(); }); + + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ProcessValue; }); +var ProcessValue = (function () { + function ProcessValue() { + } + ProcessValue.prototype.getFirstName = function (text) { + if (!text) + return text; + var res = ""; + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + if (ch == '.' || ch == '[') + break; + res += ch; + } + return res; + }; + ProcessValue.prototype.hasValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.hasValue; + }; + ProcessValue.prototype.getValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.value; + }; + ProcessValue.prototype.getValueCore = function (text, values) { + var res = { hasValue: false, value: null }; + var curValue = values; + if (!curValue) + return res; + var isFirst = true; + while (text && text.length > 0) { + var isArray = !isFirst && text[0] == '['; + if (!isArray) { + if (!isFirst) + text = text.substr(1); + var curName = this.getFirstName(text); + if (!curName) + return res; + if (!curValue[curName]) + return res; + curValue = curValue[curName]; + text = text.substr(curName.length); + } + else { + if (!Array.isArray(curValue)) + return res; + var index = 1; + var str = ""; + while (index < text.length && text[index] != ']') { + str += text[index]; + index++; + } + text = index < text.length ? text.substr(index + 1) : ""; + index = this.getIntValue(str); + if (index < 0 || index >= curValue.length) + return res; + curValue = curValue[index]; + } + isFirst = false; + } + res.value = curValue; + res.hasValue = true; + return res; + }; + ProcessValue.prototype.getIntValue = function (str) { + if (str == "0" || ((str | 0) > 0 && str % 1 == 0)) + return Number(str); + return -1; + }; + return ProcessValue; +}()); + + + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return defaultStandardCss; }); +var surveyCss = { + currentType: "", + getCss: function () { + var loc = this.currentType ? this[this.currentType] : defaultStandardCss; + if (!loc) + loc = defaultStandardCss; + return loc; + }, +}; +var defaultStandardCss = { + root: "sv_main", + header: "", + body: "sv_body", + footer: "sv_nav", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "sv_progress", progressBar: "", + pageTitle: "sv_p_title", + row: "sv_row", + question: { root: "sv_q", title: "sv_q_title", comment: "", indent: 20 }, + error: { root: "sv_q_erbox", icon: "", item: "" }, + checkbox: { root: "sv_qcbc", item: "sv_q_checkbox", other: "sv_q_other" }, + comment: "", + dropdown: { root: "", control: "" }, + matrix: { root: "sv_q_matrix" }, + matrixdropdown: { root: "sv_q_matrix" }, + matrixdynamic: { root: "table", button: "" }, + multipletext: { root: "", itemTitle: "", itemValue: "" }, + radiogroup: { root: "sv_qcbc", item: "sv_q_radiogroup", label: "", other: "sv_q_other" }, + rating: { root: "sv_q_rating", item: "sv_q_rating_item" }, + text: "", + window: { + root: "sv_window", body: "sv_window_content", + header: { + root: "sv_window_title", title: "", button: "", buttonExpanded: "", buttonCollapsed: "" + } + } +}; +surveyCss["standard"] = defaultStandardCss; + + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__question_baseselect__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDropdownColumn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownCell; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return MatrixDropdownRowModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return QuestionMatrixDropdownModelBase; }); + + + + + + + + + + +var MatrixDropdownColumn = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownColumn, _super); + function MatrixDropdownColumn(name, title) { + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.hasOther = false; + _this.minWidth = ""; + _this.cellType = "default"; + _this.inputType = "text"; + _this.choicesOrder = "none"; + _this.locOwner = null; + _this.colCountValue = -1; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.choicesByUrl = new __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__["a" /* ChoicesRestfull */](); + return _this; + } + MatrixDropdownColumn.prototype.getType = function () { return "matrixdropdowncolumn"; }; + Object.defineProperty(MatrixDropdownColumn.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text; }, + set: function (value) { this.locOptionsCaption.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < -1 || value > 4) + return; + this.colCountValue = value; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownColumn.prototype.getLocale = function () { + return this.locOwner ? this.locOwner.getLocale() : ""; + }; + return MatrixDropdownColumn; +}(__WEBPACK_IMPORTED_MODULE_3__base__["c" /* Base */])); + +var MatrixDropdownCell = (function () { + function MatrixDropdownCell(column, row, data) { + this.column = column; + this.row = row; + this.questionValue = data.createQuestion(this.row, this.column); + this.questionValue.setData(row); + } + Object.defineProperty(MatrixDropdownCell.prototype, "question", { + get: function () { return this.questionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownCell.prototype, "value", { + get: function () { return this.question.value; }, + set: function (value) { + this.question.value = value; + }, + enumerable: true, + configurable: true + }); + return MatrixDropdownCell; +}()); + +var MatrixDropdownRowModelBase = (function () { + function MatrixDropdownRowModelBase(data, value) { + this.rowValues = {}; + this.rowComments = {}; + this.isSettingValue = false; + this.cells = []; + this.data = data; + this.value = value; + this.idValue = MatrixDropdownRowModelBase.getId(); + this.buildCells(); + } + MatrixDropdownRowModelBase.getId = function () { return "srow_" + MatrixDropdownRowModelBase.idCounter++; }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "rowName", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "value", { + get: function () { return this.rowValues; }, + set: function (value) { + this.isSettingValue = true; + this.rowValues = {}; + if (value != null) { + for (var key in value) { + this.rowValues[key] = value[key]; + } + } + for (var i = 0; i < this.cells.length; i++) { + this.cells[i].question.onSurveyValueChanged(this.getValue(this.cells[i].column.name)); + } + this.isSettingValue = false; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getValue = function (name) { + return this.rowValues[name]; + }; + MatrixDropdownRowModelBase.prototype.setValue = function (name, newValue) { + if (this.isSettingValue) + return; + if (newValue === "") + newValue = null; + if (newValue != null) { + this.rowValues[name] = newValue; + } + else { + delete this.rowValues[name]; + } + this.data.onRowChanged(this, this.value); + }; + MatrixDropdownRowModelBase.prototype.getComment = function (name) { + return this.rowComments[name]; + }; + MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue) { + this.rowComments[name] = newValue; + }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "isEmpty", { + get: function () { + var val = this.value; + if (!val) + return true; + for (var key in val) + return false; + return true; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + MatrixDropdownRowModelBase.prototype.buildCells = function () { + var columns = this.data.columns; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + this.cells.push(this.createCell(column)); + } + }; + MatrixDropdownRowModelBase.prototype.createCell = function (column) { + return new MatrixDropdownCell(column, this, this.data); + }; + return MatrixDropdownRowModelBase; +}()); + +MatrixDropdownRowModelBase.idCounter = 1; +var QuestionMatrixDropdownModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModelBase, _super); + function QuestionMatrixDropdownModelBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.columnsValue = []; + _this.isRowChanging = false; + _this.generatedVisibleRows = null; + _this.cellTypeValue = "dropdown"; + _this.columnColCountValue = 0; + _this.columnMinWidth = ""; + _this.horizontalScroll = false; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.overrideColumnsMethods(); + return _this; + } + QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) { + var colNames = __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].DefaultColums; + for (var i = 0; i < colNames.length; i++) + matrix.addColumn(colNames[i]); + }; + QuestionMatrixDropdownModelBase.prototype.getType = function () { + return "matrixdropdownbase"; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (value) { + this.columnsValue = value; + this.overrideColumnsMethods(); + this.fireCallback(this.columnsChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.overrideColumnsMethods = function () { + var self = this; + this.columnsValue.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = self; + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + }; + this.columnsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = self; + } + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + var _a; + }; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "cellType", { + get: function () { return this.cellTypeValue; }, + set: function (newValue) { + if (this.cellType == newValue) + return; + this.cellTypeValue = newValue; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columnColCount", { + get: function () { return this.columnColCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.columnColCountValue = value; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.getColumnTitle = function (column) { + var result = column.title; + if (column.isRequired && this.survey) { + var requireText = this.survey.requiredText; + if (requireText) + requireText += " "; + result = requireText + result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) { + return column.minWidth ? column.minWidth : this.columnMinWidth; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) { + if (title === void 0) { title = null; } + var column = new MatrixDropdownColumn(name, title); + this.columnsValue.push(column); + return column; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "visibleRows", { + get: function () { + this.generatedVisibleRows = this.generateRows(); + return this.generatedVisibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.generateRows = function () { return null; }; + QuestionMatrixDropdownModelBase.prototype.createMatrixRow = function (name, text, value) { + return null; + }; + QuestionMatrixDropdownModelBase.prototype.createNewValue = function (curValue) { return !curValue ? {} : curValue; }; + QuestionMatrixDropdownModelBase.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + var result = questionValue[row.rowName] ? questionValue[row.rowName] : null; + if (!result && create) { + result = {}; + questionValue[row.rowName] = result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { + }; + QuestionMatrixDropdownModelBase.prototype.onValueChanged = function () { + if (this.isRowChanging) + return; + this.onBeforeValueChanged(this.value); + if (!(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + this.generatedVisibleRows[i].value = this.getRowValue(row, val); + } + this.isRowChanging = false; + }; + QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + if (!cells) + continue; + for (var colIndex = 0; colIndex < cells.length; colIndex++) { + var question = cells[colIndex].question; + if (question && (!question.supportGoNextPageAutomatic() || !question.value)) + return false; + } + } + return true; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var errosInColumns = this.hasErrorInColumns(fireCallback); + return _super.prototype.hasErrors.call(this, fireCallback) || errosInColumns; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrorInColumns = function (fireCallback) { + if (!this.generatedVisibleRows) + return false; + var res = false; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + res = cells && cells[colIndex] && cells[colIndex].question && cells[colIndex].question.hasErrors(fireCallback) || res; + } + } + return res; + }; + QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () { + var question = this.getFirstCellQuestion(false); + return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () { + var question = this.getFirstCellQuestion(true); + return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) { + if (!this.generatedVisibleRows) + return null; + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + if (!onError) + return cells[colIndex].question; + if (cells[colIndex].question.currentErrorCount > 0) + return cells[colIndex].question; + } + } + return null; + }; + //IMatrixDropdownData + QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) { + var question = this.createQuestionCore(row, column); + question.name = column.name; + question.isRequired = column.isRequired; + question.hasOther = column.hasOther; + question.readOnly = this.readOnly; + question.setData(this.survey); + if (column.hasOther) { + if (question instanceof __WEBPACK_IMPORTED_MODULE_6__question_baseselect__["b" /* QuestionSelectBase */]) { + question.storeOthersAsComment = false; + } + } + return question; + }; + QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) { + var cellType = column.cellType == "default" ? this.cellType : column.cellType; + var name = this.getQuestionName(row, column); + if (cellType == "checkbox") + return this.createCheckbox(name, column); + if (cellType == "radiogroup") + return this.createRadiogroup(name, column); + if (cellType == "text") + return this.createText(name, column); + if (cellType == "comment") + return this.createComment(name, column); + return this.createDropdown(name, column); + }; + QuestionMatrixDropdownModelBase.prototype.getQuestionName = function (row, column) { return row.rowName + "_" + column.name; }; + QuestionMatrixDropdownModelBase.prototype.getColumnChoices = function (column) { + return column.choices && column.choices.length > 0 ? column.choices : this.choices; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnOptionsCaption = function (column) { + return column.optionsCaption ? column.optionsCaption : this.optionsCaption; + }; + QuestionMatrixDropdownModelBase.prototype.createDropdown = function (name, column) { + var q = this.createCellQuestion("dropdown", name); + this.setSelectBaseProperties(q, column); + q.optionsCaption = this.getColumnOptionsCaption(column); + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCheckbox = function (name, column) { + var q = this.createCellQuestion("checkbox", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createRadiogroup = function (name, column) { + var q = this.createCellQuestion("radiogroup", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.setSelectBaseProperties = function (question, column) { + question.choicesOrder = column.choicesOrder; + question.choices = this.getColumnChoices(column); + question.choicesByUrl.setData(column.choicesByUrl); + if (!question.choicesByUrl.isEmpty) { + question.choicesByUrl.run(); + } + }; + QuestionMatrixDropdownModelBase.prototype.createText = function (name, column) { + var q = this.createCellQuestion("text", name); + q.inputType = column.inputType; + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createComment = function (name, column) { + var q = this.createCellQuestion("comment", name); + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCellQuestion = function (questionType, name) { + return __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + }; + QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) { + delete newValue[row.rowName]; + return Object.keys(newValue).length == 0 ? null : newValue; + }; + QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, newRowValue) { + var newValue = this.createNewValue(this.value); + var rowValue = this.getRowValue(row, newValue, true); + for (var key in rowValue) + delete rowValue[key]; + if (newRowValue) { + newRowValue = JSON.parse(JSON.stringify(newRowValue)); + for (var key in newRowValue) + rowValue[key] = newRowValue[key]; + } + if (Object.keys(rowValue).length == 0) { + newValue = this.deleteRowValue(newValue, row); + } + this.isRowChanging = true; + this.setNewValue(newValue); + this.isRowChanging = false; + }; + return QuestionMatrixDropdownModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdowncolumn", ["name", { name: "title", serializationProperty: "locTitle" }, + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, { name: "cellType", default: "default", choices: ["default", "dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "colCount", default: -1, choices: [-1, 0, 1, 2, 3, 4] }, "isRequired:boolean", "hasOther:boolean", "minWidth", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }], function () { return new MatrixDropdownColumn(""); }); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdownbase", [{ name: "columns:matrixdropdowncolumns", className: "matrixdropdowncolumn" }, + "horizontalScroll:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, + { name: "cellType", default: "dropdown", choices: ["dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "columnColCount", default: 0, choices: [0, 1, 2, 3, 4] }, "columnMinWidth"], function () { return new QuestionMatrixDropdownModelBase(""); }, "question"); + + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionBase; }); + + + + +var QuestionBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionBase, _super); + function QuestionBase(name) { + var _this = _super.call(this) || this; + _this.name = name; + _this.conditionRunner = null; + _this.visibleIf = ""; + _this.visibleValue = true; + _this.startWithNewLineValue = true; + _this.visibleIndexValue = -1; + _this.width = ""; + _this.renderWidthValue = ""; + _this.rightIndentValue = 0; + _this.indent = 0; + _this.idValue = QuestionBase.getQuestionId(); + _this.onCreating(); + return _this; + } + QuestionBase.getQuestionId = function () { + return "sq_" + QuestionBase.questionCounter++; + }; + Object.defineProperty(QuestionBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.fireCallback(this.visibilityChangedCallback); + this.fireCallback(this.rowVisibilityChangedCallback); + if (this.survey) { + this.survey.questionVisibilityChanged(this, this.visible); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isVisible", { + get: function () { return this.visible || (this.survey && this.survey.isDesignMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isReadOnly", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visibleIndex", { + get: function () { return this.visibleIndexValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + return false; + }; + Object.defineProperty(QuestionBase.prototype, "currentErrorCount", { + get: function () { return 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasTitle", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasInput", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasComment", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + }; + QuestionBase.prototype.setData = function (newValue) { + this.data = newValue; + if (newValue && newValue["questionAdded"]) { + this.surveyValue = newValue; + } + this.onSetData(); + }; + Object.defineProperty(QuestionBase.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.fireCallback = function (callback) { + if (callback) + callback(); + }; + QuestionBase.prototype.onSetData = function () { }; + QuestionBase.prototype.onCreating = function () { }; + QuestionBase.prototype.runCondition = function (values) { + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + //IQuestion + QuestionBase.prototype.onSurveyValueChanged = function (newValue) { + }; + QuestionBase.prototype.onSurveyLoad = function () { + }; + QuestionBase.prototype.setVisibleIndex = function (value) { + if (this.visibleIndexValue == value) + return; + this.visibleIndexValue = value; + this.fireCallback(this.visibleIndexChangedCallback); + }; + QuestionBase.prototype.supportGoNextPageAutomatic = function () { return false; }; + QuestionBase.prototype.clearUnusedValues = function () { }; + QuestionBase.prototype.onLocaleChanged = function () { }; + //ILocalizableOwner + QuestionBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + return QuestionBase; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +QuestionBase.questionCounter = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("questionbase", ["!name", { name: "visible:boolean", default: true }, "visibleIf:expression", + { name: "width" }, { name: "startWithNewLine:boolean", default: true }, { name: "indent:number", default: 0, choices: [0, 1, 2, 3] }]); + + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactpage__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactSurveyNavigation__ = __webpack_require__(33); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__reactquestionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__reactSurveyProgress__ = __webpack_require__(34); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Survey; }); + + + + + + + + + +var Survey = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Survey, _super); + function Survey(props) { + var _this = _super.call(this, props) || this; + _this.isCurrentPageChanged = false; + _this.updateSurvey(props); + return _this; + } + Object.defineProperty(Survey, "cssType", { + get: function () { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["a" /* surveyCss */].currentType; }, + set: function (value) { __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["a" /* surveyCss */].currentType = value; }, + enumerable: true, + configurable: true + }); + Survey.prototype.componentWillReceiveProps = function (nextProps) { + this.updateSurvey(nextProps); + }; + Survey.prototype.componentDidUpdate = function () { + if (this.isCurrentPageChanged) { + this.isCurrentPageChanged = false; + if (this.survey.focusFirstQuestionAutomatic) { + this.survey.focusFirstQuestion(); + } + } + }; + Survey.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.doAfterRenderSurvey(el); + }; + Survey.prototype.render = function () { + if (this.survey.state == "completed") + return this.renderCompleted(); + if (this.survey.state == "loading") + return this.renderLoading(); + return this.renderSurvey(); + }; + Object.defineProperty(Survey.prototype, "css", { + get: function () { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["a" /* surveyCss */].getCss(); }, + set: function (value) { + this.survey.mergeCss(value, this.css); + }, + enumerable: true, + configurable: true + }); + Survey.prototype.renderCompleted = function () { + if (!this.survey.showCompletedPage) + return null; + var htmlValue = { __html: this.survey.processedCompletedHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + Survey.prototype.renderLoading = function () { + var htmlValue = { __html: this.survey.processedLoadingHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + Survey.prototype.renderSurvey = function () { + var title = this.survey.title && this.survey.showTitle ? this.renderTitle() : null; + var currentPage = this.survey.currentPage ? this.renderPage() : null; + var topProgress = this.survey.showProgressBar == "top" ? this.renderProgress(true) : null; + var bottomProgress = this.survey.showProgressBar == "bottom" ? this.renderProgress(false) : null; + var buttons = (currentPage && this.survey.showNavigationButtons) ? this.renderNavigation() : null; + if (!currentPage) { + currentPage = this.renderEmptySurvey(); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root", className: this.css.root }, + title, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: __WEBPACK_IMPORTED_MODULE_8__base__["a" /* SurveyPageId */], className: this.css.body }, + topProgress, + currentPage, + bottomProgress), + buttons)); + }; + Survey.prototype.renderTitle = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.header }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h3", null, this.survey.processedTitle)); + }; + Survey.prototype.renderPage = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactpage__["a" /* SurveyPage */], { survey: this.survey, page: this.survey.currentPage, css: this.css, creator: this }); + }; + Survey.prototype.renderProgress = function (isTop) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_7__reactSurveyProgress__["a" /* SurveyProgress */], { survey: this.survey, css: this.css, isTop: isTop }); + }; + Survey.prototype.renderNavigation = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_4__reactSurveyNavigation__["a" /* SurveyNavigation */], { survey: this.survey, css: this.css }); + }; + Survey.prototype.renderEmptySurvey = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.survey.emptySurveyText)); + }; + Survey.prototype.updateSurvey = function (newProps) { + if (newProps) { + if (newProps.model) { + this.survey = newProps.model; + } + else { + if (newProps.json) { + this.survey = new __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__["a" /* ReactSurveyModel */](newProps.json); + } + } + } + else { + this.survey = new __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__["a" /* ReactSurveyModel */](); + } + if (newProps) { + if (newProps.clientId) + this.survey.clientId = newProps.clientId; + if (newProps.data) + this.survey.data = newProps.data; + if (newProps.css) + this.survey.mergeCss(newProps.css, this.css); + } + //set the first page + var dummy = this.survey.currentPage; + this.state = { pageIndexChange: 0, isCompleted: false, modelChanged: 0 }; + this.setSurveyEvents(newProps); + }; + Survey.prototype.setSurveyEvents = function (newProps) { + var self = this; + this.survey.renderCallback = function () { + self.state.modelChanged = self.state.modelChanged + 1; + self.setState(self.state); + }; + this.survey.onComplete.add(function (sender) { self.state.isCompleted = true; self.setState(self.state); }); + this.survey.onPartialSend.add(function (sender) { self.setState(self.state); }); + this.survey.onCurrentPageChanged.add(function (sender, options) { + self.isCurrentPageChanged = true; + self.state.pageIndexChange = self.state.pageIndexChange + 1; + self.setState(self.state); + if (newProps && newProps.onCurrentPageChanged) + newProps.onCurrentPageChanged(sender, options); + }); + this.survey.onVisibleChanged.add(function (sender, options) { + if (options.question && options.question.react) { + var state = options.question.react.state; + state.visible = options.question.visible; + options.question.react.setState(state); + } + }); + this.survey.onValueChanged.add(function (sender, options) { + if (options.question && options.question.react) { + var state = options.question.react.state; + state.value = options.value; + options.question.react.setState(state); + } + }); + if (!newProps) + return; + this.survey.onValueChanged.add(function (sender, options) { + if (newProps.data) + newProps.data[options.name] = options.value; + if (newProps.onValueChanged) + newProps.onValueChanged(sender, options); + }); + if (newProps.onComplete) { + this.survey.onComplete.add(function (sender) { newProps.onComplete(sender); }); + } + if (newProps.onPartialSend) { + this.survey.onPartialSend.add(function (sender) { newProps.onPartialSend(sender); }); + } + this.survey.onPageVisibleChanged.add(function (sender, options) { if (newProps.onPageVisibleChanged) + newProps.onPageVisibleChanged(sender, options); }); + if (newProps.onServerValidateQuestions) { + this.survey.onServerValidateQuestions = newProps.onServerValidateQuestions; + } + if (newProps.onQuestionAdded) { + this.survey.onQuestionAdded.add(function (sender, options) { newProps.onQuestionAdded(sender, options); }); + } + if (newProps.onQuestionRemoved) { + this.survey.onQuestionRemoved.add(function (sender, options) { newProps.onQuestionRemoved(sender, options); }); + } + if (newProps.onValidateQuestion) { + this.survey.onValidateQuestion.add(function (sender, options) { newProps.onValidateQuestion(sender, options); }); + } + if (newProps.onSendResult) { + this.survey.onSendResult.add(function (sender, options) { newProps.onSendResult(sender, options); }); + } + if (newProps.onGetResult) { + this.survey.onGetResult.add(function (sender, options) { newProps.onGetResult(sender, options); }); + } + if (newProps.onProcessHtml) { + this.survey.onProcessHtml.add(function (sender, options) { newProps.onProcessHtml(sender, options); }); + } + if (newProps.onAfterRenderSurvey) { + this.survey.onAfterRenderSurvey.add(function (sender, options) { newProps.onAfterRenderSurvey(sender, options); }); + } + if (newProps.onAfterRenderPage) { + this.survey.onAfterRenderPage.add(function (sender, options) { newProps.onAfterRenderPage(sender, options); }); + } + if (newProps.onAfterRenderQuestion) { + this.survey.onAfterRenderQuestion.add(function (sender, options) { newProps.onAfterRenderQuestion(sender, options); }); + } + }; + //ISurveyCreator + Survey.prototype.createQuestionElement = function (question) { + var questionCss = this.css[question.getType()]; + return __WEBPACK_IMPORTED_MODULE_5__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.createQuestion(question.getType(), { + question: question, css: questionCss, rootCss: this.css, isDisplayMode: question.isReadOnly, creator: this + }); + }; + Survey.prototype.renderError = function (key, errorText) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { key: key, className: this.css.error.item }, errorText); + }; + Survey.prototype.questionTitleLocation = function () { return this.survey.questionTitleLocation; }; + return Survey; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNavigationBase; }); + + +var SurveyNavigationBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyNavigationBase, _super); + function SurveyNavigationBase(props) { + var _this = _super.call(this, props) || this; + _this.updateStateFunction = null; + _this.survey = props.survey; + _this.css = props.css; + _this.state = { update: 0 }; + return _this; + } + SurveyNavigationBase.prototype.componentWillReceiveProps = function (nextProps) { + this.survey = nextProps.survey; + this.css = nextProps.css; + }; + SurveyNavigationBase.prototype.componentDidMount = function () { + if (this.survey) { + var self = this; + this.updateStateFunction = function () { + self.state.update = self.state.update + 1; + self.setState(self.state); + }; + this.survey.onPageVisibleChanged.add(this.updateStateFunction); + } + }; + SurveyNavigationBase.prototype.componentWillUnmount = function () { + if (this.survey && this.updateStateFunction) { + this.survey.onPageVisibleChanged.remove(this.updateStateFunction); + this.updateStateFunction = null; + } + }; + return SurveyNavigationBase; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 24 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__survey__ = __webpack_require__(25); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ReactSurveyModel; }); + + +var ReactSurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ReactSurveyModel, _super); + function ReactSurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + return _super.call(this, jsonObj) || this; + } + ReactSurveyModel.prototype.render = function () { + if (this.renderCallback) { + this.renderCallback(); + } + }; + ReactSurveyModel.prototype.mergeCss = function (src, dest) { + this.mergeValues(src, dest); + }; + ReactSurveyModel.prototype.doAfterRenderSurvey = function (el) { + this.afterRenderSurvey(el); + }; + ReactSurveyModel.prototype.onLoadSurveyFromService = function () { + this.render(); + }; + ReactSurveyModel.prototype.onLoadingSurveyFromService = function () { + this.render(); + }; + return ReactSurveyModel; +}(__WEBPACK_IMPORTED_MODULE_1__survey__["a" /* SurveyModel */])); + + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__page__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__ = __webpack_require__(29); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyModel; }); + + + + + + + + + + + +var SurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyModel, _super); + function SurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + var _this = _super.call(this) || this; + _this.surveyId = null; + _this.surveyPostId = null; + _this.clientId = null; + _this.cookieName = null; + _this.sendResultOnPageNext = false; + _this.commentPrefix = "-Comment"; + _this.focusFirstQuestionAutomatic = true; + _this.showNavigationButtons = true; + _this.showTitle = true; + _this.showPageTitles = true; + _this.showCompletedPage = true; + _this.requiredText = "*"; + _this.questionStartIndex = ""; + _this.showProgressBar = "off"; + _this.storeOthersAsComment = true; + _this.goNextPageAutomatic = false; + _this.pages = new Array(); + _this.triggers = new Array(); + _this.clearInvisibleValues = false; + _this.currentPageValue = null; + _this.valuesHash = {}; + _this.variablesHash = {}; + _this.showPageNumbersValue = false; + _this.showQuestionNumbersValue = "on"; + _this.questionTitleLocationValue = "top"; + _this.localeValue = ""; + _this.isCompleted = false; + _this.isLoading = false; + _this.processedTextValues = {}; + _this.isValidatingOnServerValue = false; + _this.modeValue = "edit"; + _this.isDesignModeValue = false; + _this.onComplete = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPartialSend = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onCurrentPageChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onValueChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPageVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onQuestionRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPanelRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onValidateQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onProcessHtml = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onSendResult = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onGetResult = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onUploadFile = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderSurvey = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderPage = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderPanel = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.jsonErrors = null; + _this.isLoadingFromJsonValue = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompletedHtmlValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPagePrevTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPageNextTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompleteTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locQuestionTitleTemplateValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__["a" /* TextPreProcessor */](); + _this.textPreProcessor.onHasValue = function (name) { return self.hasProcessedTextValue(name); }; + _this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + _this.pages.push = function (value) { + value.data = self; + return Array.prototype.push.call(this, value); + }; + _this.triggers.push = function (value) { + value.setOwner(self); + return Array.prototype.push.call(this, value); + }; + _this.updateProcessedTextValues(); + _this.onBeforeCreating(); + if (jsonObj) { + _this.setJsonObject(jsonObj); + if (_this.surveyId) { + _this.loadSurveyFromService(_this.surveyId); + } + } + _this.onCreating(); + return _this; + } + SurveyModel.prototype.getType = function () { return "survey"; }; + Object.defineProperty(SurveyModel.prototype, "locale", { + get: function () { return this.localeValue; }, + set: function (value) { + this.localeValue = value; + __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].currentLocale = value; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onLocaleChanged(); + } + }, + enumerable: true, + configurable: true + }); + //ILocalizableOwner + SurveyModel.prototype.getLocale = function () { return this.locale; }; + SurveyModel.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getString(str); }; + Object.defineProperty(SurveyModel.prototype, "emptySurveyText", { + get: function () { return this.getLocString("emptySurvey"); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completedHtml", { + get: function () { return this.locCompletedHtml.text; }, + set: function (value) { this.locCompletedHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompletedHtml", { + get: function () { return this.locCompletedHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pagePrevText", { + get: function () { return this.locPagePrevText.text ? this.locPagePrevText.text : this.getLocString("pagePrevText"); }, + set: function (newValue) { this.locPagePrevText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPagePrevText", { + get: function () { return this.locPagePrevTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pageNextText", { + get: function () { return this.locPageNextText.text ? this.locPageNextText.text : this.getLocString("pageNextText"); }, + set: function (newValue) { this.locPageNextText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPageNextText", { + get: function () { return this.locPageNextTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completeText", { + get: function () { return this.locCompleteText.text ? this.locCompleteText.text : this.getLocString("completeText"); }, + set: function (newValue) { this.locCompleteText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompleteText", { + get: function () { return this.locCompleteTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplate.text; }, + set: function (value) { this.locQuestionTitleTemplate.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locQuestionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplateValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showPageNumbers", { + get: function () { return this.showPageNumbersValue; }, + set: function (value) { + if (value === this.showPageNumbers) + return; + this.showPageNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showQuestionNumbers", { + get: function () { return this.showQuestionNumbersValue; }, + set: function (value) { + if (value === this.showQuestionNumbers) + return; + this.showQuestionNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "processedTitle", { + get: function () { return this.processText(this.title); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleLocation", { + get: function () { return this.questionTitleLocationValue; }, + set: function (value) { + if (value === this.questionTitleLocationValue) + return; + this.questionTitleLocationValue = value; + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "mode", { + get: function () { return this.modeValue; }, + set: function (value) { + if (value == this.mode) + return; + if (value != "edit" && value != "display") + return; + this.modeValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "data", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + result[key] = this.valuesHash[key]; + } + return result; + }, + set: function (data) { + this.valuesHash = {}; + if (data) { + for (var key in data) { + this._setDataValue(data, key); + this.checkTriggers(key, data[key], false); + if (!this.processedTextValues[key.toLowerCase()]) { + this.processedTextValues[key.toLowerCase()] = "value"; + } + } + } + this.notifyAllQuestionsOnValueChanged(); + this.runConditions(); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype._setDataValue = function (data, key) { + this.valuesHash[key] = data[key]; + }; + Object.defineProperty(SurveyModel.prototype, "comments", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + if (key.indexOf(this.commentPrefix) > 0) { + result[key] = this.valuesHash[key]; + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePages", { + get: function () { + if (this.isDesignMode) + return this.pages; + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].isVisible) { + result.push(this.pages[i]); + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEmpty", { + get: function () { return this.pages.length == 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "PageCount", { + get: function () { + return this.pages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePageCount", { + get: function () { + return this.visiblePages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPage", { + get: function () { + var vPages = this.visiblePages; + if (this.currentPageValue != null) { + if (vPages.indexOf(this.currentPageValue) < 0) { + this.currentPage = null; + } + } + if (this.currentPageValue == null && vPages.length > 0) { + this.currentPage = vPages[0]; + } + return this.currentPageValue; + }, + set: function (value) { + var vPages = this.visiblePages; + if (value != null && vPages.indexOf(value) < 0) + return; + if (value == this.currentPageValue) + return; + var oldValue = this.currentPageValue; + this.currentPageValue = value; + this.updateCustomWidgets(value); + this.currentPageChanged(value, oldValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPageNo", { + get: function () { + return this.visiblePages.indexOf(this.currentPage); + }, + set: function (value) { + var vPages = this.visiblePages; + if (value < 0 || value >= this.visiblePages.length) + return; + this.currentPage = this.visiblePages[value]; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.focusFirstQuestion = function () { + if (this.currentPageValue) { + this.currentPageValue.scrollToTop(); + this.currentPageValue.focusFirstQuestion(); + } + }; + Object.defineProperty(SurveyModel.prototype, "state", { + get: function () { + if (this.isLoading) + return "loading"; + if (this.isCompleted) + return "completed"; + return (this.currentPage) ? "running" : "empty"; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.clear = function (clearData, gotoFirstPage) { + if (clearData === void 0) { clearData = true; } + if (gotoFirstPage === void 0) { gotoFirstPage = true; } + if (clearData) { + this.data = null; + this.variablesHash = {}; + } + this.isCompleted = false; + if (gotoFirstPage && this.visiblePageCount > 0) { + this.currentPage = this.visiblePages[0]; + } + }; + SurveyModel.prototype.mergeValues = function (src, dest) { + if (!dest || !src) + return; + for (var key in src) { + var value = src[key]; + if (value && typeof value === 'object') { + if (!dest[key]) + dest[key] = {}; + this.mergeValues(value, dest[key]); + } + else { + dest[key] = value; + } + } + }; + SurveyModel.prototype.updateCustomWidgets = function (page) { + if (!page) + return; + for (var i = 0; i < page.questions.length; i++) { + page.questions[i].customWidget = __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__["a" /* CustomWidgetCollection */].Instance.getCustomWidget(page.questions[i]); + } + }; + SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) { + this.onCurrentPageChanged.fire(this, { 'oldCurrentPage': oldValue, 'newCurrentPage': newValue }); + }; + SurveyModel.prototype.getProgress = function () { + if (this.currentPage == null) + return 0; + var index = this.visiblePages.indexOf(this.currentPage) + 1; + return Math.ceil((index * 100 / this.visiblePageCount)); + }; + Object.defineProperty(SurveyModel.prototype, "isNavigationButtonsShowing", { + get: function () { + if (this.isDesignMode) + return false; + var page = this.currentPage; + if (!page) + return false; + return page.navigationButtonsVisibility == "show" || + (page.navigationButtonsVisibility != "hide" && this.showNavigationButtons); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEditMode", { + get: function () { return this.mode == "edit"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDisplayMode", { + get: function () { return this.mode == "display"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDesignMode", { + get: function () { return this.isDesignModeValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setDesignMode = function (value) { + this.isDesignModeValue = value; + }; + Object.defineProperty(SurveyModel.prototype, "hasCookie", { + get: function () { + if (!this.cookieName) + return false; + var cookies = document.cookie; + return cookies && cookies.indexOf(this.cookieName + "=true") > -1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=true; expires=Fri, 31 Dec 9999 0:0:0 GMT"; + }; + SurveyModel.prototype.deleteCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=;"; + }; + SurveyModel.prototype.nextPage = function () { + if (this.isLastPage) + return false; + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doNextPage(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isCurrentPageHasErrors", { + get: function () { + if (this.currentPage == null) + return true; + return this.currentPage.hasErrors(true, true); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.prevPage = function () { + if (this.isFirstPage) + return false; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index - 1]; + }; + SurveyModel.prototype.completeLastPage = function () { + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doComplete(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isFirstPage", { + get: function () { + if (this.currentPage == null) + return true; + return this.visiblePages.indexOf(this.currentPage) == 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isLastPage", { + get: function () { + if (this.currentPage == null) + return true; + var vPages = this.visiblePages; + return vPages.indexOf(this.currentPage) == vPages.length - 1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.doComplete = function () { + this.clearUnusedValues(); + this.setCookie(); + this.setCompleted(); + this.onComplete.fire(this, null); + if (this.surveyPostId) { + this.sendResult(); + } + }; + Object.defineProperty(SurveyModel.prototype, "isValidatingOnServer", { + get: function () { return this.isValidatingOnServerValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setIsValidatingOnServer = function (val) { + if (val == this.isValidatingOnServer) + return; + this.isValidatingOnServerValue = val; + this.onIsValidatingOnServerChanged(); + }; + SurveyModel.prototype.onIsValidatingOnServerChanged = function () { }; + SurveyModel.prototype.doServerValidation = function () { + if (!this.onServerValidateQuestions) + return false; + var self = this; + var options = { data: {}, errors: {}, survey: this, complete: function () { self.completeServerValidation(options); } }; + for (var i = 0; i < this.currentPage.questions.length; i++) { + var question = this.currentPage.questions[i]; + if (!question.visible) + continue; + var value = this.getValue(question.name); + if (value) + options.data[question.name] = value; + } + this.setIsValidatingOnServer(true); + this.onServerValidateQuestions(this, options); + return true; + }; + SurveyModel.prototype.completeServerValidation = function (options) { + this.setIsValidatingOnServer(false); + if (!options && !options.survey) + return; + var self = options.survey; + var hasErrors = false; + if (options.errors) { + for (var name in options.errors) { + var question = self.getQuestionByName(name); + if (question && question["errors"]) { + hasErrors = true; + question["addError"](new __WEBPACK_IMPORTED_MODULE_8__error__["a" /* CustomError */](options.errors[name])); + } + } + } + if (!hasErrors) { + if (self.isLastPage) + self.doComplete(); + else + self.doNextPage(); + } + }; + SurveyModel.prototype.doNextPage = function () { + this.checkOnPageTriggers(); + if (this.sendResultOnPageNext) { + this.sendResult(this.surveyPostId, this.clientId, true); + } + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index + 1]; + }; + SurveyModel.prototype.setCompleted = function () { + this.isCompleted = true; + }; + Object.defineProperty(SurveyModel.prototype, "processedCompletedHtml", { + get: function () { + if (this.completedHtml) { + return this.processHtml(this.completedHtml); + } + return "

" + this.getLocString("completingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "processedLoadingHtml", { + get: function () { + return "

" + this.getLocString("loadingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "progressText", { + get: function () { + if (this.currentPage == null) + return ""; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage) + 1; + return this.getLocString("progressText")["format"](index, vPages.length); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.afterRenderSurvey = function (htmlElement) { + this.onAfterRenderSurvey.fire(this, { survey: this, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPage = function (htmlElement) { + if (this.onAfterRenderPage.isEmpty) + return; + this.onAfterRenderPage.fire(this, { page: this.currentPage, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) { + this.onAfterRenderQuestion.fire(this, { question: question, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) { + this.onAfterRenderPanel.fire(this, { panel: panel, htmlElement: htmlElement }); + }; + SurveyModel.prototype.uploadFile = function (name, file, storeDataAsText, uploadingCallback) { + var accept = true; + this.onUploadFile.fire(this, { name: name, file: file, accept: accept }); + if (!accept) + return false; + if (!storeDataAsText && this.surveyPostId) { + this.uploadFileCore(name, file, uploadingCallback); + } + return true; + }; + SurveyModel.prototype.uploadFileCore = function (name, file, uploadingCallback) { + var self = this; + if (uploadingCallback) + uploadingCallback("uploading"); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendFile(this.surveyPostId, file, function (success, response) { + if (uploadingCallback) + uploadingCallback(success ? "success" : "error"); + if (success) { + self.setValue(name, response); + } + }); + }; + SurveyModel.prototype.getPage = function (index) { + return this.pages[index]; + }; + SurveyModel.prototype.addPage = function (page) { + if (page == null) + return; + this.pages.push(page); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.addNewPage = function (name) { + var page = this.createNewPage(name); + this.addPage(page); + return page; + }; + SurveyModel.prototype.removePage = function (page) { + var index = this.pages.indexOf(page); + if (index < 0) + return; + this.pages.splice(index, 1); + if (this.currentPageValue == page) { + this.currentPage = this.pages.length > 0 ? this.pages[0] : null; + } + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var questions = this.getAllQuestions(); + if (caseInsensitive) + name = name.toLowerCase(); + for (var i = 0; i < questions.length; i++) { + var questionName = questions[i].name; + if (caseInsensitive) + questionName = questionName.toLowerCase(); + if (questionName == name) + return questions[i]; + } + return null; + }; + SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var question = this.getQuestionByName(names[i], caseInsensitive); + if (question) + result.push(question); + } + return result; + }; + SurveyModel.prototype.getPageByElement = function (element) { + for (var i = 0; i < this.pages.length; i++) { + var page = this.pages[i]; + if (page.containsElement(element)) + return page; + } + return null; + }; + SurveyModel.prototype.getPageByQuestion = function (question) { + return this.getPageByElement(question); + }; + SurveyModel.prototype.getPageByName = function (name) { + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].name == name) + return this.pages[i]; + } + return null; + }; + SurveyModel.prototype.getPagesByNames = function (names) { + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var page = this.getPageByName(names[i]); + if (page) + result.push(page); + } + return result; + }; + SurveyModel.prototype.getAllQuestions = function (visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].addQuestionsToList(result, visibleOnly); + } + return result; + }; + SurveyModel.prototype.createNewPage = function (name) { return new __WEBPACK_IMPORTED_MODULE_3__page__["a" /* PageModel */](name); }; + SurveyModel.prototype.notifyQuestionOnValueChanged = function (name, newValue) { + var questions = this.getAllQuestions(); + var question = null; + for (var i = 0; i < questions.length; i++) { + if (questions[i].name != name) + continue; + question = questions[i]; + this.doSurveyValueChanged(question, newValue); + } + this.onValueChanged.fire(this, { 'name': name, 'question': question, 'value': newValue }); + }; + SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.doSurveyValueChanged(questions[i], this.getValue(questions[i].name)); + } + }; + SurveyModel.prototype.doSurveyValueChanged = function (question, newValue) { + question.onSurveyValueChanged(newValue); + }; + SurveyModel.prototype.checkOnPageTriggers = function () { + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + var question = questions[i]; + var value = this.getValue(question.name); + this.checkTriggers(question.name, value, true); + } + }; + SurveyModel.prototype.getCurrentPageQuestions = function () { + var result = []; + var page = this.currentPage; + if (!page) + return result; + for (var i = 0; i < page.questions.length; i++) { + var question = page.questions[i]; + if (!question.visible || !question.name) + continue; + result.push(question); + } + return result; + }; + SurveyModel.prototype.checkTriggers = function (name, newValue, isOnNextPage) { + for (var i = 0; i < this.triggers.length; i++) { + var trigger = this.triggers[i]; + if (trigger.name == name && trigger.isOnNextPage == isOnNextPage) { + trigger.check(newValue); + } + } + }; + SurveyModel.prototype.doElementsOnLoad = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onSurveyLoad(); + } + }; + SurveyModel.prototype.runConditions = function () { + var pages = this.pages; + for (var i = 0; i < pages.length; i++) { + pages[i].runCondition(this.valuesHash); + } + }; + SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) { + if (postId === void 0) { postId = null; } + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + if (!this.isEditMode) + return; + if (isPartialCompleted && this.onPartialSend) { + this.onPartialSend.fire(this, null); + } + if (!postId && this.surveyPostId) { + postId = this.surveyPostId; + } + if (!postId) + return; + if (clientId) { + this.clientId = clientId; + } + if (isPartialCompleted && !this.clientId) + return; + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendResult(postId, this.data, function (success, response) { + self.onSendResult.fire(self, { success: success, response: response }); + }, this.clientId, isPartialCompleted); + }; + SurveyModel.prototype.getResult = function (resultId, name) { + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().getResult(resultId, name, function (success, data, dataList, response) { + self.onGetResult.fire(self, { success: success, data: data, dataList: dataList, response: response }); + }); + }; + SurveyModel.prototype.loadSurveyFromService = function (surveyId) { + if (surveyId === void 0) { surveyId = null; } + if (surveyId) { + this.surveyId = surveyId; + } + var self = this; + this.isLoading = true; + this.onLoadingSurveyFromService(); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().loadSurvey(this.surveyId, function (success, result, response) { + self.isLoading = false; + if (success && result) { + self.setJsonObject(result); + self.notifyAllQuestionsOnValueChanged(); + self.onLoadSurveyFromService(); + } + }); + }; + SurveyModel.prototype.onLoadingSurveyFromService = function () { + }; + SurveyModel.prototype.onLoadSurveyFromService = function () { + }; + SurveyModel.prototype.checkPageVisibility = function (question, oldQuestionVisible) { + var page = this.getPageByQuestion(question); + if (!page) + return; + var newValue = page.isVisible; + if (newValue != page.getIsPageVisible(question) || oldQuestionVisible) { + this.pageVisibilityChanged(page, newValue); + } + }; + SurveyModel.prototype.updateVisibleIndexes = function () { + this.updatePageVisibleIndexes(this.showPageNumbers); + if (this.showQuestionNumbers == "onPage") { + var visPages = this.visiblePages; + for (var i = 0; i < visPages.length; i++) { + this.updateQuestionVisibleIndexes(visPages[i].questions, true); + } + } + else { + this.updateQuestionVisibleIndexes(this.getAllQuestions(false), this.showQuestionNumbers == "on"); + } + }; + SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) { + var index = 0; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].visibleIndex = this.pages[i].visible ? (index++) : -1; + this.pages[i].num = showIndex && this.pages[i].visible ? this.pages[i].visibleIndex + 1 : -1; + } + }; + SurveyModel.prototype.updateQuestionVisibleIndexes = function (questions, showIndex) { + var index = 0; + for (var i = 0; i < questions.length; i++) { + questions[i].setVisibleIndex(showIndex && questions[i].visible && questions[i].hasTitle ? (index++) : -1); + } + }; + Object.defineProperty(SurveyModel.prototype, "isLoadingFromJson", { + get: function () { return this.isLoadingFromJsonValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setJsonObject = function (jsonObj) { + if (!jsonObj) + return; + this.jsonErrors = null; + this.isLoadingFromJsonValue = true; + var jsonConverter = new __WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */](); + jsonConverter.toObject(jsonObj, this); + if (jsonConverter.errors.length > 0) { + this.jsonErrors = jsonConverter.errors; + } + this.isLoadingFromJsonValue = false; + this.updateProcessedTextValues(); + if (this.hasCookie) { + this.doComplete(); + } + this.doElementsOnLoad(); + this.runConditions(); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.onBeforeCreating = function () { }; + SurveyModel.prototype.onCreating = function () { }; + SurveyModel.prototype.updateProcessedTextValues = function () { + this.processedTextValues = {}; + var self = this; + this.processedTextValues["pageno"] = function (name) { return self.currentPage != null ? self.visiblePages.indexOf(self.currentPage) + 1 : 0; }; + this.processedTextValues["pagecount"] = function (name) { return self.visiblePageCount; }; + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.addQuestionToProcessedTextValues(questions[i]); + } + }; + SurveyModel.prototype.addQuestionToProcessedTextValues = function (question) { + this.processedTextValues[question.name.toLowerCase()] = "question"; + }; + SurveyModel.prototype.hasProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + return this.processedTextValues[firstName.toLowerCase()]; + }; + SurveyModel.prototype.getProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + var val = this.processedTextValues[firstName.toLowerCase()]; + if (!val) + return null; + if (val == "variable") { + return this.getVariable(name.toLowerCase()); + } + if (val == "question") { + var question = this.getQuestionByName(firstName, true); + if (!question) + return null; + name = question.name + name.substr(firstName.length); + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + if (val == "value") { + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + return val(name); + }; + SurveyModel.prototype.clearUnusedValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + questions[i].clearUnusedValues(); + } + if (this.clearInvisibleValues) { + this.clearInvisibleQuestionValues(); + } + }; + SurveyModel.prototype.clearInvisibleQuestionValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].visible) + continue; + this.clearValue(questions[i].name); + } + }; + SurveyModel.prototype.getVariable = function (name) { + if (!name) + return null; + return this.variablesHash[name]; + }; + SurveyModel.prototype.setVariable = function (name, newValue) { + if (!name) + return; + this.variablesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "variable"; + }; + //ISurvey data + SurveyModel.prototype.getUnbindValue = function (value) { + if (value && value instanceof Object) { + //do not return the same object instance!!! + return JSON.parse(JSON.stringify(value)); + } + return value; + }; + SurveyModel.prototype.getValue = function (name) { + if (!name || name.length == 0) + return null; + var value = this.valuesHash[name]; + return this.getUnbindValue(value); + }; + SurveyModel.prototype.setValue = function (name, newValue) { + if (this.isValueEqual(name, newValue)) + return; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + newValue = this.getUnbindValue(newValue); + this.valuesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "value"; + } + this.notifyQuestionOnValueChanged(name, newValue); + this.checkTriggers(name, newValue, false); + this.runConditions(); + this.tryGoNextPageAutomatic(name); + }; + SurveyModel.prototype.isValueEqual = function (name, newValue) { + if (newValue == "") + newValue = null; + var oldValue = this.getValue(name); + if (newValue === null || oldValue === null) + return newValue === oldValue; + return this.isTwoValueEquals(newValue, oldValue); + }; + SurveyModel.prototype.tryGoNextPageAutomatic = function (name) { + if (!this.goNextPageAutomatic || !this.currentPage) + return; + var question = this.getQuestionByName(name); + if (question && (!question.visible || !question.supportGoNextPageAutomatic())) + return; + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].hasInput && !this.getValue(questions[i].name)) + return; + } + if (!this.currentPage.hasErrors(true, false)) { + if (!this.isLastPage) { + this.nextPage(); + } + else { + this.doComplete(); + } + } + }; + SurveyModel.prototype.getComment = function (name) { + var result = this.data[name + this.commentPrefix]; + if (result == null) + result = ""; + return result; + }; + SurveyModel.prototype.setComment = function (name, newValue) { + name = name + this.commentPrefix; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + this.valuesHash[name] = newValue; + this.tryGoNextPageAutomatic(name); + } + }; + SurveyModel.prototype.clearValue = function (name) { + this.setValue(name, null); + this.setComment(name, null); + }; + SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) { + this.updateVisibleIndexes(); + this.onVisibleChanged.fire(this, { 'question': question, 'name': question.name, 'visible': newValue }); + this.checkPageVisibility(question, !newValue); + }; + SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) { + this.updateVisibleIndexes(); + this.onPageVisibleChanged.fire(this, { 'page': page, 'visible': newValue }); + }; + SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.addQuestionToProcessedTextValues(question); + this.onQuestionAdded.fire(this, { 'question': question, 'name': question.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.questionRemoved = function (question) { + this.updateVisibleIndexes(); + this.onQuestionRemoved.fire(this, { 'question': question, 'name': question.name }); + }; + SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.onPanelAdded.fire(this, { 'panel': panel, 'name': panel.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.panelRemoved = function (panel) { + this.updateVisibleIndexes(); + this.onPanelRemoved.fire(this, { 'panel': panel, 'name': panel.name }); + }; + SurveyModel.prototype.validateQuestion = function (name) { + if (this.onValidateQuestion.isEmpty) + return null; + var options = { name: name, value: this.getValue(name), error: null }; + this.onValidateQuestion.fire(this, options); + return options.error ? new __WEBPACK_IMPORTED_MODULE_8__error__["a" /* CustomError */](options.error) : null; + }; + SurveyModel.prototype.processHtml = function (html) { + var options = { html: html }; + this.onProcessHtml.fire(this, options); + return this.processText(options.html); + }; + SurveyModel.prototype.processText = function (text) { + return this.textPreProcessor.process(text); + }; + //ISurveyTriggerOwner + SurveyModel.prototype.getObjects = function (pages, questions) { + var result = []; + Array.prototype.push.apply(result, this.getPagesByNames(pages)); + Array.prototype.push.apply(result, this.getQuestionsByNames(questions)); + return result; + }; + SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) { + if (!name) + return; + if (isVariable) { + this.setVariable(name, value); + } + else { + this.setValue(name, value); + } + }; + return SurveyModel; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* Base */])); + +//Make localizable: completedHtml, pagePrevText, pageNextText, completeText +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("survey", [{ name: "locale", choices: function () { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getLocales(); } }, + { name: "title", serializationProperty: "locTitle" }, { name: "focusFirstQuestionAutomatic:boolean", default: true }, + { name: "completedHtml:html", serializationProperty: "locCompletedHtml" }, { name: "pages", className: "page", visible: false }, + { name: "questions", baseClassName: "question", visible: false, onGetValue: function (obj) { return null; }, onSetValue: function (obj, value, jsonConverter) { var page = obj.addNewPage(""); jsonConverter.toObject({ questions: value }, page); } }, + { name: "triggers:triggers", baseClassName: "surveytrigger", classNamePart: "trigger" }, + "surveyId", "surveyPostId", "cookieName", "sendResultOnPageNext:boolean", + { name: "showNavigationButtons:boolean", default: true }, { name: "showTitle:boolean", default: true }, + { name: "showPageTitles:boolean", default: true }, { name: "showCompletedPage:boolean", default: true }, + "showPageNumbers:boolean", { name: "showQuestionNumbers", default: "on", choices: ["on", "onPage", "off"] }, + { name: "questionTitleLocation", default: "top", choices: ["top", "bottom"] }, + { name: "showProgressBar", default: "off", choices: ["off", "top", "bottom"] }, + { name: "mode", default: "edit", choices: ["edit", "display"] }, + { name: "storeOthersAsComment:boolean", default: true }, "goNextPageAutomatic:boolean", "clearInvisibleValues:boolean", + { name: "pagePrevText", serializationProperty: "locPagePrevText" }, + { name: "pageNextText", serializationProperty: "locPageNextText" }, + { name: "completeText", serializationProperty: "locCompleteText" }, + { name: "requiredText", default: "*" }, "questionStartIndex", { name: "questionTitleTemplate", serializationProperty: "locQuestionTitleTemplate" }]); + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TextPreProcessorItem */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TextPreProcessor; }); +var TextPreProcessorItem = (function () { + function TextPreProcessorItem() { + } + return TextPreProcessorItem; +}()); + +var TextPreProcessor = (function () { + function TextPreProcessor() { + } + TextPreProcessor.prototype.process = function (text) { + if (!text) + return text; + if (!this.onProcess) + return text; + var items = this.getItems(text); + for (var i = items.length - 1; i >= 0; i--) { + var item = items[i]; + var name = this.getName(text.substring(item.start + 1, item.end)); + if (!this.canProcessName(name)) + continue; + if (this.onHasValue && !this.onHasValue(name)) + continue; + var value = this.onProcess(name); + if (value == null) + value = ""; + text = text.substr(0, item.start) + value + text.substr(item.end + 1); + } + return text; + }; + TextPreProcessor.prototype.getItems = function (text) { + var items = []; + var length = text.length; + var start = -1; + var ch = ''; + for (var i = 0; i < length; i++) { + ch = text[i]; + if (ch == '{') + start = i; + if (ch == '}') { + if (start > -1) { + var item = new TextPreProcessorItem(); + item.start = start; + item.end = i; + items.push(item); + } + start = -1; + } + } + return items; + }; + TextPreProcessor.prototype.getName = function (name) { + if (!name) + return; + return name.trim(); + }; + TextPreProcessor.prototype.canProcessName = function (name) { + if (!name) + return false; + for (var i = 0; i < name.length; i++) { + var ch = name[i]; + //TODO + if (ch == ' ' || ch == '-' || ch == '&') + return false; + } + return true; + }; + return TextPreProcessor; +}()); + + + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return ValidatorResult; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return SurveyValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ValidatorRunner; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return NumericValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return TextValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AnswerCountValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return RegexValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return EmailValidator; }); + + + + + +var ValidatorResult = (function () { + function ValidatorResult(value, error) { + if (error === void 0) { error = null; } + this.value = value; + this.error = error; + } + return ValidatorResult; +}()); + +var SurveyValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyValidator, _super); + function SurveyValidator() { + var _this = _super.call(this) || this; + _this.text = ""; + return _this; + } + SurveyValidator.prototype.getErrorText = function (name) { + if (this.text) + return this.text; + return this.getDefaultErrorText(name); + }; + SurveyValidator.prototype.getDefaultErrorText = function (name) { + return ""; + }; + SurveyValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + return null; + }; + return SurveyValidator; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +var ValidatorRunner = (function () { + function ValidatorRunner() { + } + ValidatorRunner.prototype.run = function (owner) { + for (var i = 0; i < owner.validators.length; i++) { + var validatorResult = owner.validators[i].validate(owner.value, owner.getValidatorTitle()); + if (validatorResult != null) { + if (validatorResult.error) + return validatorResult.error; + if (validatorResult.value) { + owner.value = validatorResult.value; + } + } + } + return null; + }; + return ValidatorRunner; +}()); + +var NumericValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](NumericValidator, _super); + function NumericValidator(minValue, maxValue) { + if (minValue === void 0) { minValue = null; } + if (maxValue === void 0) { maxValue = null; } + var _this = _super.call(this) || this; + _this.minValue = minValue; + _this.maxValue = maxValue; + return _this; + } + NumericValidator.prototype.getType = function () { return "numericvalidator"; }; + NumericValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value || !this.isNumber(value)) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* RequreNumericError */]()); + } + var result = new ValidatorResult(parseFloat(value)); + if (this.minValue && this.minValue > result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name)); + return result; + } + if (this.maxValue && this.maxValue < result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name)); + return result; + } + return (typeof value === 'number') ? null : result; + }; + NumericValidator.prototype.getDefaultErrorText = function (name) { + var vName = name ? name : "value"; + if (this.minValue && this.maxValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMinMax")["format"](vName, this.minValue, this.maxValue); + } + else { + if (this.minValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMin")["format"](vName, this.minValue); + } + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMax")["format"](vName, this.maxValue); + } + }; + NumericValidator.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return NumericValidator; +}(SurveyValidator)); + +var TextValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](TextValidator, _super); + function TextValidator(minLength, maxLength) { + if (minLength === void 0) { minLength = 0; } + if (maxLength === void 0) { maxLength = 0; } + var _this = _super.call(this) || this; + _this.minLength = minLength; + _this.maxLength = maxLength; + return _this; + } + TextValidator.prototype.getType = function () { return "textvalidator"; }; + TextValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (this.minLength > 0 && value.length < this.minLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + } + if (this.maxLength > 0 && value.length > this.maxLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + } + return null; + }; + TextValidator.prototype.getDefaultErrorText = function (name) { + if (this.minLength > 0 && this.maxLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinMaxLength")["format"](this.minLength, this.maxLength); + if (this.minLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinLength")["format"](this.minLength); + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMaxLength")["format"](this.maxLength); + }; + return TextValidator; +}(SurveyValidator)); + +var AnswerCountValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerCountValidator, _super); + function AnswerCountValidator(minCount, maxCount) { + if (minCount === void 0) { minCount = null; } + if (maxCount === void 0) { maxCount = null; } + var _this = _super.call(this) || this; + _this.minCount = minCount; + _this.maxCount = maxCount; + return _this; + } + AnswerCountValidator.prototype.getType = function () { return "answercountvalidator"; }; + AnswerCountValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (value == null || value.constructor != Array) + return null; + var count = value.length; + if (this.minCount && count < this.minCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("minSelectError")["format"](this.minCount)))); + } + if (this.maxCount && count > this.maxCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("maxSelectError")["format"](this.maxCount)))); + } + return null; + }; + AnswerCountValidator.prototype.getDefaultErrorText = function (name) { + return name; + }; + return AnswerCountValidator; +}(SurveyValidator)); + +var RegexValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RegexValidator, _super); + function RegexValidator(regex) { + if (regex === void 0) { regex = null; } + var _this = _super.call(this) || this; + _this.regex = regex; + return _this; + } + RegexValidator.prototype.getType = function () { return "regexvalidator"; }; + RegexValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!this.regex || !value) + return null; + var re = new RegExp(this.regex); + if (re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + }; + return RegexValidator; +}(SurveyValidator)); + +var EmailValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](EmailValidator, _super); + function EmailValidator() { + var _this = _super.call(this) || this; + _this.re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; + return _this; + } + EmailValidator.prototype.getType = function () { return "emailvalidator"; }; + EmailValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value) + return null; + if (this.re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + }; + EmailValidator.prototype.getDefaultErrorText = function (name) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("invalidEmail"); + }; + return EmailValidator; +}(SurveyValidator)); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("surveyvalidator", ["text"]); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("numericvalidator", ["minValue:number", "maxValue:number"], function () { return new NumericValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("textvalidator", ["minLength:number", "maxLength:number"], function () { return new TextValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("answercountvalidator", ["minCount:number", "maxCount:number"], function () { return new AnswerCountValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("regexvalidator", ["regex"], function () { return new RegexValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("emailvalidator", [], function () { return new EmailValidator(); }, "surveyvalidator"); + + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditions__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionsParser; }); + +var ConditionsParser = (function () { + function ConditionsParser() { + } + ConditionsParser.prototype.parse = function (text, root) { + this.text = text; + this.root = root; + this.root.clear(); + this.at = 0; + this.length = this.text.length; + var res = this.parseText(); + return res; + }; + ConditionsParser.prototype.toString = function (root) { + this.root = root; + return this.nodeToString(root); + }; + ConditionsParser.prototype.toStringCore = function (value) { + if (!value) + return ""; + if (value["children"]) + return this.nodeToString(value); + if (value["left"]) + return this.conditionToString(value); + return ""; + }; + ConditionsParser.prototype.nodeToString = function (node) { + if (node.isEmpty) + return ""; + var res = ""; + for (var i = 0; i < node.children.length; i++) { + var nodeText = this.toStringCore(node.children[i]); + if (nodeText) { + if (res) + res += ' ' + node.connective + ' '; + res += nodeText; + } + } + if (node != this.root && node.children.length > 1) { + res = '(' + res + ')'; + } + return res; + }; + ConditionsParser.prototype.conditionToString = function (condition) { + if (!condition.right || !condition.operator) + return ""; + var left = condition.left; + if (left && !this.isNumeric(left)) + left = "'" + left + "'"; + var res = left + ' ' + this.operationToString(condition.operator); + if (this.isNoRightOperation(condition.operator)) + return res; + var right = condition.right; + if (right && !this.isNumeric(right)) + right = "'" + right + "'"; + return res + ' ' + right; + }; + ConditionsParser.prototype.operationToString = function (op) { + if (op == "equal") + return "="; + if (op == "notequal") + return "!="; + if (op == "greater") + return ">"; + if (op == "less") + return "<"; + if (op == "greaterorequal") + return ">="; + if (op == "lessorequal") + return "<="; + return op; + }; + ConditionsParser.prototype.isNumeric = function (value) { + var val = parseFloat(value); + if (isNaN(val)) + return false; + return isFinite(val); + }; + ConditionsParser.prototype.parseText = function () { + this.node = this.root; + this.expressionNodes = []; + this.expressionNodes.push(this.node); + var res = this.readConditions(); + return res && this.at >= this.length; + }; + ConditionsParser.prototype.readConditions = function () { + var res = this.readCondition(); + if (!res) + return res; + var connective = this.readConnective(); + if (connective) { + this.addConnective(connective); + return this.readConditions(); + } + return true; + }; + ConditionsParser.prototype.readCondition = function () { + var expRes = this.readExpression(); + if (expRes < 0) + return false; + if (expRes == 1) + return true; + var left = this.readString(); + if (!left) + return false; + var op = this.readOperator(); + if (!op) + return false; + var c = new __WEBPACK_IMPORTED_MODULE_0__conditions__["b" /* Condition */](); + c.left = left; + c.operator = op; + if (!this.isNoRightOperation(op)) { + var right = this.readString(); + if (!right) + return false; + c.right = right; + } + this.addCondition(c); + return true; + }; + ConditionsParser.prototype.readExpression = function () { + this.skip(); + if (this.at >= this.length || this.ch != '(') + return 0; + this.at++; + this.pushExpression(); + var res = this.readConditions(); + if (res) { + this.skip(); + res = this.ch == ')'; + this.at++; + this.popExpression(); + return 1; + } + return -1; + }; + Object.defineProperty(ConditionsParser.prototype, "ch", { + get: function () { return this.text.charAt(this.at); }, + enumerable: true, + configurable: true + }); + ConditionsParser.prototype.skip = function () { + while (this.at < this.length && this.isSpace(this.ch)) + this.at++; + }; + ConditionsParser.prototype.isSpace = function (c) { + return c == ' ' || c == '\n' || c == '\t' || c == '\r'; + }; + ConditionsParser.prototype.isQuotes = function (c) { + return c == "'" || c == '"'; + }; + ConditionsParser.prototype.isOperatorChar = function (c) { + return c == '>' || c == '<' || c == '=' || c == '!'; + }; + ConditionsParser.prototype.isBrackets = function (c) { + return c == '(' || c == ')'; + }; + ConditionsParser.prototype.readString = function () { + this.skip(); + if (this.at >= this.length) + return null; + var start = this.at; + var hasQuotes = this.isQuotes(this.ch); + if (hasQuotes) + this.at++; + var isFirstOpCh = this.isOperatorChar(this.ch); + while (this.at < this.length) { + if (!hasQuotes && this.isSpace(this.ch)) + break; + if (this.isQuotes(this.ch)) { + if (hasQuotes) + this.at++; + break; + } + if (!hasQuotes) { + if (isFirstOpCh != this.isOperatorChar(this.ch)) + break; + if (this.isBrackets(this.ch)) + break; + } + this.at++; + } + if (this.at <= start) + return null; + var res = this.text.substr(start, this.at - start); + if (res) { + if (res.length > 1 && this.isQuotes(res[0])) { + var len = res.length - 1; + if (this.isQuotes(res[res.length - 1])) + len--; + res = res.substr(1, len); + } + } + return res; + }; + ConditionsParser.prototype.isNoRightOperation = function (op) { + return op == "empty" || op == "notempty"; + }; + ConditionsParser.prototype.readOperator = function () { + var op = this.readString(); + if (!op) + return null; + op = op.toLowerCase(); + if (op == '>') + op = "greater"; + if (op == '<') + op = "less"; + if (op == '>=' || op == '=>') + op = "greaterorequal"; + if (op == '<=' || op == '=<') + op = "lessorequal"; + if (op == '=' || op == '==') + op = "equal"; + if (op == '<>' || op == '!=') + op = "notequal"; + if (op == 'contain') + op = "contains"; + if (op == 'notcontain') + op = "notcontains"; + return op; + }; + ConditionsParser.prototype.readConnective = function () { + var con = this.readString(); + if (!con) + return null; + con = con.toLowerCase(); + if (con == "&" || con == "&&") + con = "and"; + if (con == "|" || con == "||") + con = "or"; + if (con != "and" && con != "or") + con = null; + return con; + }; + ConditionsParser.prototype.pushExpression = function () { + var node = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.expressionNodes.push(node); + this.node = node; + }; + ConditionsParser.prototype.popExpression = function () { + var node = this.expressionNodes.pop(); + this.node = this.expressionNodes[this.expressionNodes.length - 1]; + this.node.children.push(node); + }; + ConditionsParser.prototype.addCondition = function (c) { + this.node.children.push(c); + }; + ConditionsParser.prototype.addConnective = function (con) { + if (this.node.children.length < 2) { + this.node.connective = con; + } + else { + if (this.node.connective != con) { + var oldCon = this.node.connective; + var oldChildren = this.node.children; + this.node.clear(); + this.node.connective = con; + var oldNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + oldNode.connective = oldCon; + oldNode.children = oldChildren; + this.node.children.push(oldNode); + var newNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.node.children.push(newNode); + this.node = newNode; + } + } + }; + return ConditionsParser; +}()); + + + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return dxSurveyService; }); +var dxSurveyService = (function () { + //public static serviceUrl: string = "http://localhost:50488/api/Survey"; + function dxSurveyService() { + } + dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', dxSurveyService.serviceUrl + '/getSurvey?surveyId=' + surveyId); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.onload = function () { + var result = JSON.parse(xhr.response); + onLoad(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) { + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + var xhr = new XMLHttpRequest(); + xhr.open('POST', dxSurveyService.serviceUrl + '/post/'); + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + var data = { postId: postId, surveyResult: JSON.stringify(result) }; + if (clientId) + data['clientId'] = clientId; + if (isPartialCompleted) + data['isPartialCompleted'] = true; + var dataStringify = JSON.stringify(data); + var self = this; + xhr.onload = xhr.onerror = function () { + if (!onSendResult) + return; + onSendResult(xhr.status == 200, xhr.response); + }; + xhr.send(dataStringify); + }; + dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) { + var xhr = new XMLHttpRequest(); + xhr.onload = xhr.onerror = function () { + if (!onSendFile) + return; + onSendFile(xhr.status == 200, JSON.parse(xhr.response)); + }; + xhr.open("POST", dxSurveyService.serviceUrl + '/upload/', true); + var formData = new FormData(); + formData.append("file", file); + formData.append("postId", postId); + xhr.send(formData); + }; + dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&name=' + name; + xhr.open('GET', dxSurveyService.serviceUrl + '/getResult?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + var list = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + list = []; + for (var key in result.QuestionResult) { + var el = { name: key, value: result.QuestionResult[key] }; + list.push(el); + } + } + onGetResult(xhr.status == 200, result, list, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&clientId=' + clientId; + xhr.open('GET', dxSurveyService.serviceUrl + '/isCompleted?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + } + onIsCompleted(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + return dxSurveyService; +}()); + +dxSurveyService.serviceUrl = "https://dxsurveyapi.azurewebsites.net/api/Survey"; + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(31); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PageModel; }); + + + + +var PageModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PageModel, _super); + function PageModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.numValue = -1; + _this.navigationButtonsVisibility = "inherit"; + return _this; + } + PageModel.prototype.getType = function () { return "page"; }; + Object.defineProperty(PageModel.prototype, "num", { + get: function () { return this.numValue; }, + set: function (value) { + if (this.numValue == value) + return; + this.numValue = value; + this.onNumChanged(value); + }, + enumerable: true, + configurable: true + }); + PageModel.prototype.focusFirstQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + var question = this.questions[i]; + if (!question.visible || !question.hasInput) + continue; + this.questions[i].focus(); + break; + } + }; + PageModel.prototype.focusFirstErrorQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + if (!this.questions[i].visible || this.questions[i].currentErrorCount == 0) + continue; + this.questions[i].focus(true); + break; + } + }; + PageModel.prototype.scrollToTop = function () { + __WEBPACK_IMPORTED_MODULE_2__base__["d" /* SurveyElement */].ScrollElementToTop(__WEBPACK_IMPORTED_MODULE_2__base__["a" /* SurveyPageId */]); + }; + PageModel.prototype.onNumChanged = function (value) { + }; + PageModel.prototype.onVisibleChanged = function () { + _super.prototype.onVisibleChanged.call(this); + if (this.data != null) { + this.data.pageVisibilityChanged(this, this.visible); + } + }; + return PageModel; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["a" /* PanelModelBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("page", [{ name: "navigationButtonsVisibility", default: "inherit", choices: ["iherit", "show", "hide"] }], function () { return new PageModel(); }, "panel"); + + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return QuestionRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanelModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PanelModel; }); + + + + + + +var QuestionRowModel = (function () { + function QuestionRowModel(panel) { + this.panel = panel; + this.elements = []; + this.visibleValue = panel.data && panel.data.isDesignMode; + } + Object.defineProperty(QuestionRowModel.prototype, "questions", { + //TODO remove after updating react and vue + get: function () { return this.elements; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRowModel.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionRowModel.prototype.updateVisible = function () { + this.visible = this.calcVisible(); + this.setWidth(); + }; + QuestionRowModel.prototype.addElement = function (q) { + this.elements.push(q); + this.updateVisible(); + }; + QuestionRowModel.prototype.onVisibleChanged = function () { + if (this.visibilityChangedCallback) + this.visibilityChangedCallback(); + }; + QuestionRowModel.prototype.setWidth = function () { + var visCount = this.getVisibleCount(); + if (visCount == 0) + return; + var counter = 0; + for (var i = 0; i < this.elements.length; i++) + if (this.elements[i].isVisible) { + var q = this.elements[i]; + q.renderWidth = q.width ? q.width : Math.floor(100 / visCount) + '%'; + q.rightIndent = counter < visCount - 1 ? 1 : 0; + counter++; + } + }; + QuestionRowModel.prototype.getVisibleCount = function () { + var res = 0; + for (var i = 0; i < this.elements.length; i++) { + if (this.elements[i].isVisible) + res++; + } + return res; + }; + QuestionRowModel.prototype.calcVisible = function () { return this.getVisibleCount() > 0; }; + return QuestionRowModel; +}()); + +var PanelModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModelBase, _super); + function PanelModelBase(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this) || this; + _this.name = name; + _this.dataValue = null; + _this.rowValues = null; + _this.conditionRunner = null; + _this.elementsValue = new Array(); + _this.isQuestionsReady = false; + _this.questionsValue = new Array(); + _this.parent = null; + _this.visibleIf = ""; + _this.visibleIndex = -1; + _this.visibleValue = true; + _this.idValue = PanelModelBase.getPanelId(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.elementsValue.push = function (value) { return self.doOnPushElement(this, value); }; + _this.elementsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + return self.doSpliceElements.apply(self, [this, start, deleteCount].concat(items)); + }; + return _this; + } + PanelModelBase.getPanelId = function () { + return "sp_" + PanelModelBase.panelCounter++; + }; + Object.defineProperty(PanelModelBase.prototype, "data", { + get: function () { return this.dataValue; }, + set: function (value) { + if (this.dataValue === value) + return; + this.dataValue = value; + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].setData(value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (newValue) { + this.locTitle.text = newValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + Object.defineProperty(PanelModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "questions", { + get: function () { + if (!this.isQuestionsReady) { + this.questionsValue = []; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel) { + var qs = el.questions; + for (var j = 0; j < qs.length; j++) { + this.questionsValue.push(qs[j]); + } + } + else { + this.questionsValue.push(el); + } + } + this.isQuestionsReady = true; + } + return this.questionsValue; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.markQuestionListDirty = function () { + this.isQuestionsReady = false; + if (this.parent) + this.parent.markQuestionListDirty(); + }; + Object.defineProperty(PanelModelBase.prototype, "elements", { + get: function () { return this.elementsValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.containsElement = function (element) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el == element) + return true; + if (el.isPanel) { + if (el.containsElement(element)) + return true; + } + } + return false; + }; + PanelModelBase.prototype.hasErrors = function (fireCallback, focuseOnFirstError) { + if (fireCallback === void 0) { fireCallback = true; } + if (focuseOnFirstError === void 0) { focuseOnFirstError = false; } + var result = false; + var firstErrorQuestion = null; + var visibleQuestions = []; + this.addQuestionsToList(visibleQuestions, true); + for (var i = 0; i < visibleQuestions.length; i++) { + var question = visibleQuestions[i]; + if (question.isReadOnly) + continue; + if (question.hasErrors(fireCallback)) { + if (focuseOnFirstError && firstErrorQuestion == null) { + firstErrorQuestion = question; + } + result = true; + } + } + if (firstErrorQuestion) + firstErrorQuestion.focus(true); + return result; + }; + PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + if (visibleOnly && !this.visible) + return; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (visibleOnly && !el.visible) + continue; + if (el.isPanel) { + el.addQuestionsToList(list, visibleOnly); + } + else { + list.push(el); + } + } + }; + Object.defineProperty(PanelModelBase.prototype, "rows", { + get: function () { + if (!this.rowValues) { + this.rowValues = this.buildRows(); + } + return this.rowValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isActive", { + get: function () { return (!this.data) || this.data.currentPage == this.root; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "root", { + get: function () { + var res = this; + while (res.parent) + res = res.parent; + return res; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.createRow = function () { return new QuestionRowModel(this); }; + PanelModelBase.prototype.onSurveyLoad = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onSurveyLoad(); + } + if (this.rowsChangedCallback) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isLoadingFromJson", { + get: function () { return this.data && this.data.isLoadingFromJson; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onRowsChanged = function () { + this.rowValues = null; + if (this.rowsChangedCallback && !this.isLoadingFromJson) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isDesignMode", { + get: function () { return this.data && this.data.isDesignMode; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.doOnPushElement = function (list, value) { + var result = Array.prototype.push.call(list, value); + this.markQuestionListDirty(); + this.onAddElement(value, list.length); + this.onRowsChanged(); + return result; + }; + PanelModelBase.prototype.doSpliceElements = function (list, start, deleteCount) { + var items = []; + for (var _i = 3; _i < arguments.length; _i++) { + items[_i - 3] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var deletedQuestions = []; + for (var i = 0; i < deleteCount; i++) { + if (i + start >= list.length) + continue; + deletedQuestions.push(list[i + start]); + } + var result = (_a = Array.prototype.splice).call.apply(_a, [list, start, deleteCount].concat(items)); + this.markQuestionListDirty(); + if (!items) + items = []; + for (var i = 0; i < deletedQuestions.length; i++) { + this.onRemoveElement(deletedQuestions[i]); + } + for (var i = 0; i < items.length; i++) { + this.onAddElement(items[i], start + i); + } + this.onRowsChanged(); + return result; + var _a; + }; + PanelModelBase.prototype.onAddElement = function (element, index) { + if (element.isPanel) { + var p = element; + p.data = this.data; + p.parent = this; + if (this.data) { + this.data.panelAdded(p, index, this, this.root); + } + } + else { + if (this.data) { + var q = element; + q.setData(this.data); + this.data.questionAdded(q, index, this, this.root); + } + } + var self = this; + element.rowVisibilityChangedCallback = function () { self.onElementVisibilityChanged(element); }; + element.startWithNewLineChangedCallback = function () { self.onElementStartWithNewLineChanged(element); }; + }; + PanelModelBase.prototype.onRemoveElement = function (element) { + if (!element.isPanel) { + if (this.data) + this.data.questionRemoved(element); + } + else { + if (this.data) + this.data.panelRemoved(element); + } + }; + PanelModelBase.prototype.onElementVisibilityChanged = function (element) { + if (this.rowValues) { + this.updateRowsVisibility(element); + } + if (this.parent) { + this.parent.onElementVisibilityChanged(this); + } + }; + PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) { + this.onRowsChanged(); + }; + PanelModelBase.prototype.updateRowsVisibility = function (element) { + for (var i = 0; i < this.rowValues.length; i++) { + var row = this.rowValues[i]; + if (row.elements.indexOf(element) > -1) { + row.updateVisible(); + break; + } + } + }; + PanelModelBase.prototype.buildRows = function () { + var result = new Array(); + var lastRowVisibleIndex = -1; + var self = this; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + var isNewRow = i == 0 || el.startWithNewLine; + var row = isNewRow ? this.createRow() : result[result.length - 1]; + if (isNewRow) + result.push(row); + row.addElement(el); + } + for (var i = 0; i < result.length; i++) { + result[i].updateVisible(); + } + return result; + }; + Object.defineProperty(PanelModelBase.prototype, "processedTitle", { + get: function () { + var str = this.title; + if (!str && this.isPanel && this.isDesignMode) + return "[" + this.name + "]"; + return this.data != null ? this.data.processText(str) : str; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (value) { + if (value === this.visible) + return; + this.visibleValue = value; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onVisibleChanged = function () { + }; + Object.defineProperty(PanelModelBase.prototype, "isVisible", { + get: function () { return (this.data && this.data.isDesignMode) || this.getIsPageVisible(null); }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) { + if (!this.visible) + return false; + for (var i = 0; i < this.questions.length; i++) { + if (this.questions[i] == exceptionQuestion) + continue; + if (this.questions[i].visible) + return true; + } + return false; + }; + PanelModelBase.prototype.addElement = function (element, index) { + if (index === void 0) { index = -1; } + if (element == null) + return; + if (index < 0 || index >= this.elements.length) { + this.elements.push(element); + } + else { + this.elements.splice(index, 0, element); + } + }; + PanelModelBase.prototype.addQuestion = function (question, index) { + if (index === void 0) { index = -1; } + this.addElement(question, index); + }; + PanelModelBase.prototype.addPanel = function (panel, index) { + if (index === void 0) { index = -1; } + this.addElement(panel, index); + }; + PanelModelBase.prototype.addNewQuestion = function (questionType, name) { + var question = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + this.addQuestion(question); + return question; + }; + PanelModelBase.prototype.addNewPanel = function (name) { + var panel = this.createNewPanel(name); + this.addPanel(panel); + return panel; + }; + PanelModelBase.prototype.createNewPanel = function (name) { + return new PanelModel(name); + }; + PanelModelBase.prototype.removeElement = function (element) { + var index = this.elements.indexOf(element); + if (index < 0) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel && el.removeElement(element)) + return true; + } + return false; + } + this.elements.splice(index, 1); + return true; + }; + PanelModelBase.prototype.removeQuestion = function (question) { + this.removeElement(question); + }; + PanelModelBase.prototype.runCondition = function (values) { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].runCondition(values); + } + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + PanelModelBase.prototype.onLocaleChanged = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onLocaleChanged(); + } + }; + return PanelModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* Base */])); + +PanelModelBase.panelCounter = 100; +//export class +var PanelModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModel, _super); + function PanelModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.innerIndentValue = 0; + _this.startWithNewLineValue = true; + return _this; + } + PanelModel.prototype.getType = function () { return "panel"; }; + PanelModel.prototype.setData = function (newValue) { + this.data = newValue; + }; + Object.defineProperty(PanelModel.prototype, "isPanel", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "innerIndent", { + get: function () { return this.innerIndentValue; }, + set: function (val) { + if (val == this.innerIndentValue) + return; + this.innerIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + PanelModel.prototype.onVisibleChanged = function () { + if (this.rowVisibilityChangedCallback) + this.rowVisibilityChangedCallback(); + }; + return PanelModel; +}(PanelModelBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("panel", ["name", { name: "elements", alternativeName: "questions", baseClassName: "question", visible: false }, + { name: "visible:boolean", default: true }, "visibleIf:expression", { name: "title:text", serializationProperty: "locTitle" }, + { name: "innerIndent:number", default: 0, choices: [0, 1, 2, 3] }], function () { return new PanelModel(); }); + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionCustomWidget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomWidgetCollection; }); + +var QuestionCustomWidget = (function () { + function QuestionCustomWidget(name, widgetJson) { + this.name = name; + this.widgetJson = widgetJson; + this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : ""; + } + QuestionCustomWidget.prototype.afterRender = function (question, el) { + if (this.widgetJson.afterRender) + this.widgetJson.afterRender(question, el); + }; + QuestionCustomWidget.prototype.willUnmount = function (question, el) { + if (this.widgetJson.willUnmount) + this.widgetJson.willUnmount(question, el); + }; + QuestionCustomWidget.prototype.isFit = function (question) { + if (this.widgetJson.isFit) + return this.widgetJson.isFit(question); + return false; + }; + return QuestionCustomWidget; +}()); + +var CustomWidgetCollection = (function () { + function CustomWidgetCollection() { + this.widgetsValues = []; + this.onCustomWidgetAdded = new __WEBPACK_IMPORTED_MODULE_0__base__["b" /* Event */](); + } + Object.defineProperty(CustomWidgetCollection.prototype, "widgets", { + get: function () { return this.widgetsValues; }, + enumerable: true, + configurable: true + }); + CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson) { + var name = widgetJson.name; + if (!name) { + name = "widget_" + this.widgets.length + 1; + } + var customWidget = new QuestionCustomWidget(name, widgetJson); + this.widgetsValues.push(customWidget); + this.onCustomWidgetAdded.fire(customWidget, null); + }; + CustomWidgetCollection.prototype.clear = function () { this.widgetsValues = []; }; + CustomWidgetCollection.prototype.getCustomWidget = function (question) { + for (var i = 0; i < this.widgetsValues.length; i++) { + if (this.widgetsValues[i].isFit(question)) + return this.widgetsValues[i]; + } + return null; + }; + return CustomWidgetCollection; +}()); + +CustomWidgetCollection.Instance = new CustomWidgetCollection(); + + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__ = __webpack_require__(23); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNavigation; }); + + + +var SurveyNavigation = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyNavigation, _super); + function SurveyNavigation(props) { + var _this = _super.call(this, props) || this; + _this.handlePrevClick = _this.handlePrevClick.bind(_this); + _this.handleNextClick = _this.handleNextClick.bind(_this); + _this.handleCompleteClick = _this.handleCompleteClick.bind(_this); + return _this; + } + SurveyNavigation.prototype.handlePrevClick = function (event) { + this.survey.prevPage(); + }; + SurveyNavigation.prototype.handleNextClick = function (event) { + this.survey.nextPage(); + }; + SurveyNavigation.prototype.handleCompleteClick = function (event) { + this.survey.completeLastPage(); + }; + SurveyNavigation.prototype.render = function () { + if (!this.survey || !this.survey.isNavigationButtonsShowing) + return null; + var prevButton = !this.survey.isFirstPage ? this.renderButton(this.handlePrevClick, this.survey.pagePrevText, this.css.navigation.prev) : null; + var nextButton = !this.survey.isLastPage ? this.renderButton(this.handleNextClick, this.survey.pageNextText, this.css.navigation.next) : null; + var completeButton = this.survey.isLastPage && this.survey.isEditMode ? this.renderButton(this.handleCompleteClick, this.survey.completeText, this.css.navigation.complete) : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.footer }, + prevButton, + nextButton, + completeButton)); + }; + SurveyNavigation.prototype.renderButton = function (click, text, btnClassName) { + var style = { marginRight: "5px" }; + var className = this.css.navigationButton + (btnClassName ? ' ' + btnClassName : ""); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: className, style: style, type: "button", onClick: click, value: text }); + }; + return SurveyNavigation; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__["a" /* SurveyNavigationBase */])); + + + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__ = __webpack_require__(23); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyProgress; }); + + + +var SurveyProgress = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyProgress, _super); + function SurveyProgress(props) { + var _this = _super.call(this, props) || this; + _this.isTop = props.isTop; + return _this; + } + SurveyProgress.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.isTop = nextProps.isTop; + }; + Object.defineProperty(SurveyProgress.prototype, "progress", { + get: function () { return this.survey.getProgress(); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyProgress.prototype, "progressText", { + get: function () { return this.survey.progressText; }, + enumerable: true, + configurable: true + }); + SurveyProgress.prototype.render = function () { + var style = this.isTop ? { width: "60%" } : { width: "60%", marginTop: "10px" }; + var progressStyle = { width: this.progress + "%" }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.progress, style: style }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: progressStyle, className: this.css.progressBar, role: "progressbar", "aria-valuemin": "0", "aria-valuemax": "100" }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.progressText)))); + }; + return SurveyProgress; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__["a" /* SurveyNavigationBase */])); + + + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurvey__ = __webpack_require__(22); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindow; }); + + + +var SurveyWindow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindow, _super); + function SurveyWindow(props) { + var _this = _super.call(this, props) || this; + _this.handleOnExpanded = _this.handleOnExpanded.bind(_this); + return _this; + } + SurveyWindow.prototype.handleOnExpanded = function (event) { + this.state.expanded = !this.state.expanded; + this.setState(this.state); + }; + SurveyWindow.prototype.render = function () { + if (this.state.hidden) + return null; + var header = this.renderHeader(); + var body = this.state.expanded ? this.renderBody() : null; + var style = { position: "fixed", bottom: "3px", right: "10px" }; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.root, style: style }, + header, + body); + }; + SurveyWindow.prototype.renderHeader = function () { + var styleA = { width: "100%" }; + var styleTitle = { paddingRight: "10px" }; + var glyphClassName = this.state.expanded ? this.css.window.header.buttonCollapsed : this.css.window.header.buttonExpanded; + glyphClassName = "glyphicon pull-right " + glyphClassName; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.header.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("a", { href: "#", onClick: this.handleOnExpanded, style: styleA }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: this.css.window.header.title, style: styleTitle }, this.title), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: glyphClassName, "aria-hidden": "true" }))); + }; + SurveyWindow.prototype.renderBody = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.body }, this.renderSurvey()); + }; + SurveyWindow.prototype.updateSurvey = function (newProps) { + _super.prototype.updateSurvey.call(this, newProps); + this.title = newProps.title ? newProps.title : this.survey.title; + var hasExpanded = newProps["expanded"] ? newProps.expanded : false; + this.state = { expanded: hasExpanded, hidden: false }; + var self = this; + this.survey.onComplete.add(function (s) { + self.state.hidden = true; + self.setState(self.state); + }); + }; + return SurveyWindow; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurvey__["a" /* Survey */])); + + + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestion__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPage; }); +/* unused harmony export SurveyPanel */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyRow; }); + + + +var SurveyPage = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyPage, _super); + function SurveyPage(props) { + var _this = _super.call(this, props) || this; + _this.page = props.page; + _this.survey = props.survey; + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyPage.prototype.componentWillReceiveProps = function (nextProps) { + this.page = nextProps.page; + this.survey = nextProps.survey; + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyPage.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.afterRenderPage(el); + }; + SurveyPage.prototype.render = function () { + if (this.page == null || this.survey == null || this.creator == null) + return null; + var title = this.renderTitle(); + var rows = []; + var questionRows = this.page.rows; + for (var i = 0; i < questionRows.length; i++) { + rows.push(this.createRow(questionRows[i], i)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root" }, + title, + rows)); + }; + SurveyPage.prototype.createRow = function (row, index) { + var rowName = "row" + (index + 1); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyRow, { key: rowName, row: row, survey: this.survey, creator: this.creator, css: this.css }); + }; + SurveyPage.prototype.renderTitle = function () { + if (!this.page.title || !this.survey.showPageTitles) + return null; + var text = this.page.processedTitle; + if (this.page.num > 0) { + text = this.page.num + ". " + text; + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h4", { className: this.css.pageTitle }, text)); + }; + return SurveyPage; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyPanel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyPanel, _super); + function SurveyPanel(props) { + var _this = _super.call(this, props) || this; + _this.panel = props.panel; + _this.survey = props.survey; + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyPanel.prototype.componentWillReceiveProps = function (nextProps) { + this.panel = nextProps.panel; + this.survey = nextProps.survey; + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyPanel.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.afterRenderPage(el); + }; + SurveyPanel.prototype.render = function () { + if (this.panel == null || this.survey == null || this.creator == null) + return null; + var title = this.renderTitle(); + var rows = []; + var questionRows = this.panel.rows; + for (var i = 0; i < questionRows.length; i++) { + rows.push(this.createRow(questionRows[i], i)); + } + var style = { "marginLeft": this.panel.innerIndent * this.css.question.indent + 'px' }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root" }, + title, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: style }, rows))); + }; + SurveyPanel.prototype.createRow = function (row, index) { + var rowName = "row" + (index + 1); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyRow, { key: rowName, row: row, survey: this.survey, creator: this.creator, css: this.css }); + }; + SurveyPanel.prototype.renderTitle = function () { + if (!this.panel.title) + return null; + var text = this.panel.processedTitle; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h4", { className: this.css.pageTitle }, text)); + }; + return SurveyPanel; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyRow, _super); + function SurveyRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyRow.prototype.componentWillReceiveProps = function (nextProps) { + this.setProperties(nextProps); + }; + SurveyRow.prototype.setProperties = function (props) { + this.row = props.row; + if (this.row) { + var self = this; + this.row.visibilityChangedCallback = function () { self.setState({ visible: self.row.visible }); }; + } + this.survey = props.survey; + this.creator = props.creator; + this.css = props.css; + }; + SurveyRow.prototype.render = function () { + if (this.row == null || this.survey == null || this.creator == null) + return null; + var questions = null; + if (this.row.visible) { + questions = []; + for (var i = 0; i < this.row.elements.length; i++) { + var question = this.row.elements[i]; + questions.push(this.createQuestion(question)); + } + } + var style = this.row.visible ? {} : { display: "none" }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.row, style: style }, questions)); + }; + SurveyRow.prototype.createQuestion = function (question) { + if (question.isPanel) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyPanel, { key: question.name, panel: question, creator: this.creator, survey: this.survey, css: this.css }); + } + else { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_2__reactquestion__["a" /* SurveyQuestion */], { key: question.name, question: question, creator: this.creator, css: this.css }); + } + }; + return SurveyRow; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 37 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__chunks_model__ = __webpack_require__(44); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["a"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["b"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["c"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["d"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["e"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["f"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["g"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["h"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["i"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["j"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["k"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["l"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["m"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["n"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["o"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["p"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["q"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["r"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["s"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["t"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["u"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["v"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["w"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["x"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["y"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["z"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["A"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["B"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["C"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["D"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["E"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["F"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["G"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["H"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["I"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["J"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["K"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["L"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["M"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["N"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_23", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["O"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_24", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["P"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_25", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Q"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_26", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["R"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_27", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["S"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_28", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["T"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_29", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["U"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_30", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["V"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_31", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["W"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_32", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["X"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_33", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Y"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_34", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Z"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_35", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_0"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_36", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_1"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_37", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_2"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_38", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_3"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_39", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_4"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_40", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_5"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_41", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_6"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_42", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_7"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_43", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_8"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_44", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_9"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_45", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_10"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_46", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_11"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_47", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_12"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_48", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_13"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_49", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_14"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_50", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_15"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_51", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_16"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_52", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_17"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_53", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_18"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_54", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_19"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_55", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_20"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_56", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_21"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_57", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_22"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__chunks_localization__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__ = __webpack_require__(0); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_58", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["a"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_59", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["b"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_60", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(19); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__ = __webpack_require__(42); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__react_reactSurvey__ = __webpack_require__(22); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_5__react_reactSurvey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__ = __webpack_require__(24); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__react_reactSurveyNavigationBase__ = __webpack_require__(23); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_7__react_reactSurveyNavigationBase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__react_reactSurveyNavigation__ = __webpack_require__(33); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_8__react_reactSurveyNavigation__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__react_reactpage__ = __webpack_require__(36); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_9__react_reactpage__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_9__react_reactpage__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__ = __webpack_require__(15); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__ = __webpack_require__(8); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__ = __webpack_require__(69); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__react_reactquestiondropdown__ = __webpack_require__(70); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_14__react_reactquestiondropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__ = __webpack_require__(74); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__ = __webpack_require__(73); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__react_reactquestionhtml__ = __webpack_require__(72); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_17__react_reactquestionhtml__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__react_reactquestionfile__ = __webpack_require__(71); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_18__react_reactquestionfile__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__ = __webpack_require__(76); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__react_reactquestionradiogroup__ = __webpack_require__(77); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_20__react_reactquestionradiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__react_reactquestiontext__ = __webpack_require__(79); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_21__react_reactquestiontext__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__ = __webpack_require__(75); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__react_reactSurveyProgress__ = __webpack_require__(34); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_23__react_reactSurveyProgress__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__react_reactquestionrating__ = __webpack_require__(78); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_24__react_reactquestionrating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__react_reactSurveyWindow__ = __webpack_require__(35); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_25__react_reactSurveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__ = __webpack_require__(6); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__["a"]; }); +// model + +// localization + +// helpers + +// css standard + +// css bootstrap + +// react + + // TODO need to remove someday + + + + + + + + + + + + + + + + + + + + + // TODO need to remove someday + +//Uncomment to include the "date" question type. +//export {default as SurveyQuestionDate} from "../plugins/react/reactquestiondate"; + + +/***/ }), +/* 38 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +!function(global, factory) { + true ? factory(exports) : 'function' == typeof define && define.amd ? define([ 'exports' ], factory) : factory(global.preact = global.preact || {}); +}(this, function(exports) { + function VNode(nodeName, attributes, children) { + this.nodeName = nodeName; + this.attributes = attributes; + this.children = children; + this.key = attributes && attributes.key; + } + function h(nodeName, attributes) { + var children, lastSimple, child, simple, i; + for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]); + if (attributes && attributes.children) { + if (!stack.length) stack.push(attributes.children); + delete attributes.children; + } + while (stack.length) if ((child = stack.pop()) instanceof Array) for (i = child.length; i--; ) stack.push(child[i]); else if (null != child && child !== !0 && child !== !1) { + if ('number' == typeof child) child = String(child); + simple = 'string' == typeof child; + if (simple && lastSimple) children[children.length - 1] += child; else { + (children || (children = [])).push(child); + lastSimple = simple; + } + } + var p = new VNode(nodeName, attributes || void 0, children || EMPTY_CHILDREN); + if (options.vnode) options.vnode(p); + return p; + } + function extend(obj, props) { + if (props) for (var i in props) obj[i] = props[i]; + return obj; + } + function clone(obj) { + return extend({}, obj); + } + function delve(obj, key) { + for (var p = key.split('.'), i = 0; i < p.length && obj; i++) obj = obj[p[i]]; + return obj; + } + function isFunction(obj) { + return 'function' == typeof obj; + } + function isString(obj) { + return 'string' == typeof obj; + } + function hashToClassName(c) { + var str = ''; + for (var prop in c) if (c[prop]) { + if (str) str += ' '; + str += prop; + } + return str; + } + function cloneElement(vnode, props) { + return h(vnode.nodeName, extend(clone(vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children); + } + function createLinkedState(component, key, eventPath) { + var path = key.split('.'); + return function(e) { + var t = e && e.target || this, state = {}, obj = state, v = isString(eventPath) ? delve(e, eventPath) : t.nodeName ? t.type.match(/^che|rad/) ? t.checked : t.value : e, i = 0; + for (;i < path.length - 1; i++) obj = obj[path[i]] || (obj[path[i]] = !i && component.state[path[i]] || {}); + obj[path[i]] = v; + component.setState(state); + }; + } + function enqueueRender(component) { + if (!component._dirty && (component._dirty = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender); + } + function rerender() { + var p, list = items; + items = []; + while (p = list.pop()) if (p._dirty) renderComponent(p); + } + function isFunctionalComponent(vnode) { + var nodeName = vnode && vnode.nodeName; + return nodeName && isFunction(nodeName) && !(nodeName.prototype && nodeName.prototype.render); + } + function buildFunctionalComponent(vnode, context) { + return vnode.nodeName(getNodeProps(vnode), context || EMPTY); + } + function isSameNodeType(node, vnode) { + if (isString(vnode)) return node instanceof Text; + if (isString(vnode.nodeName)) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); + if (isFunction(vnode.nodeName)) return (node._componentConstructor ? node._componentConstructor === vnode.nodeName : !0) || isFunctionalComponent(vnode); else ; + } + function isNamedNode(node, nodeName) { + return node.normalizedNodeName === nodeName || toLowerCase(node.nodeName) === toLowerCase(nodeName); + } + function getNodeProps(vnode) { + var props = clone(vnode.attributes); + props.children = vnode.children; + var defaultProps = vnode.nodeName.defaultProps; + if (defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i]; + return props; + } + function removeNode(node) { + var p = node.parentNode; + if (p) p.removeChild(node); + } + function setAccessor(node, name, old, value, isSvg) { + if ('className' === name) name = 'class'; + if ('class' === name && value && 'object' == typeof value) value = hashToClassName(value); + if ('key' === name) ; else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) { + if (!value || isString(value) || isString(old)) node.style.cssText = value || ''; + if (value && 'object' == typeof value) { + if (!isString(old)) for (var i in old) if (!(i in value)) node.style[i] = ''; + for (var i in value) node.style[i] = 'number' == typeof value[i] && !NON_DIMENSION_PROPS[i] ? value[i] + 'px' : value[i]; + } + } else if ('dangerouslySetInnerHTML' === name) { + if (value) node.innerHTML = value.__html || ''; + } else if ('o' == name[0] && 'n' == name[1]) { + var l = node._listeners || (node._listeners = {}); + name = toLowerCase(name.substring(2)); + if (value) { + if (!l[name]) node.addEventListener(name, eventProxy, !!NON_BUBBLING_EVENTS[name]); + } else if (l[name]) node.removeEventListener(name, eventProxy, !!NON_BUBBLING_EVENTS[name]); + l[name] = value; + } else if ('list' !== name && 'type' !== name && !isSvg && name in node) { + setProperty(node, name, null == value ? '' : value); + if (null == value || value === !1) node.removeAttribute(name); + } else { + var ns = isSvg && name.match(/^xlink\:?(.+)/); + if (null == value || value === !1) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', toLowerCase(ns[1])); else node.removeAttribute(name); else if ('object' != typeof value && !isFunction(value)) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', toLowerCase(ns[1]), value); else node.setAttribute(name, value); + } + } + function setProperty(node, name, value) { + try { + node[name] = value; + } catch (e) {} + } + function eventProxy(e) { + return this._listeners[e.type](options.event && options.event(e) || e); + } + function collectNode(node) { + removeNode(node); + if (node instanceof Element) { + node._component = node._componentConstructor = null; + var _name = node.normalizedNodeName || toLowerCase(node.nodeName); + (nodes[_name] || (nodes[_name] = [])).push(node); + } + } + function createNode(nodeName, isSvg) { + var name = toLowerCase(nodeName), node = nodes[name] && nodes[name].pop() || (isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName)); + node.normalizedNodeName = name; + return node; + } + function flushMounts() { + var c; + while (c = mounts.pop()) { + if (options.afterMount) options.afterMount(c); + if (c.componentDidMount) c.componentDidMount(); + } + } + function diff(dom, vnode, context, mountAll, parent, componentRoot) { + if (!diffLevel++) { + isSvgMode = parent && 'undefined' != typeof parent.ownerSVGElement; + hydrating = dom && !(ATTR_KEY in dom); + } + var ret = idiff(dom, vnode, context, mountAll); + if (parent && ret.parentNode !== parent) parent.appendChild(ret); + if (!--diffLevel) { + hydrating = !1; + if (!componentRoot) flushMounts(); + } + return ret; + } + function idiff(dom, vnode, context, mountAll) { + var ref = vnode && vnode.attributes && vnode.attributes.ref; + while (isFunctionalComponent(vnode)) vnode = buildFunctionalComponent(vnode, context); + if (null == vnode) vnode = ''; + if (isString(vnode)) { + if (dom && dom instanceof Text && dom.parentNode) { + if (dom.nodeValue != vnode) dom.nodeValue = vnode; + } else { + if (dom) recollectNodeTree(dom); + dom = document.createTextNode(vnode); + } + return dom; + } + if (isFunction(vnode.nodeName)) return buildComponentFromVNode(dom, vnode, context, mountAll); + var out = dom, nodeName = String(vnode.nodeName), prevSvgMode = isSvgMode, vchildren = vnode.children; + isSvgMode = 'svg' === nodeName ? !0 : 'foreignObject' === nodeName ? !1 : isSvgMode; + if (!dom) out = createNode(nodeName, isSvgMode); else if (!isNamedNode(dom, nodeName)) { + out = createNode(nodeName, isSvgMode); + while (dom.firstChild) out.appendChild(dom.firstChild); + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + recollectNodeTree(dom); + } + var fc = out.firstChild, props = out[ATTR_KEY]; + if (!props) { + out[ATTR_KEY] = props = {}; + for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value; + } + if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && fc && fc instanceof Text && !fc.nextSibling) { + if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0]; + } else if (vchildren && vchildren.length || fc) innerDiffNode(out, vchildren, context, mountAll, !!props.dangerouslySetInnerHTML); + diffAttributes(out, vnode.attributes, props); + if (ref) (props.ref = ref)(out); + isSvgMode = prevSvgMode; + return out; + } + function innerDiffNode(dom, vchildren, context, mountAll, absorb) { + var j, c, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren && vchildren.length; + if (len) for (var i = 0; i < len; i++) { + var _child = originalChildren[i], props = _child[ATTR_KEY], key = vlen ? (c = _child._component) ? c.__key : props ? props.key : null : null; + if (null != key) { + keyedLen++; + keyed[key] = _child; + } else if (hydrating || absorb || props || _child instanceof Text) children[childrenLen++] = _child; + } + if (vlen) for (var i = 0; i < vlen; i++) { + vchild = vchildren[i]; + child = null; + var key = vchild.key; + if (null != key) { + if (keyedLen && key in keyed) { + child = keyed[key]; + keyed[key] = void 0; + keyedLen--; + } + } else if (!child && min < childrenLen) for (j = min; j < childrenLen; j++) { + c = children[j]; + if (c && isSameNodeType(c, vchild)) { + child = c; + children[j] = void 0; + if (j === childrenLen - 1) childrenLen--; + if (j === min) min++; + break; + } + } + child = idiff(child, vchild, context, mountAll); + if (child && child !== dom) if (i >= len) dom.appendChild(child); else if (child !== originalChildren[i]) { + if (child === originalChildren[i + 1]) removeNode(originalChildren[i]); + dom.insertBefore(child, originalChildren[i] || null); + } + } + if (keyedLen) for (var i in keyed) if (keyed[i]) recollectNodeTree(keyed[i]); + while (min <= childrenLen) { + child = children[childrenLen--]; + if (child) recollectNodeTree(child); + } + } + function recollectNodeTree(node, unmountOnly) { + var component = node._component; + if (component) unmountComponent(component, !unmountOnly); else { + if (node[ATTR_KEY] && node[ATTR_KEY].ref) node[ATTR_KEY].ref(null); + if (!unmountOnly) collectNode(node); + var c; + while (c = node.lastChild) recollectNodeTree(c, unmountOnly); + } + } + function diffAttributes(dom, attrs, old) { + var name; + for (name in old) if (!(attrs && name in attrs) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode); + if (attrs) for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode); + } + function collectComponent(component) { + var name = component.constructor.name, list = components[name]; + if (list) list.push(component); else components[name] = [ component ]; + } + function createComponent(Ctor, props, context) { + var inst = new Ctor(props, context), list = components[Ctor.name]; + Component.call(inst, props, context); + if (list) for (var i = list.length; i--; ) if (list[i].constructor === Ctor) { + inst.nextBase = list[i].nextBase; + list.splice(i, 1); + break; + } + return inst; + } + function setComponentProps(component, props, opts, context, mountAll) { + if (!component._disable) { + component._disable = !0; + if (component.__ref = props.ref) delete props.ref; + if (component.__key = props.key) delete props.key; + if (!component.base || mountAll) { + if (component.componentWillMount) component.componentWillMount(); + } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context); + if (context && context !== component.context) { + if (!component.prevContext) component.prevContext = component.context; + component.context = context; + } + if (!component.prevProps) component.prevProps = component.props; + component.props = props; + component._disable = !1; + if (0 !== opts) if (1 === opts || options.syncComponentUpdates !== !1 || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component); + if (component.__ref) component.__ref(component); + } + } + function renderComponent(component, opts, mountAll, isChild) { + if (!component._disable) { + var skip, rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.prevProps || props, previousState = component.prevState || state, previousContext = component.prevContext || context, isUpdate = component.base, nextBase = component.nextBase, initialBase = isUpdate || nextBase, initialChildComponent = component._component; + if (isUpdate) { + component.props = previousProps; + component.state = previousState; + component.context = previousContext; + if (2 !== opts && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === !1) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context); + component.props = props; + component.state = state; + component.context = context; + } + component.prevProps = component.prevState = component.prevContext = component.nextBase = null; + component._dirty = !1; + if (!skip) { + if (component.render) rendered = component.render(props, state, context); + if (component.getChildContext) context = extend(clone(context), component.getChildContext()); + while (isFunctionalComponent(rendered)) rendered = buildFunctionalComponent(rendered, context); + var toUnmount, base, childComponent = rendered && rendered.nodeName; + if (isFunction(childComponent)) { + var childProps = getNodeProps(rendered); + inst = initialChildComponent; + if (inst && inst.constructor === childComponent && childProps.key == inst.__key) setComponentProps(inst, childProps, 1, context); else { + toUnmount = inst; + inst = createComponent(childComponent, childProps, context); + inst.nextBase = inst.nextBase || nextBase; + inst._parentComponent = component; + component._component = inst; + setComponentProps(inst, childProps, 0, context); + renderComponent(inst, 1, mountAll, !0); + } + base = inst.base; + } else { + cbase = initialBase; + toUnmount = initialChildComponent; + if (toUnmount) cbase = component._component = null; + if (initialBase || 1 === opts) { + if (cbase) cbase._component = null; + base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0); + } + } + if (initialBase && base !== initialBase && inst !== initialChildComponent) { + var baseParent = initialBase.parentNode; + if (baseParent && base !== baseParent) { + baseParent.replaceChild(base, initialBase); + if (!toUnmount) { + initialBase._component = null; + recollectNodeTree(initialBase); + } + } + } + if (toUnmount) unmountComponent(toUnmount, base !== initialBase); + component.base = base; + if (base && !isChild) { + var componentRef = component, t = component; + while (t = t._parentComponent) (componentRef = t).base = base; + base._component = componentRef; + base._componentConstructor = componentRef.constructor; + } + } + if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) { + if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, previousContext); + if (options.afterUpdate) options.afterUpdate(component); + } + var fn, cb = component._renderCallbacks; + if (cb) while (fn = cb.pop()) fn.call(component); + if (!diffLevel && !isChild) flushMounts(); + } + } + function buildComponentFromVNode(dom, vnode, context, mountAll) { + var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode); + while (c && !isOwner && (c = c._parentComponent)) isOwner = c.constructor === vnode.nodeName; + if (c && isOwner && (!mountAll || c._component)) { + setComponentProps(c, props, 3, context, mountAll); + dom = c.base; + } else { + if (originalComponent && !isDirectOwner) { + unmountComponent(originalComponent, !0); + dom = oldDom = null; + } + c = createComponent(vnode.nodeName, props, context); + if (dom && !c.nextBase) { + c.nextBase = dom; + oldDom = null; + } + setComponentProps(c, props, 1, context, mountAll); + dom = c.base; + if (oldDom && dom !== oldDom) { + oldDom._component = null; + recollectNodeTree(oldDom); + } + } + return dom; + } + function unmountComponent(component, remove) { + if (options.beforeUnmount) options.beforeUnmount(component); + var base = component.base; + component._disable = !0; + if (component.componentWillUnmount) component.componentWillUnmount(); + component.base = null; + var inner = component._component; + if (inner) unmountComponent(inner, remove); else if (base) { + if (base[ATTR_KEY] && base[ATTR_KEY].ref) base[ATTR_KEY].ref(null); + component.nextBase = base; + if (remove) { + removeNode(base); + collectComponent(component); + } + var c; + while (c = base.lastChild) recollectNodeTree(c, !remove); + } + if (component.__ref) component.__ref(null); + if (component.componentDidUnmount) component.componentDidUnmount(); + } + function Component(props, context) { + this._dirty = !0; + this.context = context; + this.props = props; + if (!this.state) this.state = {}; + } + function render(vnode, parent, merge) { + return diff(merge, vnode, {}, !1, parent); + } + var options = {}; + var stack = []; + var EMPTY_CHILDREN = []; + var lcCache = {}; + var toLowerCase = function(s) { + return lcCache[s] || (lcCache[s] = s.toLowerCase()); + }; + var resolved = 'undefined' != typeof Promise && Promise.resolve(); + var defer = resolved ? function(f) { + resolved.then(f); + } : setTimeout; + var EMPTY = {}; + var ATTR_KEY = 'undefined' != typeof Symbol ? Symbol.for('preactattr') : '__preactattr_'; + var NON_DIMENSION_PROPS = { + boxFlex: 1, + boxFlexGroup: 1, + columnCount: 1, + fillOpacity: 1, + flex: 1, + flexGrow: 1, + flexPositive: 1, + flexShrink: 1, + flexNegative: 1, + fontWeight: 1, + lineClamp: 1, + lineHeight: 1, + opacity: 1, + order: 1, + orphans: 1, + strokeOpacity: 1, + widows: 1, + zIndex: 1, + zoom: 1 + }; + var NON_BUBBLING_EVENTS = { + blur: 1, + error: 1, + focus: 1, + load: 1, + resize: 1, + scroll: 1 + }; + var items = []; + var nodes = {}; + var mounts = []; + var diffLevel = 0; + var isSvgMode = !1; + var hydrating = !1; + var components = {}; + extend(Component.prototype, { + linkState: function(key, eventPath) { + var c = this._linkedStates || (this._linkedStates = {}); + return c[key + eventPath] || (c[key + eventPath] = createLinkedState(this, key, eventPath)); + }, + setState: function(state, callback) { + var s = this.state; + if (!this.prevState) this.prevState = clone(s); + extend(s, isFunction(state) ? state(s, this.props) : state); + if (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback); + enqueueRender(this); + }, + forceUpdate: function() { + renderComponent(this, 2); + }, + render: function() {} + }); + exports.h = h; + exports.cloneElement = cloneElement; + exports.Component = Component; + exports.render = render; + exports.rerender = rerender; + exports.options = options; +}); +//# sourceMappingURL=preact.js.map + +/***/ }), +/* 40 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod); + global.PropTypes = mod.exports; + } +})(this, function (exports, module) { + + 'use strict'; + + var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7; + + var ReactElement = {}; + + ReactElement.isValidElement = function (object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + }; + + var ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; + + var emptyFunction = { + thatReturns: function thatReturns(what) { + return function () { + return what; + }; + } + }; + + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + var ANONYMOUS = '<>'; + + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker + }; + + function createChainableTypeChecker(validate) { + function checkType(isRequired, props, propName, componentName, location, propFullName) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + if (props[propName] == null) { + var locationName = ReactPropTypeLocationNames[location]; + if (isRequired) { + return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + var locationName = ReactPropTypeLocationNames[location]; + + var preciseType = getPreciseType(propValue); + + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunction.thatReturns(null)); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var locationName = ReactPropTypeLocationNames[location]; + var propType = getPropType(propValue); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']'); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!ReactElement.isValidElement(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var locationName = ReactPropTypeLocationNames[location]; + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOf, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (propValue === expectedValues[i]) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + var valuesString = JSON.stringify(expectedValues); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (propValue.hasOwnProperty(key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOfType, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName) == null) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || ReactElement.isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + function isSymbol(propType, propValue) { + if (propType === 'symbol') { + return true; + } + + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } + + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } + + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + return 'object'; + } + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + return propType; + } + + function getPreciseType(propValue) { + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + return propValue.constructor.name; + } + + module.exports = ReactPropTypes; +}); + +//# sourceMappingURL=index.js.map + +/***/ }), +/* 42 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(19); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultBootstrapCss; }); + +var defaultBootstrapCss = { + root: "", + header: "panel-heading", + body: "panel-body", + footer: "panel-footer", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "progress center-block", progressBar: "progress-bar", + pageTitle: "", + row: "", + question: { root: "", title: "", comment: "form-control", indent: 20 }, + error: { root: "alert alert-danger", icon: "glyphicon glyphicon-exclamation-sign", item: "" }, + checkbox: { root: "form-inline", item: "checkbox", other: "" }, + comment: "form-control", + dropdown: { root: "", control: "form-control" }, + matrix: { root: "table" }, + matrixdropdown: { root: "table" }, + matrixdynamic: { root: "table", button: "button" }, + multipletext: { root: "table", itemTitle: "", itemValue: "form-control" }, + radiogroup: { root: "form-inline", item: "radio", label: "", other: "" }, + rating: { root: "btn-group", item: "btn btn-default" }, + text: "form-control", + window: { + root: "modal-content", body: "modal-body", + header: { + root: "modal-header panel-title", title: "pull-left", button: "glyphicon pull-right", + buttonExpanded: "glyphicon pull-right glyphicon-chevron-up", buttonCollapsed: "glyphicon pull-right glyphicon-chevron-down" + } + } +}; +__WEBPACK_IMPORTED_MODULE_0__cssstandard__["a" /* surveyCss */]["bootstrap"] = defaultBootstrapCss; + + +/***/ }), +/* 43 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_czech__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localization_danish__ = __webpack_require__(46); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localization_dutch__ = __webpack_require__(47); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__localization_finnish__ = __webpack_require__(48); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_french__ = __webpack_require__(49); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localization_german__ = __webpack_require__(50); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localization_greek__ = __webpack_require__(51); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localization_polish__ = __webpack_require__(52); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localization_romanian__ = __webpack_require__(53); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localization_russian__ = __webpack_require__(54); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localization_swedish__ = __webpack_require__(55); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localization_turkish__ = __webpack_require__(56); + + + + + + + + + + + + + + +/***/ }), +/* 44 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(38); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__validator__ = __webpack_require__(27); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__ = __webpack_require__(17); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditions__ = __webpack_require__(14); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__conditionsParser__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_7__conditionsParser__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__ = __webpack_require__(18); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__error__ = __webpack_require__(9); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__jsonobject__ = __webpack_require__(2); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["i"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["j"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__ = __webpack_require__(20); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["d"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__ = __webpack_require__(63); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__ = __webpack_require__(64); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__question_matrix__ = __webpack_require__(62); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__question_multipletext__ = __webpack_require__(65); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__panel__ = __webpack_require__(31); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__page__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_17__page__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__question__ = __webpack_require__(10); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_18__question__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__questionbase__ = __webpack_require__(21); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_19__questionbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__question_baseselect__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__question_checkbox__ = __webpack_require__(57); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_21__question_checkbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__question_comment__ = __webpack_require__(58); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_22__question_comment__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__question_dropdown__ = __webpack_require__(59); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_23__question_dropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__questionfactory__ = __webpack_require__(5); +/* unused harmony reexport QuestionFactory */ +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__question_file__ = __webpack_require__(60); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_25__question_file__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__question_html__ = __webpack_require__(61); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_26__question_html__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__ = __webpack_require__(66); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__question_rating__ = __webpack_require__(67); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_28__question_rating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__question_text__ = __webpack_require__(68); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_29__question_text__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__survey__ = __webpack_require__(25); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_30__survey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__trigger__ = __webpack_require__(81); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__surveyWindow__ = __webpack_require__(80); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__ = __webpack_require__(29); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__surveyStrings__ = __webpack_require__(1); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__ = __webpack_require__(32); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["a"]; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Version; }); +// styles + +var Version; +Version = "" + "0.12.8"; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//Uncomment to include the "date" question type. +//export {default as QuestionDateModel} from "../../plugins/question_date"; + + +/***/ }), +/* 45 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export czechSurveyStrings */ + +var czechSurveyStrings = { + pagePrevText: "Předchozí", + pageNextText: "Další", + completeText: "Hotovo", + otherItemText: "Jiná odpověď (napište)", + progressText: "Strana {0} z {1}", + emptySurvey: "Průzkumu neobsahuje žádné otázky.", + completingSurvey: "Děkujeme za vyplnění průzkumu!", + loadingSurvey: "Probíhá načítání průzkumu...", + optionsCaption: "Vyber...", + requiredError: "Odpovězte prosím na otázku.", + requiredInAllRowsError: "Odpovězte prosím na všechny otázky.", + numericError: "V tomto poli lze zadat pouze čísla.", + textMinLength: "Zadejte prosím alespoň {0} znaků.", + textMaxLength: "Zadejte prosím méně než {0} znaků.", + textMinMaxLength: "Zadejte prosím více než {0} a méně než {1} znaků.", + minRowCountError: "Vyplňte prosím alespoň {0} řádků.", + minSelectError: "Vyberte prosím alespoň {0} varianty.", + maxSelectError: "Nevybírejte prosím více než {0} variant.", + numericMinMax: "Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}", + numericMin: "Odpověď '{0}' by mělo být větší nebo rovno {1}", + numericMax: "Odpověď '{0}' by mělo být menší nebo rovno {1}", + invalidEmail: "Zadejte prosím platnou e-mailovou adresu.", + urlRequestError: "Požadavek vrátil chybu '{0}'. {1}", + urlGetChoicesError: "Požadavek nevrátil data nebo cesta je neplatná", + exceedMaxSize: "Velikost souboru by neměla být větší než {0}.", + otherRequiredError: "Zadejte prosím jinou hodnotu.", + uploadingFile: "Váš soubor se nahrává. Zkuste to prosím za několik sekund.", + addRow: "Přidat řádek", + removeRow: "Odstranit" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["cz"] = czechSurveyStrings; + + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export danishSurveyStrings */ + +var danishSurveyStrings = { + pagePrevText: "Tilbage", + pageNextText: "Videre", + completeText: "Færdig", + progressText: "Side {0} af {1}", + emptySurvey: "Der er ingen synlige spørgsmål.", + completingSurvey: "Mange tak for din besvarelse!", + loadingSurvey: "Spørgeskemaet hentes fra serveren...", + otherItemText: "Valgfrit svar...", + optionsCaption: "Vælg...", + requiredError: "Besvar venligst spørgsmålet.", + numericError: "Angiv et tal.", + textMinLength: "Angiv mindst {0} tegn.", + minSelectError: "Vælg venligst mindst {0} svarmulighed(er).", + maxSelectError: "Vælg venligst færre {0} svarmuligheder(er).", + numericMinMax: "'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}", + numericMin: "'{0}' skal være lig med eller større end {1}", + numericMax: "'{0}' skal være lig med eller mindre end {1}", + invalidEmail: "Angiv venligst en gyldig e-mail adresse.", + exceedMaxSize: "Filstørrelsen må ikke overstige {0}.", + otherRequiredError: "Angiv en værdi for dit valgfrie svar." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["da"] = danishSurveyStrings; + + +/***/ }), +/* 47 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export dutchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var dutchSurveyStrings = { + pagePrevText: "Vorige", + pageNextText: "Volgende", + completeText: "Afsluiten", + otherItemText: "Andere", + progressText: "Pagina {0} van {1}", + emptySurvey: "Er is geen zichtbare pagina of vraag in deze vragenlijst", + completingSurvey: "Bedankt om deze vragenlijst in te vullen", + loadingSurvey: "De vragenlijst is aan het laden...", + optionsCaption: "Kies...", + requiredError: "Gelieve een antwoord in te vullen", + numericError: "Het antwoord moet een getal zijn", + textMinLength: "Gelieve minsten {0} karakters in te vullen.", + minSelectError: "Gelieve minimum {0} antwoorden te selecteren.", + maxSelectError: "Gelieve niet meer dan {0} antwoorden te selecteren.", + numericMinMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}", + numericMin: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + numericMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + invalidEmail: "Gelieve een geldig e-mailadres in te vullen.", + exceedMaxSize: "De grootte van het bestand mag niet groter zijn dan {0}.", + otherRequiredError: "Gelieve het veld 'Andere' in te vullen" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["nl"] = dutchSurveyStrings; + + +/***/ }), +/* 48 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export finnishSurveyStrings */ + +var finnishSurveyStrings = { + pagePrevText: "Edellinen", + pageNextText: "Seuraava", + completeText: "Valmis", + otherItemText: "Muu (kuvaile)", + progressText: "Sivu {0}/{1}", + emptySurvey: "Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.", + completingSurvey: "Kiitos kyselyyn vastaamisesta!", + loadingSurvey: "Kyselyä ladataan palvelimelta...", + optionsCaption: "Valitse...", + requiredError: "Vastaa kysymykseen, kiitos.", + numericError: "Arvon tulee olla numeerinen.", + textMinLength: "Ole hyvä ja syötä vähintään {0} merkkiä.", + minSelectError: "Ole hyvä ja valitse vähintään {0} vaihtoehtoa.", + maxSelectError: "Ole hyvä ja valitse enintään {0} vaihtoehtoa.", + numericMinMax: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}", + numericMin: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}", + numericMax: "'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}", + invalidEmail: "Syötä validi sähköpostiosoite.", + otherRequiredError: "Ole hyvä ja syötä \"Muu (kuvaile)\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fi"] = finnishSurveyStrings; + + +/***/ }), +/* 49 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export frenchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var frenchSurveyStrings = { + pagePrevText: "Pr\u00e9c\u00e9dent", + pageNextText: "Suivant", + completeText: "Terminer", + otherItemText: "Autre (pr\u00e9ciser)", + progressText: "Page {0} sur {1}", + emptySurvey: "Il n'y a ni page visible ni question visible dans ce questionnaire", + completingSurvey: "Merci d'avoir r\u00e9pondu au questionnaire!", + loadingSurvey: "Le questionnaire est en cours de chargement...", + optionsCaption: "Choisissez...", + requiredError: "La r\u00e9ponse \u00e0 cette question est obligatoire.", + requiredInAllRowsError: "Toutes les lignes sont obligatoires", + numericError: "La r\u00e9ponse doit \u00eatre un nombre.", + textMinLength: "Merci d'entrer au moins {0} symboles.", + minSelectError: "Merci de s\u00e9lectionner au moins {0}r\u00e9ponses.", + maxSelectError: "Merci de s\u00e9lectionner au plus {0}r\u00e9ponses.", + numericMinMax: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1} et inf\u00e9rieure ou\u00e9gale \u00e0 {2}", + numericMin: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1}", + numericMax: "Votre r\u00e9ponse '{0}' doit \u00eatreinf\u00e9rieure ou \u00e9gale \u00e0 {1}", + invalidEmail: "Merci d'entrer une adresse mail valide.", + exceedMaxSize: "La taille du fichier ne doit pas exc\u00e9der {0}.", + otherRequiredError: "Merci de pr\u00e9ciser le champ 'Autre'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fr"] = frenchSurveyStrings; + + +/***/ }), +/* 50 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export germanSurveyStrings */ + +var germanSurveyStrings = { + pagePrevText: "Zurück", + pageNextText: "Weiter", + completeText: "Fertig", + progressText: "Seite {0} von {1}", + emptySurvey: "Es gibt keine sichtbare Frage.", + completingSurvey: "Vielen Dank für das Ausfüllen des Fragebogens!", + loadingSurvey: "Der Fragebogen wird vom Server geladen...", + otherItemText: "Benutzerdefinierte Antwort...", + optionsCaption: "Wählen...", + requiredError: "Bitte antworten Sie auf die Frage.", + numericError: "Der Wert sollte eine Zahl sein.", + textMinLength: "Bitte geben Sie mindestens {0} Symbole.", + minSelectError: "Bitte wählen Sie mindestens {0} Varianten.", + maxSelectError: "Bitte wählen Sie nicht mehr als {0} Varianten.", + numericMinMax: "'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}", + numericMin: "'{0}' sollte gleich oder größer sein als {1}", + numericMax: "'{0}' sollte gleich oder kleiner als {1}", + invalidEmail: "Bitte geben Sie eine gültige Email-Adresse ein.", + exceedMaxSize: "Die Dateigröße soll nicht mehr als {0}.", + otherRequiredError: "Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["de"] = germanSurveyStrings; + + +/***/ }), +/* 51 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export greekSurveyStrings */ +//Created by https://github.com/agelospanagiotakis + +var greekSurveyStrings = { + pagePrevText: "Προηγούμενο", + pageNextText: "Επόμενο", + completeText: "Ολοκλήρωση", + otherItemText: "Άλλο (παρακαλώ διευκρινίστε)", + progressText: "Σελίδα {0} από {1}", + emptySurvey: "Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.", + completingSurvey: "Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!", + loadingSurvey: "Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...", + optionsCaption: "Επιλέξτε...", + requiredError: "Παρακαλώ απαντήστε στην ερώτηση.", + requiredInAllRowsError: "Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.", + numericError: "Η τιμή πρέπει να είναι αριθμιτική.", + textMinLength: "Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.", + minRowCountError: "Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.", + minSelectError: "Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.", + maxSelectError: "Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.", + numericMinMax: "Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}", + numericMin: "Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}", + numericMax: "Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}", + invalidEmail: "Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.", + urlRequestError: "Η αίτηση επέστρεψε σφάλμα '{0}'. {1}", + urlGetChoicesError: "Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη", + exceedMaxSize: "Το μέγεθος δεν μπορεί να υπερβένει τα {0}.", + otherRequiredError: "Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.", + uploadingFile: "Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.", + addRow: "Προσθήκη γραμμής", + removeRow: "Αφαίρεση" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["gr"] = greekSurveyStrings; + + +/***/ }), +/* 52 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export polishSurveyStrings */ + +var polishSurveyStrings = { + pagePrevText: "Wstecz", + pageNextText: "Dalej", + completeText: "Gotowe", + otherItemText: "Inna odpowiedź (wpisz)", + progressText: "Strona {0} z {1}", + emptySurvey: "Nie ma widocznych pytań.", + completingSurvey: "Dziękujemy za wypełnienie ankiety!", + loadingSurvey: "Trwa wczytywanie ankiety...", + optionsCaption: "Wybierz...", + requiredError: "Proszę odpowiedzieć na to pytanie.", + requiredInAllRowsError: "Proszę odpowiedzieć na wszystkie pytania.", + numericError: "W tym polu można wpisać tylko liczby.", + textMinLength: "Proszę wpisać co najmniej {0} znaków.", + textMaxLength: "Proszę wpisać mniej niż {0} znaków.", + textMinMaxLength: "Proszę wpisać więcej niż {0} i mniej niż {1} znaków.", + minRowCountError: "Proszę uzupełnić przynajmniej {0} wierszy.", + minSelectError: "Proszę wybrać co najmniej {0} pozycji.", + maxSelectError: "Proszę wybrać nie więcej niż {0} pozycji.", + numericMinMax: "Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}", + numericMin: "Odpowiedź '{0}' powinna być większa lub równa {1}", + numericMax: "Odpowiedź '{0}' powinna być mniejsza lub równa {1}", + invalidEmail: "Proszę podać prawidłowy adres email.", + urlRequestError: "Żądanie zwróciło błąd '{0}'. {1}", + urlGetChoicesError: "Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa", + exceedMaxSize: "Rozmiar przesłanego pliku nie może przekraczać {0}.", + otherRequiredError: "Proszę podać inną odpowiedź.", + uploadingFile: "Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.", + addRow: "Dodaj wiersz", + removeRow: "Usuń" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["pl"] = polishSurveyStrings; + + +/***/ }), +/* 53 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export romanianSurveyStrings */ + +var romanianSurveyStrings = { + pagePrevText: "Precedent", + pageNextText: "Următor", + completeText: "Finalizare", + otherItemText: "Altul(precizaţi)", + progressText: "Pagina {0} din {1}", + emptySurvey: "Nu sunt întrebări pentru acest chestionar", + completingSurvey: "Vă mulţumim pentru timpul acordat!", + loadingSurvey: "Chestionarul se încarcă...", + optionsCaption: "Alegeţi...", + requiredError: "Răspunsul la această întrebare este obligatoriu.", + requiredInAllRowsError: "Toate răspunsurile sunt obligatorii", + numericError: "Răspunsul trebuie să fie numeric.", + textMinLength: "Trebuie să introduci minim {0} caractere.", + minSelectError: "Trebuie să selectezi minim {0} opţiuni.", + maxSelectError: "Trebuie să selectezi maxim {0} opţiuni.", + numericMinMax: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}", + numericMin: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}", + numericMax: "Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}", + invalidEmail: "Trebuie să introduceţi o adresa de email validă.", + exceedMaxSize: "Dimensiunea fişierului nu trebuie să depăşească {0}.", + otherRequiredError: "Trebuie să completezi câmpul 'Altul'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ro"] = romanianSurveyStrings; + + +/***/ }), +/* 54 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export russianSurveyStrings */ + +var russianSurveyStrings = { + pagePrevText: "Назад", + pageNextText: "Далее", + completeText: "Готово", + progressText: "Страница {0} из {1}", + emptySurvey: "Нет ни одного вопроса.", + completingSurvey: "Благодарим Вас за заполнение анкеты!", + loadingSurvey: "Загрузка с сервера...", + otherItemText: "Другое (пожалуйста, опишите)", + optionsCaption: "Выбрать...", + requiredError: "Пожалуйста, ответьте на вопрос.", + numericError: "Ответ должен быть числом.", + textMinLength: "Пожалуйста, введите хотя бы {0} символов.", + minSelectError: "Пожалуйста, выберите хотя бы {0} вариантов.", + maxSelectError: "Пожалуйста, выберите не более {0} вариантов.", + numericMinMax: "'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}", + numericMin: "'{0}' должно быть равным или больше, чем {1}", + numericMax: "'{0}' должно быть равным или меньше, чем {1}", + invalidEmail: "Пожалуйста, введите действительный адрес электронной почты.", + otherRequiredError: "Пожалуйста, введите данные в поле \"Другое\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ru"] = russianSurveyStrings; + + +/***/ }), +/* 55 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export swedishSurveyStrings */ +//Create by Mattias Asplund + +var swedishSurveyStrings = { + pagePrevText: "Föregående", + pageNextText: "Nästa", + completeText: "Färdig", + otherItemText: "Annat (beskriv)", + progressText: "Sida {0} av {1}", + emptySurvey: "Det finns ingen synlig sida eller fråga i enkäten.", + completingSurvey: "Tack för att du genomfört enkäten!!", + loadingSurvey: "Enkäten laddas...", + optionsCaption: "Välj...", + requiredError: "Var vänlig besvara frågan.", + requiredInAllRowsError: "Var vänlig besvara frågorna på alla rader.", + numericError: "Värdet ska vara numeriskt.", + textMinLength: "Var vänlig ange minst {0} tecken.", + minRowCountError: "Var vänlig fyll i minst {0} rader.", + minSelectError: "Var vänlig välj åtminstone {0} varianter.", + maxSelectError: "Var vänlig välj inte fler än {0} varianter.", + numericMinMax: "'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}", + numericMin: "'{0}' ska vara lika med eller mer än {1}", + numericMax: "'{0}' ska vara lika med eller mindre än {1}", + invalidEmail: "Var vänlig ange en korrekt e-postadress.", + urlRequestError: "Förfrågan returnerade felet '{0}'. {1}", + urlGetChoicesError: "Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt", + exceedMaxSize: "Filstorleken får ej överstiga {0}.", + otherRequiredError: "Var vänlig ange det andra värdet.", + uploadingFile: "Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.", + addRow: "Lägg till rad", + removeRow: "Ta bort" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["sv"] = swedishSurveyStrings; + + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export turkishSurveyStrings */ + +var turkishSurveyStrings = { + pagePrevText: "Geri", + pageNextText: "İleri", + completeText: "Anketi Tamamla", + otherItemText: "Diğer (açıklayınız)", + progressText: "Sayfa {0} / {1}", + emptySurvey: "Ankette görüntülenecek sayfa ya da soru mevcut değil.", + completingSurvey: "Anketimizi tamamladığınız için teşekkür ederiz.", + loadingSurvey: "Anket sunucudan yükleniyor ...", + optionsCaption: "Seçiniz ...", + requiredError: "Lütfen soruya cevap veriniz", + numericError: "Girilen değer numerik olmalıdır", + textMinLength: "En az {0} sembol giriniz.", + minRowCountError: "Lütfen en az {0} satırı doldurun.", + minSelectError: "Lütfen en az {0} seçeneği seçiniz.", + maxSelectError: "Lütfen {0} adetten fazla seçmeyiniz.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "'{0}' değeri {1} değerine eşit veya büyük olmalıdır", + numericMax: "'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.", + invalidEmail: "Lütfen geçerli bir eposta adresi giriniz.", + urlRequestError: "Talebi şu hatayı döndü '{0}'. {1}", + urlGetChoicesError: "Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.", + exceedMaxSize: "Dosya boyutu {0} değerini geçemez.", + otherRequiredError: "Lütfen diğer değerleri giriniz.", + uploadingFile: "Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.", + addRow: "Satır Ekle", + removeRow: "Kaldır" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["tr"] = turkishSurveyStrings; + + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxModel; }); + + + + +var QuestionCheckboxModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxModel, _super); + function QuestionCheckboxModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionCheckboxModel.prototype.getHasOther = function (val) { + if (!val || !Array.isArray(val)) + return false; + return val.indexOf(this.otherItem.value) >= 0; + }; + QuestionCheckboxModel.prototype.valueFromDataCore = function (val) { + if (!val || !Array.isArray(val)) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) + return val; + if (this.hasUnknownValue(val[i])) { + this.comment = val[i]; + var newVal = val.slice(); + newVal[i] = this.otherItem.value; + return newVal; + } + } + return val; + }; + QuestionCheckboxModel.prototype.valueToDataCore = function (val) { + if (!val || !val.length) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) { + if (this.getComment()) { + var newVal = val.slice(); + newVal[i] = this.getComment(); + return newVal; + } + } + } + return val; + }; + QuestionCheckboxModel.prototype.getType = function () { + return "checkbox"; + }; + return QuestionCheckboxModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkbox", [], function () { return new QuestionCheckboxModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("checkbox", function (name) { var q = new QuestionCheckboxModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCommentModel; }); + + + + + +var QuestionCommentModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCommentModel, _super); + function QuestionCommentModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rows = 4; + _this.cols = 50; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionCommentModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionCommentModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionCommentModel.prototype.getType = function () { + return "comment"; + }; + QuestionCommentModel.prototype.isEmpty = function () { + return _super.prototype.isEmpty.call(this) || this.value == ""; + }; + return QuestionCommentModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("comment", [{ name: "cols:number", default: 50 }, { name: "rows:number", default: 4 }, + { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionCommentModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("comment", function (name) { return new QuestionCommentModel(name); }); + + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionDropdownModel; }); + + + + + + +var QuestionDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionDropdownModel, _super); + function QuestionDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionDropdownModel.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionDropdownModel.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionDropdownModel.prototype.getType = function () { + return "dropdown"; + }; + QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["b" /* QuestionSelectBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("dropdown", [{ name: "optionsCaption", serializationProperty: "locOptionsCaption" }], function () { return new QuestionDropdownModel(""); }, "selectbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("dropdown", function (name) { var q = new QuestionDropdownModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFileModel; }); + + + + + + +var QuestionFileModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFileModel, _super); + function QuestionFileModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.showPreviewValue = false; + _this.isUploading = false; + return _this; + } + QuestionFileModel.prototype.getType = function () { + return "file"; + }; + Object.defineProperty(QuestionFileModel.prototype, "showPreview", { + get: function () { return this.showPreviewValue; }, + set: function (value) { this.showPreviewValue = value; }, + enumerable: true, + configurable: true + }); + QuestionFileModel.prototype.loadFile = function (file) { + var self = this; + if (this.survey && !this.survey.uploadFile(this.name, file, this.storeDataAsText, function (status) { self.isUploading = status == "uploading"; })) + return; + this.setFileValue(file); + }; + QuestionFileModel.prototype.setFileValue = function (file) { + if (!FileReader) + return; + if (!this.showPreview && !this.storeDataAsText) + return; + if (this.checkFileForErrors(file)) + return; + var fileReader = new FileReader(); + var self = this; + fileReader.onload = function (e) { + if (self.showPreview) { + self.previewValue = self.isFileImage(file) ? fileReader.result : null; + self.fireCallback(self.previewValueLoadedCallback); + } + if (self.storeDataAsText) { + self.value = fileReader.result; + } + }; + fileReader.readAsDataURL(file); + }; + QuestionFileModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.isUploading) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("uploadingFile"))); + } + }; + QuestionFileModel.prototype.checkFileForErrors = function (file) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + if (this.maxSize > 0 && file.size > this.maxSize) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["d" /* ExceedSizeError */](this.maxSize)); + } + if (errorLength != this.errors.length || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + return this.errors.length > 0; + }; + QuestionFileModel.prototype.isFileImage = function (file) { + if (!file || !file.type) + return; + var str = file.type.toLowerCase(); + return str.indexOf("image") == 0; + }; + return QuestionFileModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("file", ["showPreview:boolean", "imageHeight", "imageWidth", "storeDataAsText:boolean", "maxSize:number"], function () { return new QuestionFileModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("file", function (name) { return new QuestionFileModel(name); }); + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionbase__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionHtmlModel; }); + + + + + +var QuestionHtmlModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionHtmlModel, _super); + function QuestionHtmlModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locHtmlValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionHtmlModel.prototype.getType = function () { + return "html"; + }; + Object.defineProperty(QuestionHtmlModel.prototype, "html", { + get: function () { return this.locHtml.text; }, + set: function (value) { this.locHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "locHtml", { + get: function () { return this.locHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "processedHtml", { + get: function () { return this.survey ? this.survey.processHtml(this.html) : this.html; }, + enumerable: true, + configurable: true + }); + return QuestionHtmlModel; +}(__WEBPACK_IMPORTED_MODULE_1__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("html", [{ name: "html:html", serializationProperty: "locHtml" }], function () { return new QuestionHtmlModel(""); }, "questionbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("html", function (name) { return new QuestionHtmlModel(name); }); + + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionfactory__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixModel; }); + + + + + + + + +var MatrixRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixRowModel, _super); + function MatrixRowModel(name, text, fullName, data, value) { + var _this = _super.call(this) || this; + _this.name = name; + _this.text = text; + _this.fullName = fullName; + _this.data = data; + _this.rowValue = value; + return _this; + } + Object.defineProperty(MatrixRowModel.prototype, "value", { + get: function () { return this.rowValue; }, + set: function (newValue) { + this.rowValue = newValue; + if (this.data) + this.data.onMatrixRowChanged(this); + this.onValueChanged(); + }, + enumerable: true, + configurable: true + }); + MatrixRowModel.prototype.onValueChanged = function () { + }; + return MatrixRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +var QuestionMatrixModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixModel, _super); + function QuestionMatrixModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRowChanging = false; + _this.isAllRowRequired = false; + _this.columnsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixModel.prototype.getType = function () { + return "matrix"; + }; + Object.defineProperty(QuestionMatrixModel.prototype, "hasRows", { + get: function () { + return this.rowsValue.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.columnsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "visibleRows", { + get: function () { + var result = new Array(); + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, this.name + '_' + this.rows[i].value.toString(), val[this.rows[i].value])); + } + if (result.length == 0) { + result.push(this.createMatrixRow(null, "", this.name, val)); + } + this.generatedVisibleRows = result; + return result; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () { return this.hasValuesInAllRows(); }; + QuestionMatrixModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("requiredInAllRowsError"))); + } + }; + QuestionMatrixModel.prototype.hasErrorInRows = function () { + if (!this.isAllRowRequired) + return false; + return !this.hasValuesInAllRows(); + }; + QuestionMatrixModel.prototype.hasValuesInAllRows = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var val = rows[i].value; + if (!val) + return false; + } + return true; + }; + QuestionMatrixModel.prototype.createMatrixRow = function (name, text, fullName, value) { + return new MatrixRowModel(name, text, fullName, this, value); + }; + QuestionMatrixModel.prototype.onValueChanged = function () { + if (this.isRowChanging || !(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.value; + if (!val) + val = {}; + if (this.rows.length == 0) { + this.generatedVisibleRows[0].value = val; + } + else { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + var rowVal = val[row.name] ? val[row.name] : null; + this.generatedVisibleRows[i].value = rowVal; + } + } + this.isRowChanging = false; + }; + //IMatrixData + QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) { + if (this.isRowChanging) + return; + this.isRowChanging = true; + if (!this.hasRows) { + this.setNewValue(row.value); + } + else { + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[row.name] = row.value; + this.setNewValue(newValue); + } + this.isRowChanging = false; + }; + return QuestionMatrixModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("matrix", [{ name: "columns:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.columns); }, onSetValue: function (obj, value) { obj.columns = value; } }, + { name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }, + "isAllRowRequired:boolean"], function () { return new QuestionMatrixModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrix", function (name) { var q = new QuestionMatrixModel(name); q.rows = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultRows; q.columns = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultColums; return q; }); + + +/***/ }), +/* 63 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDropdownModel; }); + + + + + +var MatrixDropdownRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownRowModel, _super); + function MatrixDropdownRowModel(name, text, data, value) { + var _this = _super.call(this, data, value) || this; + _this.name = name; + _this.text = text; + return _this; + } + Object.defineProperty(MatrixDropdownRowModel.prototype, "rowName", { + get: function () { return this.name; }, + enumerable: true, + configurable: true + }); + return MatrixDropdownRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModel, _super); + function QuestionMatrixDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixDropdownModel.prototype.getType = function () { + return "matrixdropdown"; + }; + Object.defineProperty(QuestionMatrixDropdownModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModel.prototype.generateRows = function () { + var result = new Array(); + if (!this.rows || this.rows.length === 0) + return result; + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, val[this.rows[i].value])); + } + return result; + }; + QuestionMatrixDropdownModel.prototype.createMatrixRow = function (name, text, value) { + return new MatrixDropdownRowModel(name, text, this, value); + }; + return QuestionMatrixDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdown", [{ name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }], function () { return new QuestionMatrixDropdownModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdropdown", function (name) { var q = new QuestionMatrixDropdownModel(name); q.choices = [1, 2, 3, 4, 5]; q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultColums; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 64 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDynamicRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDynamicModel; }); + + + + + + + +var MatrixDynamicRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDynamicRowModel, _super); + function MatrixDynamicRowModel(index, data, value) { + var _this = _super.call(this, data, value) || this; + _this.index = index; + return _this; + } + Object.defineProperty(MatrixDynamicRowModel.prototype, "rowName", { + get: function () { return "row" + this.index; }, + enumerable: true, + configurable: true + }); + return MatrixDynamicRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDynamicModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamicModel, _super); + function QuestionMatrixDynamicModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowCounter = 0; + _this.rowCountValue = 2; + _this.minRowCount = 0; + _this.locAddRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + _this.locRemoveRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionMatrixDynamicModel.prototype.getType = function () { + return "matrixdynamic"; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "rowCount", { + get: function () { return this.rowCountValue; }, + set: function (val) { + if (val < 0 || val > QuestionMatrixDynamicModel.MaxRowCount) + return; + this.rowCountValue = val; + if (this.value && this.value.length > val) { + var qVal = this.value; + qVal.splice(val); + this.value = qVal; + } + this.fireCallback(this.rowCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.addRow = function () { + if (this.generatedVisibleRows) { + this.generatedVisibleRows.push(this.createMatrixRow(null)); + } + this.rowCount++; + }; + QuestionMatrixDynamicModel.prototype.removeRow = function (index) { + if (index < 0 || index >= this.rowCount) + return; + if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) { + this.generatedVisibleRows.splice(index, 1); + } + if (this.value) { + var val = this.createNewValue(this.value); + val.splice(index, 1); + val = this.deleteRowValue(val, null); + this.value = val; + } + this.rowCount--; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "addRowText", { + get: function () { return this.locAddRowText.text ? this.locAddRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("addRow"); }, + set: function (value) { this.locAddRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locAddRowText", { + get: function () { return this.locAddRowTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "removeRowText", { + get: function () { return this.locRemoveRowText.text ? this.locRemoveRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("removeRow"); }, + set: function (value) { this.locRemoveRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locRemoveRowText", { + get: function () { return this.locRemoveRowTextValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () { return false; }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "cachedVisibleRows", { + get: function () { + if (this.generatedVisibleRows && this.generatedVisibleRows.length == this.rowCount) + return this.generatedVisibleRows; + return this.visibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("minRowCountError")["format"](this.minRowCount))); + } + }; + QuestionMatrixDynamicModel.prototype.hasErrorInRows = function () { + if (this.minRowCount <= 0 || !this.generatedVisibleRows) + return false; + var res = false; + var setRowCount = 0; + for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) { + var row = this.generatedVisibleRows[rowIndex]; + if (!row.isEmpty) + setRowCount++; + } + return setRowCount < this.minRowCount; + }; + QuestionMatrixDynamicModel.prototype.generateRows = function () { + var result = new Array(); + if (this.rowCount === 0) + return result; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.rowCount; i++) { + result.push(this.createMatrixRow(this.getRowValueByIndex(val, i))); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) { + return new MatrixDynamicRowModel(this.rowCounter++, this, value); + }; + QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) { + var newRowCount = val && Array.isArray(val) ? val.length : 0; + if (newRowCount <= this.rowCount) + return; + this.rowCountValue = newRowCount; + if (this.generatedVisibleRows) { + this.generatedVisibleRows = this.visibleRows; + } + }; + QuestionMatrixDynamicModel.prototype.createNewValue = function (curValue) { + var result = curValue; + if (!result) + result = []; + var r = []; + if (result.length > this.rowCount) + result.splice(this.rowCount - 1); + for (var i = result.length; i < this.rowCount; i++) { + result.push({}); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) { + var isEmpty = true; + for (var i = 0; i < newValue.length; i++) { + if (Object.keys(newValue[i]).length > 0) { + isEmpty = false; + break; + } + } + return isEmpty ? null : newValue; + }; + QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) { + return index >= 0 && index < questionValue.length ? questionValue[index] : null; + }; + QuestionMatrixDynamicModel.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + return this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row)); + }; + return QuestionMatrixDynamicModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +QuestionMatrixDynamicModel.MaxRowCount = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdynamic", [{ name: "rowCount:number", default: 2 }, { name: "minRowCount:number", default: 0 }, + { name: "addRowText", serializationProperty: "locAddRowText" }, { name: "removeRowText", serializationProperty: "locRemoveRowText" }], function () { return new QuestionMatrixDynamicModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdynamic", function (name) { var q = new QuestionMatrixDynamicModel(name); q.choices = [1, 2, 3, 4, 5]; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 65 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__validator__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MultipleTextItemModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMultipleTextModel; }); + + + + + + + + +var MultipleTextItemModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleTextItemModel, _super); + function MultipleTextItemModel(name, title) { + if (name === void 0) { name = null; } + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.validators = new Array(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.title = title; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + MultipleTextItemModel.prototype.getType = function () { + return "multipletextitem"; + }; + MultipleTextItemModel.prototype.setData = function (data) { + this.data = data; + }; + Object.defineProperty(MultipleTextItemModel.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "fullTitle", { + get: function () { + var res = this.title; + if (this.isRequired && this.data) + res = this.data.getIsRequiredText() + ' ' + res; + return res; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "value", { + get: function () { + return this.data ? this.data.getMultipleTextValue(this.name) : null; + }, + set: function (value) { + if (this.data != null) { + this.data.setMultipleTextValue(this.name, value); + } + }, + enumerable: true, + configurable: true + }); + MultipleTextItemModel.prototype.onValueChanged = function (newValue) { + }; + //IValidatorOwner + MultipleTextItemModel.prototype.getValidatorTitle = function () { return this.title; }; + //ILocalizableOwner + MultipleTextItemModel.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + return MultipleTextItemModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +var QuestionMultipleTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleTextModel, _super); + function QuestionMultipleTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + _this.itemSize = 25; + _this.itemsValues = new Array(); + _this.isMultipleItemValueChanging = false; + _this.setItemsOverriddenMethods(); + return _this; + } + QuestionMultipleTextModel.prototype.getType = function () { + return "multipletext"; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "items", { + get: function () { return this.itemsValues; }, + set: function (value) { + this.itemsValues = value; + this.setItemsOverriddenMethods(); + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.addItem = function (name, title) { + if (title === void 0) { title = null; } + var item = this.createTextItem(name, title); + this.items.push(item); + return item; + }; + QuestionMultipleTextModel.prototype.setItemsOverriddenMethods = function () { + var self = this; + this.itemsValues.push = function (value) { + value.setData(self); + var result = Array.prototype.push.call(this, value); + self.fireCallback(self.colCountChangedCallback); + return result; + }; + this.itemsValues.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var result = (_a = Array.prototype.splice).call.apply(_a, [self.itemsValues, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].setData(self); + } + self.fireCallback(self.colCountChangedCallback); + return result; + var _a; + }; + }; + QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () { + for (var i = 0; i < this.items.length; i++) { + if (!this.items[i].value) + return false; + } + return true; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 1 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.getRows = function () { + var colCount = this.colCount; + var items = this.items; + var rows = []; + var index = 0; + for (var i = 0; i < items.length; i++) { + if (index == 0) { + rows.push([]); + } + rows[rows.length - 1].push(items[i]); + index++; + if (index >= colCount) { + index = 0; + } + } + return rows; + }; + QuestionMultipleTextModel.prototype.onValueChanged = function () { + _super.prototype.onValueChanged.call(this); + this.onItemValueChanged(); + }; + QuestionMultipleTextModel.prototype.createTextItem = function (name, title) { + return new MultipleTextItemModel(name, title); + }; + QuestionMultipleTextModel.prototype.onItemValueChanged = function () { + if (this.isMultipleItemValueChanging) + return; + for (var i = 0; i < this.items.length; i++) { + var itemValue = null; + if (this.value && (this.items[i].name in this.value)) { + itemValue = this.value[this.items[i].name]; + } + this.items[i].onValueChanged(itemValue); + } + }; + QuestionMultipleTextModel.prototype.runValidators = function () { + var error = _super.prototype.runValidators.call(this); + if (error != null) + return error; + for (var i = 0; i < this.items.length; i++) { + error = new __WEBPACK_IMPORTED_MODULE_2__validator__["a" /* ValidatorRunner */]().run(this.items[i]); + if (error != null) + return error; + } + return null; + }; + QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var res = _super.prototype.hasErrors.call(this, fireCallback); + if (!res) + res = this.hasErrorInItems(fireCallback); + return res; + }; + QuestionMultipleTextModel.prototype.hasErrorInItems = function (fireCallback) { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.isRequired && !item.value) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["b" /* AnswerRequiredError */]()); + if (fireCallback) { + this.fireCallback(this.errorsChangedCallback); + } + return true; + } + } + return false; + }; + //IMultipleTextData + QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) { + if (!this.value) + return null; + return this.value[name]; + }; + QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) { + this.isMultipleItemValueChanging = true; + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[name] = value; + this.setNewValue(newValue); + this.isMultipleItemValueChanging = false; + }; + QuestionMultipleTextModel.prototype.getIsRequiredText = function () { + return this.survey ? this.survey.requiredText : ""; + }; + return QuestionMultipleTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletextitem", ["name", "isRequired:boolean", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "title", serializationProperty: "locTitle" }, { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], function () { return new MultipleTextItemModel(""); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletext", [{ name: "!items:textitems", className: "multipletextitem" }, + { name: "itemSize:number", default: 25 }, { name: "colCount:number", default: 1, choices: [1, 2, 3, 4] }], function () { return new QuestionMultipleTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("multipletext", function (name) { var q = new QuestionMultipleTextModel(name); q.addItem("text1"); q.addItem("text2"); return q; }); + + +/***/ }), +/* 66 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRadiogroupModel; }); + + + + +var QuestionRadiogroupModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRadiogroupModel, _super); + function QuestionRadiogroupModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionRadiogroupModel.prototype.getType = function () { + return "radiogroup"; + }; + QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionRadiogroupModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("radiogroup", [], function () { return new QuestionRadiogroupModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("radiogroup", function (name) { var q = new QuestionRadiogroupModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 67 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRatingModel; }); + + + + + + +var QuestionRatingModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRatingModel, _super); + function QuestionRatingModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rates = __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locMinRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + _this.locMaxRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionRatingModel.prototype, "rateValues", { + get: function () { return this.rates; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(this.rates, newValue); + this.fireCallback(this.rateValuesChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "visibleRateValues", { + get: function () { + if (this.rateValues.length > 0) + return this.rateValues; + return QuestionRatingModel.defaultRateValues; + }, + enumerable: true, + configurable: true + }); + QuestionRatingModel.prototype.getType = function () { + return "rating"; + }; + QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + QuestionRatingModel.prototype.supportComment = function () { return true; }; + QuestionRatingModel.prototype.supportOther = function () { return true; }; + Object.defineProperty(QuestionRatingModel.prototype, "minRateDescription", { + get: function () { return this.locMinRateDescription.text; }, + set: function (value) { this.locMinRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMinRateDescription", { + get: function () { return this.locMinRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + Object.defineProperty(QuestionRatingModel.prototype, "maxRateDescription", { + get: function () { return this.locMaxRateDescription.text; }, + set: function (value) { this.locMaxRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMaxRateDescription", { + get: function () { return this.locMaxRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + return QuestionRatingModel; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +QuestionRatingModel.defaultRateValues = []; +__WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(QuestionRatingModel.defaultRateValues, [1, 2, 3, 4, 5]); +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("rating", ["hasComment:boolean", { name: "rateValues:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].getData(obj.rateValues); }, onSetValue: function (obj, value) { obj.rateValues = value; } }, + { name: "minRateDescription", alternativeName: "mininumRateDescription", serializationProperty: "locMinRateDescription" }, + { name: "maxRateDescription", alternativeName: "maximumRateDescription", serializationProperty: "locMaxRateDescription" }], function () { return new QuestionRatingModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("rating", function (name) { return new QuestionRatingModel(name); }); + + +/***/ }), +/* 68 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionTextModel; }); + + + + + +var QuestionTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionTextModel, _super); + function QuestionTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.size = 25; + _this.inputType = "text"; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionTextModel.prototype.getType = function () { + return "text"; + }; + QuestionTextModel.prototype.isEmpty = function () { return _super.prototype.isEmpty.call(this) || this.value == ""; }; + QuestionTextModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + Object.defineProperty(QuestionTextModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionTextModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionTextModel.prototype.setNewValue = function (newValue) { + newValue = this.correctValueType(newValue); + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionTextModel.prototype.correctValueType = function (newValue) { + if (!newValue) + return newValue; + if (this.inputType == "number" || this.inputType == "range") { + return this.isNumber(newValue) ? parseFloat(newValue) : ""; + } + return newValue; + }; + QuestionTextModel.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return QuestionTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("text", [{ name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }, + { name: "size:number", default: 25 }, { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_1__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("text", function (name) { return new QuestionTextModel(name); }); + + +/***/ }), +/* 69 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionCheckbox; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionCheckboxItem; }); + + + + + +var SurveyQuestionCheckbox = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCheckbox, _super); + function SurveyQuestionCheckbox(props) { + var _this = _super.call(this, props) || this; + _this.state = { choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + return _this; + } + Object.defineProperty(SurveyQuestionCheckbox.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckbox.prototype.render = function () { + if (!this.question) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, this.getItems())); + }; + SurveyQuestionCheckbox.prototype.getItems = function () { + var items = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + items.push(this.renderItem(key, item, i == 0)); + } + return items; + }; + Object.defineProperty(SurveyQuestionCheckbox.prototype, "textStyle", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckbox.prototype.renderItem = function (key, item, isFirst) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionCheckboxItem, { key: key, question: this.question, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, item: item, textStyle: this.textStyle, isFirst: isFirst }); + }; + return SurveyQuestionCheckbox; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +var SurveyQuestionCheckboxItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCheckboxItem, _super); + function SurveyQuestionCheckboxItem(props) { + var _this = _super.call(this, props) || this; + _this.item = props.item; + _this.question = props.question; + _this.textStyle = props.textStyle; + _this.isFirst = props.isFirst; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + SurveyQuestionCheckboxItem.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.item = nextProps.item; + this.textStyle = nextProps.textStyle; + this.question = nextProps.question; + this.isFirst = nextProps.isFirst; + }; + SurveyQuestionCheckboxItem.prototype.handleOnChange = function (event) { + var newValue = this.question.value; + if (!newValue) { + newValue = []; + } + var index = newValue.indexOf(this.item.value); + if (event.target.checked) { + if (index < 0) { + newValue.push(this.item.value); + } + } + else { + if (index > -1) { + newValue.splice(index, 1); + } + } + this.question.value = newValue; + this.setState({ value: this.question.value }); + }; + SurveyQuestionCheckboxItem.prototype.render = function () { + if (!this.item || !this.question) + return null; + var itemWidth = this.question.colCount > 0 ? (100 / this.question.colCount) + "%" : ""; + var marginRight = this.question.colCount == 0 ? "5px" : "0px"; + var divStyle = { marginRight: marginRight }; + if (itemWidth) { + divStyle["width"] = itemWidth; + } + var isChecked = (this.question.value && this.question.value.indexOf(this.item.value) > -1) || false; + var otherItem = (this.item.value === this.question.otherItem.value && isChecked) ? this.renderOther() : null; + return this.renderCheckbox(isChecked, divStyle, otherItem); + }; + Object.defineProperty(SurveyQuestionCheckboxItem.prototype, "inputStyle", { + get: function () { return { marginRight: "3px" }; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckboxItem.prototype.renderCheckbox = function (isChecked, divStyle, otherItem) { + var id = this.isFirst ? this.question.inputId : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.item, style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { className: this.css.item }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "checkbox", id: id, style: this.inputStyle, disabled: this.isDisplayMode, checked: isChecked, onChange: this.handleOnChange }), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.item.text)), + otherItem)); + }; + SurveyQuestionCheckboxItem.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionCheckboxItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("checkbox", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionCheckbox, props); +}); + + +/***/ }), +/* 70 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils__ = __webpack_require__(82); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionDropdown; }); + + + + + + +var SurveyQuestionDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionDropdown, _super); + function SurveyQuestionDropdown(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value, choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionDropdown.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionDropdown.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state.value = this.question.value; + }; + SurveyQuestionDropdown.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionDropdown.prototype.render = function () { + if (!this.question) + return null; + var comment = this.question.value === this.question.otherItem.value ? this.renderOther() : null; + var select = this.renderSelect(); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, + select, + comment)); + }; + SurveyQuestionDropdown.prototype.renderSelect = function () { + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css.control }, this.question.value)); + var options = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + var option = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("option", { key: key, value: item.value }, item.text); + options.push(option); + } + var onChange = null; + if (__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].msie || (__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].firefox && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils__["b" /* compareVersions */])(__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].version, '51') < 0)) { + onChange = this.handleOnChange; + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("select", { id: this.question.inputId, className: this.css.control, value: this.state.value, onChange: onChange, onInput: this.handleOnChange }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("option", { value: "" }, this.question.optionsCaption), + options)); + }; + SurveyQuestionDropdown.prototype.renderOther = function () { + var style = { marginTop: "3px" }; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: style }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode })); + }; + return SurveyQuestionDropdown; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("dropdown", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionDropdown, props); +}); + + +/***/ }), +/* 71 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionFile; }); + + + + +var SurveyQuestionFile = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionFile, _super); + function SurveyQuestionFile(props) { + var _this = _super.call(this, props) || this; + _this.state = { fileLoaded: 0 }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionFile.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionFile.prototype.handleOnChange = function (event) { + var src = event.target || event.srcElement; + if (!window["FileReader"]) + return; + if (!src || !src.files || src.files.length < 1) + return; + this.question.loadFile(src.files[0]); + this.setState({ fileLoaded: this.state.fileLoaded + 1 }); + }; + SurveyQuestionFile.prototype.render = function () { + if (!this.question) + return null; + var img = this.renderImage(); + var fileInput = null; + if (!this.isDisplayMode) { + fileInput = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.question.inputId, type: "file", onChange: this.handleOnChange }); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + fileInput, + img)); + }; + SurveyQuestionFile.prototype.renderImage = function () { + if (!this.question.previewValue) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + " ", + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("img", { src: this.question.previewValue, height: this.question.imageHeight, width: this.question.imageWidth }))); + }; + return SurveyQuestionFile; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("file", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionFile, props); +}); + + +/***/ }), +/* 72 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionHtml; }); + + + + +var SurveyQuestionHtml = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionHtml, _super); + function SurveyQuestionHtml(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionHtml.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionHtml.prototype.render = function () { + if (!this.question || !this.question.html) + return null; + var htmlValue = { __html: this.question.processedHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + return SurveyQuestionHtml; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("html", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionHtml, props); +}); + + +/***/ }), +/* 73 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrix; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixRow; }); + + + + +var SurveyQuestionMatrix = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrix, _super); + function SurveyQuestionMatrix(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMatrix.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrix.prototype.render = function () { + if (!this.question) + return null; + var firstTH = this.question.hasRows ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null) : null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key }, column.text)); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + var key = "row" + i; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixRow, { key: key, question: this.question, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, row: row, isFirst: i == 0 })); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + firstTH, + headers)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))); + }; + return SurveyQuestionMatrix; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixRow, _super); + function SurveyQuestionMatrixRow(props) { + var _this = _super.call(this, props) || this; + _this.question = props.question; + _this.row = props.row; + _this.isFirst = props.isFirst; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + SurveyQuestionMatrixRow.prototype.handleOnChange = function (event) { + this.row.value = event.target.value; + this.setState({ value: this.row.value }); + }; + SurveyQuestionMatrixRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.question = nextProps.question; + this.row = nextProps.row; + this.isFirst = nextProps.isFirst; + }; + SurveyQuestionMatrixRow.prototype.render = function () { + if (!this.row) + return null; + var firstTD = this.question.hasRows ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", null, this.row.text) : null; + var tds = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "value" + i; + var isChecked = this.row.value == column.value; + var inputId = this.isFirst && i == 0 ? this.question.inputId : null; + var td = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: key }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: inputId, type: "radio", name: this.row.fullName, value: column.value, disabled: this.isDisplayMode, checked: isChecked, onChange: this.handleOnChange })); + tds.push(td); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + firstTD, + tds)); + }; + return SurveyQuestionMatrixRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrix", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrix, props); +}); + + +/***/ }), +/* 74 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestion__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrixDropdown; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixDropdownRow; }); + + + + + +var SurveyQuestionMatrixDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDropdown, _super); + function SurveyQuestionMatrixDropdown(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMatrixDropdown.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrixDropdown.prototype.render = function () { + if (!this.question) + return null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + var minWidth = this.question.getColumnWidth(column); + var columnStyle = minWidth ? { minWidth: minWidth } : {}; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key, style: columnStyle }, this.question.getColumnTitle(column))); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDropdownRow, { row: row, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, creator: this.creator })); + } + var divStyle = this.question.horizontalScroll ? { overflowX: 'scroll' } : {}; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null), + headers)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows)))); + }; + return SurveyQuestionMatrixDropdown; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixDropdownRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDropdownRow, _super); + function SurveyQuestionMatrixDropdownRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyQuestionMatrixDropdownRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDropdownRow.prototype.setProperties = function (nextProps) { + this.row = nextProps.row; + this.creator = nextProps.creator; + }; + SurveyQuestionMatrixDropdownRow.prototype.render = function () { + if (!this.row) + return null; + var tds = []; + for (var i = 0; i < this.row.cells.length; i++) { + var cell = this.row.cells[i]; + var errors = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestion__["b" /* SurveyQuestionErrors */], { question: cell.question, css: this.rootCss, creator: this.creator }); + var select = this.renderSelect(cell); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + i }, + errors, + select)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", null, this.row.text), + tds)); + }; + SurveyQuestionMatrixDropdownRow.prototype.renderSelect = function (cell) { + return this.creator.createQuestionElement(cell.question); + }; + return SurveyQuestionMatrixDropdownRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrixdropdown", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDropdown, props); +}); + + +/***/ }), +/* 75 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestion__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrixDynamic; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixDynamicRow; }); + + + + + +var SurveyQuestionMatrixDynamic = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDynamic, _super); + function SurveyQuestionMatrixDynamic(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + Object.defineProperty(SurveyQuestionMatrixDynamic.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrixDynamic.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDynamic.prototype.setProperties = function (nextProps) { + var self = this; + this.state = { rowCounter: 0 }; + this.question.rowCountChangedCallback = function () { + self.state.rowCounter = self.state.rowCounter + 1; + self.setState(self.state); + }; + this.handleOnRowAddClick = this.handleOnRowAddClick.bind(this); + }; + SurveyQuestionMatrixDynamic.prototype.handleOnRowAddClick = function (event) { + this.question.addRow(); + }; + SurveyQuestionMatrixDynamic.prototype.render = function () { + if (!this.question) + return null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + var minWidth = this.question.getColumnWidth(column); + var columnStyle = minWidth ? { minWidth: minWidth } : {}; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key, style: columnStyle }, this.question.getColumnTitle(column))); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDynamicRow, { row: row, question: this.question, index: i, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, creator: this.creator })); + } + var divStyle = this.question.horizontalScroll ? { overflowX: 'scroll' } : {}; + var btnDeleteTD = !this.isDisplayMode ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null) : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + headers, + btnDeleteTD)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))), + this.renderAddRowButton())); + }; + SurveyQuestionMatrixDynamic.prototype.renderAddRowButton = function () { + if (this.isDisplayMode) + return null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: this.css.button, type: "button", onClick: this.handleOnRowAddClick, value: this.question.addRowText }); + }; + return SurveyQuestionMatrixDynamic; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixDynamicRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDynamicRow, _super); + function SurveyQuestionMatrixDynamicRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyQuestionMatrixDynamicRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDynamicRow.prototype.setProperties = function (nextProps) { + this.row = nextProps.row; + this.question = nextProps.question; + this.index = nextProps.index; + this.creator = nextProps.creator; + this.handleOnRowRemoveClick = this.handleOnRowRemoveClick.bind(this); + }; + SurveyQuestionMatrixDynamicRow.prototype.handleOnRowRemoveClick = function (event) { + this.question.removeRow(this.index); + }; + SurveyQuestionMatrixDynamicRow.prototype.render = function () { + if (!this.row) + return null; + var tds = []; + for (var i = 0; i < this.row.cells.length; i++) { + var cell = this.row.cells[i]; + var errors = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestion__["b" /* SurveyQuestionErrors */], { question: cell.question, css: this.rootCss, creator: this.creator }); + var select = this.renderQuestion(cell); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + i }, + errors, + select)); + } + if (!this.isDisplayMode) { + var removeButton = this.renderButton(); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + this.row.cells.length + 1 }, removeButton)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, tds)); + }; + SurveyQuestionMatrixDynamicRow.prototype.renderQuestion = function (cell) { + return this.creator.createQuestionElement(cell.question); + }; + SurveyQuestionMatrixDynamicRow.prototype.renderButton = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: this.css.button, type: "button", onClick: this.handleOnRowRemoveClick, value: this.question.removeRowText }); + }; + return SurveyQuestionMatrixDynamicRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrixdynamic", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDynamic, props); +}); + + +/***/ }), +/* 76 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMultipleText; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMultipleTextItem; }); + + + + +var SurveyQuestionMultipleText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMultipleText, _super); + function SurveyQuestionMultipleText(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMultipleText.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMultipleText.prototype.render = function () { + if (!this.question) + return null; + var tableRows = this.question.getRows(); + var rows = []; + for (var i = 0; i < tableRows.length; i++) { + rows.push(this.renderRow("item" + i, tableRows[i])); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))); + }; + SurveyQuestionMultipleText.prototype.renderRow = function (key, items) { + var tds = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "label" + i }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: this.css.itemTitle }, item.fullTitle))); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "value" + i }, this.renderItem(item, i == 0))); + } + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", { key: key }, tds); + }; + SurveyQuestionMultipleText.prototype.renderItem = function (item, isFirst) { + var inputId = isFirst ? this.question.inputId : null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMultipleTextItem, { item: item, css: this.css, isDisplayMode: this.isDisplayMode, inputId: inputId }); + }; + return SurveyQuestionMultipleText; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMultipleTextItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMultipleTextItem, _super); + function SurveyQuestionMultipleTextItem(props) { + var _this = _super.call(this, props) || this; + _this.item = props.item; + _this.inputId = props.inputId; + _this.state = { value: _this.item.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + SurveyQuestionMultipleTextItem.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionMultipleTextItem.prototype.handleOnBlur = function (event) { + this.item.value = event.target.value; + this.setState({ value: this.item.value }); + }; + SurveyQuestionMultipleTextItem.prototype.componentWillReceiveProps = function (nextProps) { + this.item = nextProps.item; + this.css = nextProps.css; + }; + SurveyQuestionMultipleTextItem.prototype.render = function () { + if (!this.item) + return null; + var style = { float: "left" }; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.inputId, className: this.css.itemValue, style: style }, this.item.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.inputId, className: this.css.itemValue, style: style, type: "text", value: this.state.value, placeholder: this.item.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange })); + }; + Object.defineProperty(SurveyQuestionMultipleTextItem.prototype, "mainClassName", { + get: function () { return ""; }, + enumerable: true, + configurable: true + }); + return SurveyQuestionMultipleTextItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("multipletext", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMultipleText, props); +}); + + +/***/ }), +/* 77 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionRadiogroup; }); + + + + + +var SurveyQuestionRadiogroup = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionRadiogroup, _super); + function SurveyQuestionRadiogroup(props) { + var _this = _super.call(this, props) || this; + _this.state = { choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionRadiogroup.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRadiogroup.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.handleOnChange = this.handleOnChange.bind(this); + }; + SurveyQuestionRadiogroup.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionRadiogroup.prototype.render = function () { + if (!this.question) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, this.getItems())); + }; + SurveyQuestionRadiogroup.prototype.getItems = function () { + var items = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + items.push(this.renderItem(key, item, i == 0)); + } + return items; + }; + Object.defineProperty(SurveyQuestionRadiogroup.prototype, "textStyle", { + get: function () { return { marginLeft: "3px" }; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRadiogroup.prototype.renderItem = function (key, item, isFirst) { + var itemWidth = this.question.colCount > 0 ? (100 / this.question.colCount) + "%" : ""; + var marginRight = this.question.colCount == 0 ? "5px" : "0px"; + var divStyle = { marginRight: marginRight }; + if (itemWidth) { + divStyle["width"] = itemWidth; + } + var isChecked = this.question.value == item.value; + var otherItem = (isChecked && item.value === this.question.otherItem.value) ? this.renderOther() : null; + return this.renderRadio(key, item, isChecked, divStyle, otherItem, isFirst); + }; + SurveyQuestionRadiogroup.prototype.renderRadio = function (key, item, isChecked, divStyle, otherItem, isFirst) { + var id = isFirst ? this.question.inputId : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { key: key, className: this.css.item, style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { className: this.css.label }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: id, type: "radio", name: this.question.name + "_" + this.questionBase.id, checked: isChecked, value: item.value, disabled: this.isDisplayMode, onChange: this.handleOnChange }), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { style: this.textStyle }, item.text)), + otherItem)); + }; + SurveyQuestionRadiogroup.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionRadiogroup; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("radiogroup", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionRadiogroup, props); +}); + + +/***/ }), +/* 78 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionRating; }); + + + + + +var SurveyQuestionRating = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionRating, _super); + function SurveyQuestionRating(props) { + var _this = _super.call(this, props) || this; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionRating.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRating.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionRating.prototype.render = function () { + if (!this.question) + return null; + var values = []; + var minText = this.question.minRateDescription ? this.question.minRateDescription + " " : ""; + var maxText = this.question.maxRateDescription ? " " + this.question.maxRateDescription : ""; + for (var i = 0; i < this.question.visibleRateValues.length; i++) { + var minTextValue = i == 0 ? minText : ""; + var maxTextValue = i == this.question.visibleRateValues.length - 1 ? maxText : ""; + values.push(this.renderItem("value" + i, this.question.visibleRateValues[i], minTextValue, maxTextValue)); + } + var comment = this.question.hasOther ? this.renderOther() : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, + values, + comment)); + }; + SurveyQuestionRating.prototype.renderItem = function (key, item, minText, maxText) { + var isChecked = this.question.value == item.value; + var className = this.css.item; + if (isChecked) + className += " active"; + var min = minText ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, minText) : null; + var max = maxText ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, maxText) : null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { key: key, className: className }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "radio", style: { display: "none" }, name: this.question.name, value: item.value, disabled: this.isDisplayMode, checked: this.question.value == item.value, onChange: this.handleOnChange }), + min, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, item.text), + max); + }; + SurveyQuestionRating.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionRating; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("rating", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionRating, props); +}); + + +/***/ }), +/* 79 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionText; }); + + + + +var SurveyQuestionText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionText, _super); + function SurveyQuestionText(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionText.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionText.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state = { value: this.question.value || '' }; + }; + SurveyQuestionText.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionText.prototype.handleOnBlur = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value || '' }); + }; + SurveyQuestionText.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css }, this.question.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.question.inputId, className: this.css, type: this.question.inputType, value: this.state.value, size: this.question.size, placeholder: this.question.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange })); + }; + return SurveyQuestionText; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("text", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionText, props); +}); + + +/***/ }), +/* 80 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(25); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindowModel; }); + + + +var SurveyWindowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindowModel, _super); + function SurveyWindowModel(jsonObj) { + var _this = _super.call(this) || this; + _this.surveyValue = _this.createSurvey(jsonObj); + _this.surveyValue.showTitle = false; + _this.windowElement = document.createElement("div"); + return _this; + } + SurveyWindowModel.prototype.getType = function () { return "window"; }; + Object.defineProperty(SurveyWindowModel.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isShowing", { + get: function () { return this.isShowingValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isExpanded", { + get: function () { return this.isExpandedValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "title", { + get: function () { return this.titleValue ? this.titleValue : this.survey.title; }, + set: function (value) { this.titleValue = value; }, + enumerable: true, + configurable: true + }); + SurveyWindowModel.prototype.expand = function () { + this.expandcollapse(true); + }; + SurveyWindowModel.prototype.collapse = function () { + this.expandcollapse(false); + }; + SurveyWindowModel.prototype.createSurvey = function (jsonObj) { + return new __WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */](jsonObj); + }; + SurveyWindowModel.prototype.expandcollapse = function (value) { + this.isExpandedValue = value; + }; + return SurveyWindowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +SurveyWindowModel.surveyElementName = "windowSurveyJS"; + + +/***/ }), +/* 81 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Trigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTrigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyTriggerVisible; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyTriggerComplete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyTriggerSetValue; }); + + + +var Trigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Trigger, _super); + function Trigger() { + var _this = _super.call(this) || this; + _this.opValue = "equal"; + return _this; + } + Object.defineProperty(Trigger, "operators", { + get: function () { + if (Trigger.operatorsValue != null) + return Trigger.operatorsValue; + Trigger.operatorsValue = { + empty: function (value, expectedValue) { return !value; }, + notempty: function (value, expectedValue) { return !(!value); }, + equal: function (value, expectedValue) { return value == expectedValue; }, + notequal: function (value, expectedValue) { return value != expectedValue; }, + contains: function (value, expectedValue) { return value && value["indexOf"] && value.indexOf(expectedValue) > -1; }, + notcontains: function (value, expectedValue) { return !value || !value["indexOf"] || value.indexOf(expectedValue) == -1; }, + greater: function (value, expectedValue) { return value > expectedValue; }, + less: function (value, expectedValue) { return value < expectedValue; }, + greaterorequal: function (value, expectedValue) { return value >= expectedValue; }, + lessorequal: function (value, expectedValue) { return value <= expectedValue; } + }; + return Trigger.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Trigger.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Trigger.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Trigger.prototype.check = function (value) { + if (Trigger.operators[this.operator](value, this.value)) { + this.onSuccess(); + } + else { + this.onFailure(); + } + }; + Trigger.prototype.onSuccess = function () { }; + Trigger.prototype.onFailure = function () { }; + return Trigger; +}(__WEBPACK_IMPORTED_MODULE_1__base__["c" /* Base */])); + +Trigger.operatorsValue = null; +var SurveyTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTrigger, _super); + function SurveyTrigger() { + var _this = _super.call(this) || this; + _this.owner = null; + return _this; + } + SurveyTrigger.prototype.setOwner = function (owner) { + this.owner = owner; + }; + Object.defineProperty(SurveyTrigger.prototype, "isOnNextPage", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + return SurveyTrigger; +}(Trigger)); + +var SurveyTriggerVisible = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerVisible, _super); + function SurveyTriggerVisible() { + var _this = _super.call(this) || this; + _this.pages = []; + _this.questions = []; + return _this; + } + SurveyTriggerVisible.prototype.getType = function () { return "visibletrigger"; }; + SurveyTriggerVisible.prototype.onSuccess = function () { this.onTrigger(this.onItemSuccess); }; + SurveyTriggerVisible.prototype.onFailure = function () { this.onTrigger(this.onItemFailure); }; + SurveyTriggerVisible.prototype.onTrigger = function (func) { + if (!this.owner) + return; + var objects = this.owner.getObjects(this.pages, this.questions); + for (var i = 0; i < objects.length; i++) { + func(objects[i]); + } + }; + SurveyTriggerVisible.prototype.onItemSuccess = function (item) { item.visible = true; }; + SurveyTriggerVisible.prototype.onItemFailure = function (item) { item.visible = false; }; + return SurveyTriggerVisible; +}(SurveyTrigger)); + +var SurveyTriggerComplete = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerComplete, _super); + function SurveyTriggerComplete() { + return _super.call(this) || this; + } + SurveyTriggerComplete.prototype.getType = function () { return "completetrigger"; }; + Object.defineProperty(SurveyTriggerComplete.prototype, "isOnNextPage", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + SurveyTriggerComplete.prototype.onSuccess = function () { if (this.owner) + this.owner.doComplete(); }; + return SurveyTriggerComplete; +}(SurveyTrigger)); + +var SurveyTriggerSetValue = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerSetValue, _super); + function SurveyTriggerSetValue() { + return _super.call(this) || this; + } + SurveyTriggerSetValue.prototype.getType = function () { return "setvaluetrigger"; }; + SurveyTriggerSetValue.prototype.onSuccess = function () { + if (!this.setToName || !this.owner) + return; + this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable); + }; + return SurveyTriggerSetValue; +}(SurveyTrigger)); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("trigger", ["operator", "!value"]); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("surveytrigger", ["!name"], null, "trigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("visibletrigger", ["pages", "questions"], function () { return new SurveyTriggerVisible(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("completetrigger", [], function () { return new SurveyTriggerComplete(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("setvaluetrigger", ["!setToName", "setValue", "isVariable:boolean"], function () { return new SurveyTriggerSetValue(); }, "surveytrigger"); + + +/***/ }), +/* 82 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return browser; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return compareVersions; }); +var webkitRegExp = /(webkit)[ \/]([\w.]+)/, ieRegExp = /(msie) (\d{1,2}\.\d)/, ie11RegExp = /(trident).*rv:(\d{1,2}\.\d)/, msEdge = /(edge)\/((\d+)?[\w\.]+)/, mozillaRegExp = /(mozilla)(?:.*? rv:([\w.]+))/; +var browserFromUA = function (ua) { + ua = ua.toLowerCase(); + var result = {}, matches = ieRegExp.exec(ua) || ie11RegExp.exec(ua) || msEdge.exec(ua) || ua.indexOf("compatible") < 0 && mozillaRegExp.exec(ua) || webkitRegExp.exec(ua) || [], browserName = matches[1], browserVersion = matches[2]; + if (browserName === "trident" || browserName === "edge") { + browserName = "msie"; + } + else if (browserName === "mozilla") { + browserName = "firefox"; + } + if (browserName) { + result[browserName] = true; + result.version = browserVersion; + } + return result; +}; +var browser = browserFromUA(navigator.userAgent); +function compareVersions(a, b) { + var i, diff; + var regExStrip0 = /(\.0+)+$/; + var segmentsA = a.replace(regExStrip0, '').split('.'); + var segmentsB = b.replace(regExStrip0, '').split('.'); + var l = Math.min(segmentsA.length, segmentsB.length); + for (i = 0; i < l; i++) { + diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10); + if (diff) { + return diff; + } + } + return segmentsA.length - segmentsB.length; +} + + + +/***/ }), +/* 83 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__react__ = __webpack_require__(37); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "defaultStandardCss", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "defaultBootstrapCss", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Survey", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["c"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["d"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["e"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigationBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["f"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigation", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["g"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyPage", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["h"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyRow", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["i"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestion", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["j"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionErrors", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["k"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyElementBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["l"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionElementBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["m"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCommentItem", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["n"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionComment", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["o"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckbox", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["p"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckboxItem", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionDropdown", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["r"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdown", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["s"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdownRow", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["t"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrix", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["u"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixRow", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["v"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionHtml", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["w"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionFile", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["x"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleText", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleTextItem", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRadiogroup", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["A"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionText", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["B"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamic", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["C"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamicRow", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["D"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyProgress", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["E"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRating", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["F"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["G"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ReactQuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["H"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["I"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["J"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "AnswerCountValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["K"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "EmailValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["L"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "NumericValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["M"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RegexValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["N"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["O"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["P"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorResult", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["Q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["R"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Base", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["S"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Event", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["T"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["U"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ItemValue", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["V"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "LocalizableString", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["W"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ChoicesRestfull", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["X"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Condition", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["Y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionNode", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["Z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_0"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionsParser", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_1"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ProcessValue", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_2"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_3"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ExceedSizeError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_4"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RequreNumericError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_5"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_6"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonIncorrectTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_7"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_8"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadataClass", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_9"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_10"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeErrorBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_11"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObject", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_12"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_13"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonRequiredPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_14"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonUnknownPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_15"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownCell", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_16"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownColumn", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_17"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_18"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_19"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_20"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_21"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDynamicRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_22"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamicModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_23"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_24"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_25"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MultipleTextItemModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_26"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_27"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_28"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_29"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_30"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PageModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_31"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Question", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_32"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_33"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_34"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionSelectBase", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_35"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_36"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCommentModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_37"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_38"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ElementFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_39"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFileModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_40"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionHtmlModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_41"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRadiogroupModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_42"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRatingModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_43"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_44"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_45"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTrigger", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_46"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerComplete", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_47"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerSetValue", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_48"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerVisible", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_49"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Trigger", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_50"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_51"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextPreProcessor", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_52"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dxSurveyService", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_53"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyLocalization", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_54"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyStrings", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_55"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCustomWidget", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_56"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomWidgetCollection", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_57"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_58"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_59"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __WEBPACK_IMPORTED_MODULE_0__react__["_60"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_SurveyNG__ = __webpack_require__(16); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNG", function() { return __WEBPACK_IMPORTED_MODULE_1__angular_SurveyNG__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyWindowNG", function() { return __WEBPACK_IMPORTED_MODULE_1__angular_SurveyNG__["b"]; }); + + + + + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBkZjg5MjY4ODYzMTI5MGFjMzY1NiIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvanNvbm9iamVjdC50cyIsIndlYnBhY2s6Ly8vLi9+L3ByZWFjdC1jb21wYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25mYWN0b3J5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9pdGVtdmFsdWUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25jb21tZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9ucy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FuZ3VsYXIvU3VydmV5TkcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jaG9pY2VzUmVzdGZ1bGwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZhbGlkYXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9uc1BhcnNlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZHhTdXJ2ZXlTZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYW5lbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3cudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHBhZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9lbnRyaWVzL3JlYWN0LnRzIiwid2VicGFjazovLy8uL3NyYy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vfi9wcmVhY3QvZGlzdC9wcmVhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwLnRzIiwid2VicGFjazovLy8uL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9jaGVja2JveC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fY29tbWVudC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2ZpbGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2h0bWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcmFkaW9ncm91cC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcmF0aW5nLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uZHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uZmlsZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25odG1sLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXhkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm11bHRpcGxldGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25yYWRpb2dyb3VwLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbnJhdGluZy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5V2luZG93LnRzIiwid2VicGFjazovLy8uL3NyYy90cmlnZ2VyLnRzIiwid2VicGFjazovLy8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9hbmd1bGFyLnRzIl0sIm5hbWVzIjpbInZlcnNpb24iLCJFTEVNRU5UUyIsInNwbGl0IiwiUkVBQ1RfRUxFTUVOVF9UWVBFIiwiU3ltYm9sIiwiZm9yIiwiQ09NUE9ORU5UX1dSQVBQRVJfS0VZIiwiQVVUT0JJTkRfQkxBQ0tMSVNUIiwiY29uc3RydWN0b3IiLCJyZW5kZXIiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVbm1vdW50IiwiQ0FNRUxfUFJPUFMiLCJCWVBBU1NfSE9PSyIsIkRFViIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVtcHR5Q29tcG9uZW50IiwiVk5vZGUiLCJwcm90b3R5cGUiLCIkJHR5cGVvZiIsInByZWFjdENvbXBhdFVwZ3JhZGVkIiwicHJlYWN0Q29tcGF0Tm9ybWFsaXplZCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwibm9kZU5hbWUiLCJzZXQiLCJ2IiwiY29uZmlndXJhYmxlIiwiYXR0cmlidXRlcyIsIm9sZEV2ZW50SG9vayIsImV2ZW50IiwiZSIsInBlcnNpc3QiLCJuYXRpdmVFdmVudCIsIm9sZFZub2RlSG9vayIsInZub2RlIiwidGFnIiwiYXR0cnMiLCJjaGlsZHJlbiIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVZOb2RlIiwiaGFuZGxlQ29tcG9uZW50Vk5vZGUiLCJkZWZhdWx0VmFsdWUiLCJ2YWx1ZSIsImhhbmRsZUVsZW1lbnRWTm9kZSIsImEiLCJkZWZhdWx0UHJvcHMiLCJleHRlbmQiLCJzaG91bGRTYW5pdGl6ZSIsImkiLCJ0ZXN0IiwiaGFzT3duUHJvcGVydHkiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJwYXJlbnQiLCJjYWxsYmFjayIsInByZXYiLCJfcHJlYWN0Q29tcGF0UmVuZGVyZWQiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlcyIsInJlbW92ZUNoaWxkIiwib3V0IiwiX2NvbXBvbmVudCIsImJhc2UiLCJDb250ZXh0UHJvdmlkZXIiLCJwcm9wcyIsImNvbnRleHQiLCJyZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciIsInBhcmVudENvbXBvbmVudCIsImNvbnRhaW5lciIsIndyYXAiLCJjIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImV4aXN0aW5nIiwiQVJSIiwiQ2hpbGRyZW4iLCJtYXAiLCJmbiIsImN0eCIsInRvQXJyYXkiLCJiaW5kIiwiZm9yRWFjaCIsImNvdW50Iiwib25seSIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwiY29uY2F0IiwiY3VycmVudENvbXBvbmVudCIsImNyZWF0ZUZhY3RvcnkiLCJ0eXBlIiwiY3JlYXRlRWxlbWVudCIsIkRPTSIsInVwZ3JhZGVUb1ZOb2RlcyIsImFyciIsIm9mZnNldCIsIm9iaiIsImlzVmFsaWRFbGVtZW50IiwiaXNTdGF0ZWxlc3NDb21wb25lbnQiLCJ3cmFwU3RhdGVsZXNzQ29tcG9uZW50IiwiV3JhcHBlZENvbXBvbmVudCIsImNyZWF0ZUNsYXNzIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwic3RhdGVsZXNzQ29tcG9uZW50SG9vayIsIkN0b3IiLCJXcmFwcGVkIiwicHJvcFR5cGVzIiwiYXJncyIsImFwcGx5Q2xhc3NOYW1lIiwicmVmIiwiY3JlYXRlU3RyaW5nUmVmUHJveHkiLCJhcHBseUV2ZW50Tm9ybWFsaXphdGlvbiIsImNsb25lRWxlbWVudCIsImVsZW1lbnQiLCJlbGVtZW50UHJvcHMiLCJub2RlIiwiY29tcG9uZW50IiwiX3JlZlByb3hpZXMiLCJyZWZzIiwicmVzb2x2ZWQiLCJvbmRvdWJsZWNsaWNrIiwib25kYmxjbGljayIsIm9uY2hhbmdlIiwibm9ybWFsaXplZCIsIm9uaW5wdXQiLCJtdWx0aWhvb2siLCJjbCIsImNsYXNzTmFtZSIsImNsYXNzIiwia2V5Iiwic2hhbGxvd0RpZmZlcnMiLCJiIiwiZmluZERPTU5vZGUiLCJGIiwiYmluZEFsbCIsIkNvbXBvbmVudCIsImNhbGwiLCJuZXdDb21wb25lbnRIb29rIiwibWl4aW5zIiwiYXBwbHlNaXhpbnMiLCJjb2xsYXRlTWl4aW5zIiwic3RhdGljcyIsImdldERlZmF1bHRQcm9wcyIsImtleWVkIiwibWl4aW4iLCJwdXNoIiwicHJvdG8iLCJfX2JvdW5kIiwiY2FsbE1ldGhvZCIsIm0iLCJhcHBseSIsImhvb2tzIiwic2tpcER1cGxpY2F0ZXMiLCJyZXQiLCJyIiwiYXJndW1lbnRzIiwicHJvcHNIb29rIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJjdG9yIiwicHJvcCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcHRzIiwic3RhdGUiLCJnZXRJbml0aWFsU3RhdGUiLCJpc1JlYWN0Q29tcG9uZW50IiwicmVwbGFjZVN0YXRlIiwic2V0U3RhdGUiLCJnZXRET01Ob2RlIiwiaXNNb3VudGVkIiwiUHVyZUNvbXBvbmVudCIsIlByb3BUeXBlcyIsInVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrQzs7Ozs7O0FDcmVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7QUNuTHRDO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQiwyQkFBMkI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxxQkFBcUIsZ0NBQWdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQsaUM7Ozs7Ozs7OztBQzdWd0M7QUFFakMsSUFBSSxtQkFBbUIsR0FBRztJQUM3QixJQUFJLEVBQUUsRUFBRTtJQUNSLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLElBQUksRUFBRSxZQUFZO0lBQ2xCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtJQUN0RSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLGNBQWM7SUFDOUQsU0FBUyxFQUFFLEVBQUU7SUFDYixHQUFHLEVBQUUsRUFBRTtJQUNQLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7SUFDdEUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBRTdGLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzlELE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtJQUMvQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ3pCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7SUFDakMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQ2xELFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO0lBQ3pFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7SUFDdEQsSUFBSSxFQUFFLGNBQWM7SUFDcEIsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWTtRQUN6QyxNQUFNLEVBQUU7WUFDSixJQUFJLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsc0JBQXNCO1lBQ3BGLGNBQWMsRUFBRSwyQ0FBMkMsRUFBRSxlQUFlLEVBQUUsNkNBQTZDO1NBQzlIO0tBQ0o7Q0FDSixDQUFDO0FBQ0YsK0RBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQ1g7QUFDQztBQUNEO0FBQ0U7QUFDRDtBQUNBO0FBQ0Q7QUFDQztBQUNFO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWHBDO0FBQUEsU0FBUztBQUNnQjtBQUVsQixJQUFJLE9BQWUsQ0FBQztBQUMzQixPQUFPLEdBQUcsS0FBRyxRQUFxQixDQUFDO0FBS1Y7QUFDb0M7QUFDbkI7QUFDbUM7QUFDdkI7QUFDcUI7QUFDbkI7QUFDQztBQUNvQjtBQUtuRDtBQUlpQjtBQUN1RDtBQUNIO0FBQ3JCO0FBQ21CO0FBQ3BCO0FBQ3BDO0FBQ0c7QUFDUTtBQUNtQztBQUNyQjtBQUNGO0FBQ0U7QUFDUTtBQUNoQjtBQUNBO0FBQ1k7QUFDUjtBQUNKO0FBQ2I7QUFJbEI7QUFDOEI7QUFDRztBQUVGO0FBQ2dCO0FBQ21CO0FBRXpGLGdEQUFnRDtBQUNoRCwyRUFBMkU7Ozs7Ozs7Ozs7QUMxRHZCO0FBRTdDLElBQUksa0JBQWtCLEdBQUc7SUFDNUIsWUFBWSxFQUFFLFdBQVc7SUFDekIsWUFBWSxFQUFFLE9BQU87SUFDckIsWUFBWSxFQUFFLFFBQVE7SUFDdEIsYUFBYSxFQUFFLHdCQUF3QjtJQUN2QyxZQUFZLEVBQUUsa0JBQWtCO0lBQ2hDLFdBQVcsRUFBRSxtQ0FBbUM7SUFDaEQsZ0JBQWdCLEVBQUUsZ0NBQWdDO0lBQ2xELGFBQWEsRUFBRSw4QkFBOEI7SUFDN0MsY0FBYyxFQUFFLFVBQVU7SUFDMUIsYUFBYSxFQUFFLDZCQUE2QjtJQUM1QyxzQkFBc0IsRUFBRSxxQ0FBcUM7SUFDN0QsWUFBWSxFQUFFLHFDQUFxQztJQUNuRCxhQUFhLEVBQUUsbUNBQW1DO0lBQ2xELGFBQWEsRUFBRSxvQ0FBb0M7SUFDbkQsZ0JBQWdCLEVBQUUsbURBQW1EO0lBQ3JFLGdCQUFnQixFQUFFLG1DQUFtQztJQUNyRCxjQUFjLEVBQUUsc0NBQXNDO0lBQ3RELGNBQWMsRUFBRSwwQ0FBMEM7SUFDMUQsYUFBYSxFQUFFLHVFQUF1RTtJQUN0RixVQUFVLEVBQUUsZ0RBQWdEO0lBQzVELFVBQVUsRUFBRSxnREFBZ0Q7SUFDNUQsWUFBWSxFQUFFLDJDQUEyQztJQUN6RCxlQUFlLEVBQUUsbUNBQW1DO0lBQ3BELGtCQUFrQixFQUFFLGdEQUFnRDtJQUNwRSxhQUFhLEVBQUUsK0NBQStDO0lBQzlELGtCQUFrQixFQUFFLCtCQUErQjtJQUNuRCxhQUFhLEVBQUUsNERBQTREO0lBQzNFLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLFNBQVMsRUFBRSxXQUFXO0NBQ3pCLENBQUM7QUFFRiwwRUFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7QUNsQ0Y7QUFFN0MsSUFBSSxtQkFBbUIsR0FBRztJQUM3QixZQUFZLEVBQUUsU0FBUztJQUN2QixZQUFZLEVBQUUsUUFBUTtJQUN0QixZQUFZLEVBQUUsUUFBUTtJQUN0QixZQUFZLEVBQUUsaUJBQWlCO0lBQy9CLFdBQVcsRUFBRSxpQ0FBaUM7SUFDOUMsZ0JBQWdCLEVBQUUsK0JBQStCO0lBQ2pELGFBQWEsRUFBRSxzQ0FBc0M7SUFDckQsYUFBYSxFQUFFLGtCQUFrQjtJQUNqQyxjQUFjLEVBQUUsU0FBUztJQUN6QixhQUFhLEVBQUUsOEJBQThCO0lBQzdDLFlBQVksRUFBRSxlQUFlO0lBQzdCLGFBQWEsRUFBRSx3QkFBd0I7SUFDdkMsY0FBYyxFQUFFLDZDQUE2QztJQUM3RCxjQUFjLEVBQUUsNkNBQTZDO0lBQzdELGFBQWEsRUFBRSw4RUFBOEU7SUFDN0YsVUFBVSxFQUFFLDhDQUE4QztJQUMxRCxVQUFVLEVBQUUsOENBQThDO0lBQzFELFlBQVksRUFBRSwwQ0FBMEM7SUFDeEQsYUFBYSxFQUFFLHNDQUFzQztJQUNyRCxrQkFBa0IsRUFBRSx1Q0FBdUM7Q0FDOUQsQ0FBQztBQUVGLDBFQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FDekJ2RDtBQUFBLDhDQUE4QztBQUNNO0FBRTdDLElBQUksa0JBQWtCLEdBQUc7SUFDNUIsWUFBWSxFQUFFLFFBQVE7SUFDdEIsWUFBWSxFQUFFLFVBQVU7SUFDeEIsWUFBWSxFQUFFLFdBQVc7SUFDekIsYUFBYSxFQUFFLFFBQVE7SUFDdkIsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxXQUFXLEVBQUUsMERBQTBEO0lBQ3ZFLGdCQUFnQixFQUFFLDBDQUEwQztJQUM1RCxhQUFhLEVBQUUsb0NBQW9DO0lBQ25ELGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGFBQWEsRUFBRSxtQ0FBbUM7SUFDbEQsWUFBWSxFQUFFLGtDQUFrQztJQUNoRCxhQUFhLEVBQUUsNkNBQTZDO0lBQzVELGNBQWMsRUFBRSwrQ0FBK0M7SUFDL0QsY0FBYyxFQUFFLHFEQUFxRDtJQUNyRSxhQUFhLEVBQUUsbUZBQW1GO0lBQ2xHLFVBQVUsRUFBRSxzREFBc0Q7SUFDbEUsVUFBVSxFQUFFLHNEQUFzRDtJQUNsRSxZQUFZLEVBQUUsOENBQThDO0lBQzVELGFBQWEsRUFBRSwwREFBMEQ7SUFDekUsa0JBQWtCLEVBQUUsd0NBQXdDO0NBQy9ELENBQUM7QUFFRiwwRUFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7QUMxQkY7QUFFN0MsSUFBSSxvQkFBb0IsR0FBRztJQUM5QixZQUFZLEVBQUUsV0FBVztJQUN6QixZQUFZLEVBQUUsVUFBVTtJQUN4QixZQUFZLEVBQUUsUUFBUTtJQUN0QixhQUFhLEVBQUUsZUFBZTtJQUM5QixZQUFZLEVBQUUsY0FBYztJQUM1QixXQUFXLEVBQUUsdUVBQXVFO0lBQ3BGLGdCQUFnQixFQUFFLGdDQUFnQztJQUNsRCxhQUFhLEVBQUUsa0NBQWtDO0lBQ2pELGNBQWMsRUFBRSxZQUFZO0lBQzVCLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsWUFBWSxFQUFFLDhCQUE4QjtJQUM1QyxhQUFhLEVBQUUsMENBQTBDO0lBQ3pELGNBQWMsRUFBRSxnREFBZ0Q7SUFDaEUsY0FBYyxFQUFFLCtDQUErQztJQUMvRCxhQUFhLEVBQUUsdUZBQXVGO0lBQ3RHLFVBQVUsRUFBRSxtREFBbUQ7SUFDL0QsVUFBVSxFQUFFLG9EQUFvRDtJQUNoRSxZQUFZLEVBQUUsZ0NBQWdDO0lBQzlDLGtCQUFrQixFQUFFLHFDQUFxQztDQUM1RCxDQUFDO0FBRUYsMEVBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLG9CQUFvQixDQUFDOzs7Ozs7Ozs7QUN4QnhEO0FBQUEsOENBQThDO0FBQ007QUFFN0MsSUFBSSxtQkFBbUIsR0FBRztJQUM3QixZQUFZLEVBQUUscUJBQXFCO0lBQ25DLFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFlBQVksRUFBRSxVQUFVO0lBQ3hCLGFBQWEsRUFBRSx1QkFBdUI7SUFDdEMsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxXQUFXLEVBQUUsb0VBQW9FO0lBQ2pGLGdCQUFnQixFQUFFLDhDQUE4QztJQUNoRSxhQUFhLEVBQUUsZ0RBQWdEO0lBQy9ELGNBQWMsRUFBRSxlQUFlO0lBQy9CLGFBQWEsRUFBRSx3REFBd0Q7SUFDdkUsc0JBQXNCLEVBQUUscUNBQXFDO0lBQzdELFlBQVksRUFBRSwyQ0FBMkM7SUFDekQsYUFBYSxFQUFFLHVDQUF1QztJQUN0RCxjQUFjLEVBQUUsdURBQXVEO0lBQ3ZFLGNBQWMsRUFBRSxzREFBc0Q7SUFDdEUsYUFBYSxFQUFFLDRIQUE0SDtJQUMzSSxVQUFVLEVBQUUsaUZBQWlGO0lBQzdGLFVBQVUsRUFBRSxpRkFBaUY7SUFDN0YsWUFBWSxFQUFFLHlDQUF5QztJQUN2RCxhQUFhLEVBQUUsb0RBQW9EO0lBQ25FLGtCQUFrQixFQUFFLDBDQUEwQztDQUNqRSxDQUFDO0FBQ0YsMEVBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDOzs7Ozs7Ozs7O0FDMUJIO0FBRTdDLElBQUksbUJBQW1CLEdBQUc7SUFDN0IsWUFBWSxFQUFFLFFBQVE7SUFDdEIsWUFBWSxFQUFFLFFBQVE7SUFDdEIsWUFBWSxFQUFFLFFBQVE7SUFDdEIsWUFBWSxFQUFFLG1CQUFtQjtJQUNqQyxXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLGdCQUFnQixFQUFFLGdEQUFnRDtJQUNsRSxhQUFhLEVBQUUsMkNBQTJDO0lBQzFELGFBQWEsRUFBRSwrQkFBK0I7SUFDOUMsY0FBYyxFQUFFLFdBQVc7SUFDM0IsYUFBYSxFQUFFLG9DQUFvQztJQUNuRCxZQUFZLEVBQUUsaUNBQWlDO0lBQy9DLGFBQWEsRUFBRSx5Q0FBeUM7SUFDeEQsY0FBYyxFQUFFLDRDQUE0QztJQUM1RCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGFBQWEsRUFBRSw4RUFBOEU7SUFDN0YsVUFBVSxFQUFFLDhDQUE4QztJQUMxRCxVQUFVLEVBQUUsMENBQTBDO0lBQ3RELFlBQVksRUFBRSxpREFBaUQ7SUFDL0QsYUFBYSxFQUFFLHlDQUF5QztJQUN4RCxrQkFBa0IsRUFBRSxxRUFBcUU7Q0FDNUYsQ0FBQztBQUVGLDBFQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FDekJ2RDtBQUFBLGtEQUFrRDtBQUNFO0FBRTdDLElBQUksa0JBQWtCLEdBQUc7SUFDNUIsWUFBWSxFQUFFLGFBQWE7SUFDM0IsWUFBWSxFQUFFLFNBQVM7SUFDdkIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsYUFBYSxFQUFFLDhCQUE4QjtJQUM3QyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLFdBQVcsRUFBRSwyRUFBMkU7SUFDeEYsZ0JBQWdCLEVBQUUsNERBQTREO0lBQzlFLGFBQWEsRUFBRSxtREFBbUQ7SUFDbEUsY0FBYyxFQUFFLGFBQWE7SUFDN0IsYUFBYSxFQUFFLGtDQUFrQztJQUNqRCxzQkFBc0IsRUFBRSx3REFBd0Q7SUFDaEYsWUFBWSxFQUFFLG9DQUFvQztJQUNsRCxhQUFhLEVBQUUsK0NBQStDO0lBQzlELGdCQUFnQixFQUFFLCtDQUErQztJQUNqRSxjQUFjLEVBQUUsK0NBQStDO0lBQy9ELGNBQWMsRUFBRSxvREFBb0Q7SUFDcEUsYUFBYSxFQUFFLHdGQUF3RjtJQUN2RyxVQUFVLEVBQUUscURBQXFEO0lBQ2pFLFVBQVUsRUFBRSxxREFBcUQ7SUFDakUsWUFBWSxFQUFFLCtDQUErQztJQUM3RCxlQUFlLEVBQUUsc0NBQXNDO0lBQ3ZELGtCQUFrQixFQUFFLCtFQUErRTtJQUNuRyxhQUFhLEVBQUUsNENBQTRDO0lBQzNELGtCQUFrQixFQUFFLG9EQUFvRDtJQUN4RSxhQUFhLEVBQUUsc0ZBQXNGO0lBQ3JHLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsU0FBUyxFQUFFLFVBQVU7Q0FDeEIsQ0FBQztBQUNGLDBFQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQ2hDRjtBQUU3QyxJQUFJLG1CQUFtQixHQUFHO0lBQzdCLFlBQVksRUFBRSxRQUFRO0lBQ3RCLFlBQVksRUFBRSxPQUFPO0lBQ3JCLFlBQVksRUFBRSxRQUFRO0lBQ3RCLGFBQWEsRUFBRSx3QkFBd0I7SUFDdkMsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxXQUFXLEVBQUUsMEJBQTBCO0lBQ3ZDLGdCQUFnQixFQUFFLG9DQUFvQztJQUN0RCxhQUFhLEVBQUUsNkJBQTZCO0lBQzVDLGNBQWMsRUFBRSxZQUFZO0lBQzVCLGFBQWEsRUFBRSxvQ0FBb0M7SUFDbkQsc0JBQXNCLEVBQUUsMkNBQTJDO0lBQ25FLFlBQVksRUFBRSx1Q0FBdUM7SUFDckQsYUFBYSxFQUFFLHVDQUF1QztJQUN0RCxhQUFhLEVBQUUscUNBQXFDO0lBQ3BELGdCQUFnQixFQUFFLHNEQUFzRDtJQUN4RSxnQkFBZ0IsRUFBRSw0Q0FBNEM7SUFDOUQsY0FBYyxFQUFFLHdDQUF3QztJQUN4RCxjQUFjLEVBQUUsMkNBQTJDO0lBQzNELGFBQWEsRUFBRSwrRUFBK0U7SUFDOUYsVUFBVSxFQUFFLG1EQUFtRDtJQUMvRCxVQUFVLEVBQUUsb0RBQW9EO0lBQ2hFLFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZUFBZSxFQUFFLGtDQUFrQztJQUNuRCxrQkFBa0IsRUFBRSw2REFBNkQ7SUFDakYsYUFBYSxFQUFFLHFEQUFxRDtJQUNwRSxrQkFBa0IsRUFBRSw4QkFBOEI7SUFDbEQsYUFBYSxFQUFFLDZFQUE2RTtJQUM1RixNQUFNLEVBQUUsY0FBYztJQUN0QixTQUFTLEVBQUUsTUFBTTtDQUNwQixDQUFDO0FBRUYsMEVBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDOzs7Ozs7Ozs7O0FDbENIO0FBRTdDLElBQUkscUJBQXFCLEdBQUc7SUFDL0IsWUFBWSxFQUFFLFdBQVc7SUFDekIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsYUFBYSxFQUFFLGtCQUFrQjtJQUNqQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLFdBQVcsRUFBRSwyQ0FBMkM7SUFDeEQsZ0JBQWdCLEVBQUUsb0NBQW9DO0lBQ3RELGFBQWEsRUFBRSw0QkFBNEI7SUFDM0MsY0FBYyxFQUFFLFlBQVk7SUFDNUIsYUFBYSxFQUFFLGtEQUFrRDtJQUNqRSxzQkFBc0IsRUFBRSxxQ0FBcUM7SUFDN0QsWUFBWSxFQUFFLG1DQUFtQztJQUNqRCxhQUFhLEVBQUUsMkNBQTJDO0lBQzFELGNBQWMsRUFBRSx5Q0FBeUM7SUFDekQsY0FBYyxFQUFFLHlDQUF5QztJQUN6RCxhQUFhLEVBQUUsb0ZBQW9GO0lBQ25HLFVBQVUsRUFBRSx5REFBeUQ7SUFDckUsVUFBVSxFQUFFLHdEQUF3RDtJQUNwRSxZQUFZLEVBQUUsa0RBQWtEO0lBQ2hFLGFBQWEsRUFBRSxzREFBc0Q7SUFDckUsa0JBQWtCLEVBQUUsdUNBQXVDO0NBQzlELENBQUM7QUFDRiwwRUFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQXFCLENBQUM7Ozs7Ozs7Ozs7QUN6Qkw7QUFFN0MsSUFBSSxvQkFBb0IsR0FBRztJQUM5QixZQUFZLEVBQUUsT0FBTztJQUNyQixZQUFZLEVBQUUsT0FBTztJQUNyQixZQUFZLEVBQUUsUUFBUTtJQUN0QixZQUFZLEVBQUUscUJBQXFCO0lBQ25DLFdBQVcsRUFBRSx3QkFBd0I7SUFDckMsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELGFBQWEsRUFBRSx1QkFBdUI7SUFDdEMsYUFBYSxFQUFFLDhCQUE4QjtJQUM3QyxjQUFjLEVBQUUsWUFBWTtJQUM1QixhQUFhLEVBQUUsaUNBQWlDO0lBQ2hELFlBQVksRUFBRSwyQkFBMkI7SUFDekMsYUFBYSxFQUFFLDJDQUEyQztJQUMxRCxjQUFjLEVBQUUsNkNBQTZDO0lBQzdELGNBQWMsRUFBRSw4Q0FBOEM7SUFDOUQsYUFBYSxFQUFFLDRFQUE0RTtJQUMzRixVQUFVLEVBQUUsOENBQThDO0lBQzFELFVBQVUsRUFBRSw4Q0FBOEM7SUFDMUQsWUFBWSxFQUFFLDZEQUE2RDtJQUMzRSxrQkFBa0IsRUFBRSw4Q0FBOEM7Q0FDckUsQ0FBQztBQUVGLDBFQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FBQzs7Ozs7Ozs7O0FDeEJ4RDtBQUFBLDJCQUEyQjtBQUN5QjtBQUU3QyxJQUFJLG9CQUFvQixHQUFHO0lBQzlCLFlBQVksRUFBRSxZQUFZO0lBQzFCLFlBQVksRUFBRSxPQUFPO0lBQ3JCLFlBQVksRUFBRSxRQUFRO0lBQ3RCLGFBQWEsRUFBRSxpQkFBaUI7SUFDaEMsWUFBWSxFQUFFLGlCQUFpQjtJQUMvQixXQUFXLEVBQUUsb0RBQW9EO0lBQ2pFLGdCQUFnQixFQUFFLHFDQUFxQztJQUN2RCxhQUFhLEVBQUUsbUJBQW1CO0lBQ2xDLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGFBQWEsRUFBRSw0QkFBNEI7SUFDM0Msc0JBQXNCLEVBQUUsNENBQTRDO0lBQ3BFLFlBQVksRUFBRSw0QkFBNEI7SUFDMUMsYUFBYSxFQUFFLG1DQUFtQztJQUNsRCxnQkFBZ0IsRUFBRSxvQ0FBb0M7SUFDdEQsY0FBYyxFQUFFLDJDQUEyQztJQUMzRCxjQUFjLEVBQUUsNkNBQTZDO0lBQzdELGFBQWEsRUFBRSw0RUFBNEU7SUFDM0YsVUFBVSxFQUFFLDBDQUEwQztJQUN0RCxVQUFVLEVBQUUsNkNBQTZDO0lBQ3pELFlBQVksRUFBRSwwQ0FBMEM7SUFDeEQsZUFBZSxFQUFFLHdDQUF3QztJQUN6RCxrQkFBa0IsRUFBRSxzRkFBc0Y7SUFDMUcsYUFBYSxFQUFFLG9DQUFvQztJQUNuRCxrQkFBa0IsRUFBRSxtQ0FBbUM7SUFDdkQsYUFBYSxFQUFFLDRFQUE0RTtJQUMzRixNQUFNLEVBQUUsZUFBZTtJQUN2QixTQUFTLEVBQUUsU0FBUztDQUN2QixDQUFDO0FBRUYsMEVBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLG9CQUFvQixDQUFDOzs7Ozs7Ozs7O0FDakNKO0FBRTdDLElBQUksb0JBQW9CLEdBQUc7SUFDMUIsWUFBWSxFQUFFLE1BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU87SUFDckIsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixhQUFhLEVBQUUscUJBQXFCO0lBQ3BDLFlBQVksRUFBRSxpQkFBaUI7SUFDL0IsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxnQkFBZ0IsRUFBRSxpREFBaUQ7SUFDbkUsYUFBYSxFQUFFLGdDQUFnQztJQUMvQyxjQUFjLEVBQUUsYUFBYTtJQUM3QixhQUFhLEVBQUUsNkJBQTZCO0lBQzVDLFlBQVksRUFBRSxpQ0FBaUM7SUFDL0MsYUFBYSxFQUFFLDJCQUEyQjtJQUMxQyxnQkFBZ0IsRUFBRSxtQ0FBbUM7SUFDckQsY0FBYyxFQUFFLG9DQUFvQztJQUNwRCxjQUFjLEVBQUUsc0NBQXNDO0lBQ3RELGFBQWEsRUFBRSx1RUFBdUU7SUFDdEYsVUFBVSxFQUFFLHFEQUFxRDtJQUNqRSxVQUFVLEVBQUUsdURBQXVEO0lBQ25FLFlBQVksRUFBRSwyQ0FBMkM7SUFDekQsZUFBZSxFQUFFLG1DQUFtQztJQUNwRCxrQkFBa0IsRUFBRSwrREFBK0Q7SUFDbkYsYUFBYSxFQUFFLG9DQUFvQztJQUNuRCxrQkFBa0IsRUFBRSxpQ0FBaUM7SUFDckQsYUFBYSxFQUFFLHVFQUF1RTtJQUN0RixNQUFNLEVBQUUsWUFBWTtJQUNwQixTQUFTLEVBQUUsUUFBUTtDQUMxQixDQUFDO0FBRUYsMEVBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQy9CaEI7QUFDVTtBQUNTO0FBRTNEO0lBQTJDLHdGQUFvQjtJQUMzRCwrQkFBbUIsSUFBWTtRQUEvQixZQUNJLGtCQUFNLElBQUksQ0FBQyxTQUNkO1FBRmtCLFVBQUksR0FBSixJQUFJLENBQVE7O0lBRS9CLENBQUM7SUFDUywyQ0FBVyxHQUFyQixVQUFzQixHQUFRO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNTLGlEQUFpQixHQUEzQixVQUE0QixHQUFRO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFFNUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDL0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNsQixDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ1MsK0NBQWUsR0FBekIsVUFBMEIsR0FBUTtRQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDbEIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDTSx1Q0FBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBQ0wsNEJBQUM7QUFBRCxDQUFDLENBdEMwQyxrRkFBb0IsR0FzQzlEOztBQUNELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUkscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDcEgseUVBQWUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQUMsSUFBSSxJQUFPLElBQUksQ0FBQyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLHlFQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUM1Q2hJO0FBQ0k7QUFDVTtBQUNJO0FBRXREO0lBQTBDLHVGQUFRO0lBSTlDLDhCQUFtQixJQUFZO1FBQS9CLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBRWQ7UUFIa0IsVUFBSSxHQUFKLElBQUksQ0FBUTtRQUh4QixVQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFVBQUksR0FBVyxFQUFFLENBQUM7UUFJckIsS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQzNELENBQUM7SUFDRCxzQkFBVyw2Q0FBVzthQUF0QixjQUFtQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLFVBQXVCLEtBQWEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FETjtJQUVyRSxzQkFBVyxnREFBYzthQUF6QixjQUFnRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDM0Usc0NBQU8sR0FBZDtRQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELHNDQUFPLEdBQVA7UUFDSSxNQUFNLENBQUMsaUJBQU0sT0FBTyxXQUFFLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUNMLDJCQUFDO0FBQUQsQ0FBQyxDQWpCeUMsMkRBQVEsR0FpQmpEOztBQUNELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0lBQzlHLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2SSx5RUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBQyxJQUFJLElBQU8sTUFBTSxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pCbkU7QUFDVTtBQUNPO0FBQ047QUFDRztBQUV0RDtJQUEyQyx3RkFBa0I7SUFFekQsK0JBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FFZDtRQUhrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBRTNCLEtBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLDZFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUM5RCxDQUFDO0lBQ0Qsc0JBQVcsaURBQWM7YUFBekIsY0FBOEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEosVUFBMEIsUUFBZ0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztPQUQyRDtJQUVsSixzQkFBVyxvREFBaUI7YUFBNUIsY0FBb0QsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFDOzs7T0FBQTtJQUNqRix1Q0FBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsMERBQTBCLEdBQTFCLGNBQStCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELDRCQUFDO0FBQUQsQ0FBQyxDQWIwQyxnRkFBa0IsR0FhNUQ7O0FBQ0QsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFDLENBQUMsRUFDNUcsY0FBYyxNQUFNLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN6RSx5RUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBQyxJQUFJLElBQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcseUVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0QmhJO0FBQ0k7QUFDVTtBQUVHO0FBQ0Y7QUFFbkQ7SUFBdUMsb0ZBQVE7SUFRM0MsMkJBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FDZDtRQUZrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBUHZCLHNCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxpQkFBVyxHQUFZLEtBQUssQ0FBQzs7SUFRckMsQ0FBQztJQUNNLG1DQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxzQkFBVywwQ0FBVzthQUF0QixjQUEyQixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzthQUMxRCxVQUF1QixLQUFjLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQURmO0lBRW5ELG9DQUFRLEdBQWYsVUFBZ0IsSUFBVTtRQUN0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxNQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUUsQ0FBQyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDcEssSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsd0NBQVksR0FBdEIsVUFBdUIsSUFBVTtRQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN4QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3ZELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMxQyxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztZQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ25DLENBQUM7UUFDTCxDQUFDO1FBQ0QsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ1MsNENBQWdCLEdBQTFCLFVBQTJCLE1BQTBCO1FBQ2pELGlCQUFNLGdCQUFnQixZQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksMkRBQVcsQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDTCxDQUFDO0lBQ08sOENBQWtCLEdBQTFCLFVBQTJCLElBQVU7UUFDakMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLCtEQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNPLHVDQUFXLEdBQW5CLFVBQW9CLElBQVU7UUFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDTCx3QkFBQztBQUFELENBQUMsQ0E3RHNDLDJEQUFRLEdBNkQ5Qzs7QUFDRCwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdk0seUVBQWUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQUMsSUFBSSxJQUFPLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3RFekQ7QUFDSjtBQUNVO0FBQ0k7QUFFdEQ7SUFBdUMsb0ZBQVk7SUFFL0MsMkJBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FFZDtRQUhrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBRTNCLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDcEQsQ0FBQztJQUNNLG1DQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxzQkFBVyxtQ0FBSTthQUFmLGNBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDdkQsVUFBZ0IsS0FBYSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUROO0lBRXZELHNCQUFXLHNDQUFPO2FBQWxCLGNBQTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDckUsc0JBQVcsNENBQWE7YUFBeEIsY0FBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN2Ryx3QkFBQztBQUFELENBQUMsQ0Fic0MsbUVBQVksR0FhbEQ7O0FBQ0QsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDaEsseUVBQWUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQUMsSUFBSSxJQUFPLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQnpFO0FBQ1U7QUFDRjtBQUNJO0FBRVc7QUFDZjtBQUNjO0FBS2xEO0lBQW9DLGlGQUFJO0lBSXBDLHdCQUFtQixJQUFTLEVBQVMsSUFBWSxFQUFTLFFBQWdCLEVBQUUsSUFBaUIsRUFBRSxLQUFVO1FBQXpHLFlBQ0ksaUJBQU8sU0FHVjtRQUprQixVQUFJLEdBQUosSUFBSSxDQUFLO1FBQVMsVUFBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGNBQVEsR0FBUixRQUFRLENBQVE7UUFFdEUsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0lBQzFCLENBQUM7SUFDRCxzQkFBVyxpQ0FBSzthQUFoQixjQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDNUMsVUFBaUIsUUFBYTtZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUM7OztPQUwyQztJQU1sQyx1Q0FBYyxHQUF4QjtJQUNBLENBQUM7SUFDTCxxQkFBQztBQUFELENBQUMsQ0FqQm1DLG1EQUFJLEdBaUJ2Qzs7QUFDRDtJQUF5QyxzRkFBUTtJQU03Qyw2QkFBbUIsSUFBWTtRQUEvQixZQUNJLGtCQUFNLElBQUksQ0FBQyxTQUdkO1FBSmtCLFVBQUksR0FBSixJQUFJLENBQVE7UUFIdkIsbUJBQWEsR0FBRyxLQUFLLENBQUM7UUFFdkIsc0JBQWdCLEdBQVksS0FBSyxDQUFDO1FBR3JDLEtBQUksQ0FBQyxZQUFZLEdBQUcsNkRBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDaEQsS0FBSSxDQUFDLFNBQVMsR0FBRyw2REFBUyxDQUFDLFdBQVcsQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDakQsQ0FBQztJQUNNLHFDQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxzQkFBVyx3Q0FBTzthQUFsQjtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQzs7O09BQUE7SUFDRCxzQkFBSSx3Q0FBTzthQUFYLGNBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUN2RCxVQUFZLFFBQW9CO1lBQzVCLDZEQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsQ0FBQzs7O09BSHNEO0lBSXZELHNCQUFJLHFDQUFJO2FBQVIsY0FBeUIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ2pELFVBQVMsUUFBb0I7WUFDekIsNkRBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRCxDQUFDOzs7T0FIZ0Q7SUFJakQsc0JBQVcsNENBQVc7YUFBdEI7WUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztZQUN6QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUFDLFFBQVEsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2SixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDOzs7T0FBQTtJQUNELHdEQUEwQixHQUExQixjQUErQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELDhDQUFnQixHQUExQixVQUEyQixNQUEwQjtRQUNqRCxpQkFBTSxnQkFBZ0IsWUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksMkRBQVcsQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQztJQUNMLENBQUM7SUFDTyw0Q0FBYyxHQUF0QjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBQ08sZ0RBQWtCLEdBQTFCO1FBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDeEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ1MsNkNBQWUsR0FBekIsVUFBMEIsSUFBUyxFQUFFLElBQVksRUFBRSxRQUFnQixFQUFFLEtBQVU7UUFDM0UsTUFBTSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ1MsNENBQWMsR0FBeEI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN4RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNuQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzdDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ2hELENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELGFBQWE7SUFDYixnREFBa0IsR0FBbEIsVUFBbUIsR0FBbUI7UUFDbEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNaLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUNELFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBQ0wsMEJBQUM7QUFBRCxDQUFDLENBL0Z3QywyREFBUSxHQStGaEQ7O0FBRUQsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsSUFBSSxNQUFNLENBQUMsNkRBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsRUFBRSxLQUFVLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7SUFDbk4sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxJQUFJLE1BQU0sQ0FBQyw2REFBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxFQUFFLEtBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUN2SywwQkFBMEIsQ0FBQyxFQUFHLGNBQWMsTUFBTSxDQUFDLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFbkcseUVBQWUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQUMsSUFBSSxJQUFPLElBQUksQ0FBQyxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLHlFQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyx5RUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hJOUo7QUFDQztBQUNGO0FBQ1k7QUFHbEQ7SUFBNEMseUZBQTBCO0lBQ2xFLGdDQUFtQixJQUFTLEVBQVMsSUFBWSxFQUFFLElBQXlCLEVBQUUsS0FBVTtRQUF4RixZQUNJLGtCQUFNLElBQUksRUFBRSxLQUFLLENBQUMsU0FDckI7UUFGa0IsVUFBSSxHQUFKLElBQUksQ0FBSztRQUFTLFVBQUksR0FBSixJQUFJLENBQVE7O0lBRWpELENBQUM7SUFDRCxzQkFBVywyQ0FBTzthQUFsQixjQUF1QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlDLDZCQUFDO0FBQUQsQ0FBQyxDQUwyQyxnR0FBMEIsR0FLckU7O0FBQ0Q7SUFBaUQsOEZBQStCO0lBRzVFLHFDQUFtQixJQUFZO1FBQS9CLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBRWQ7UUFIa0IsVUFBSSxHQUFKLElBQUksQ0FBUTtRQUUzQixLQUFJLENBQUMsU0FBUyxHQUFHLDZEQUFTLENBQUMsV0FBVyxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNqRCxDQUFDO0lBQ00sNkNBQU8sR0FBZDtRQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBQ0Qsc0JBQVcsNkNBQUk7YUFBZixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDeEQsVUFBZ0IsUUFBb0I7WUFDaEMsNkRBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRCxDQUFDOzs7T0FIdUQ7SUFJOUMsa0RBQVksR0FBdEI7UUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBMEIsQ0FBQztRQUNqRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ1MscURBQWUsR0FBekIsVUFBMEIsSUFBUyxFQUFFLElBQVksRUFBRSxLQUFVO1FBQ3pELE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDTCxrQ0FBQztBQUFELENBQUMsQ0E1QmdELHFHQUErQixHQTRCL0U7O0FBRUQsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxJQUFJLE1BQU0sQ0FBQyw2REFBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxFQUFFLEtBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQ25OLGNBQWMsTUFBTSxDQUFDLElBQUksMkJBQTJCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUV2Rix5RUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFDLElBQUksSUFBTyxJQUFJLENBQUMsR0FBRyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcseUVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxxR0FBK0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUN4TjtBQUNDO0FBQ1U7QUFDQztBQUVmO0FBQ2tCO0FBRXREO0lBQTJDLHdGQUEwQjtJQUNqRSwrQkFBbUIsS0FBYSxFQUFFLElBQXlCLEVBQUUsS0FBVTtRQUF2RSxZQUNJLGtCQUFNLElBQUksRUFBRSxLQUFLLENBQUMsU0FDckI7UUFGa0IsV0FBSyxHQUFMLEtBQUssQ0FBUTs7SUFFaEMsQ0FBQztJQUNELHNCQUFXLDBDQUFPO2FBQWxCLGNBQXVCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3ZELDRCQUFDO0FBQUQsQ0FBQyxDQUwwQyxnR0FBMEIsR0FLcEU7O0FBRUQ7SUFBZ0QsNkZBQStCO0lBUTNFLG9DQUFtQixJQUFZO1FBQS9CLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBR2Q7UUFKa0IsVUFBSSxHQUFKLElBQUksQ0FBUTtRQU52QixnQkFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLG1CQUFhLEdBQVcsQ0FBQyxDQUFDO1FBRzNCLGlCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBSW5CLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLDZFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3RELEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLDZFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUM3RCxDQUFDO0lBQ00sNENBQU8sR0FBZDtRQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUNELHNCQUFXLGdEQUFRO2FBQW5CLGNBQXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUNwRCxVQUFvQixHQUFXO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLDBCQUEwQixDQUFDLFdBQVcsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDcEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRCxDQUFDOzs7T0FWbUQ7SUFXN0MsMkNBQU0sR0FBYjtRQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ00sOENBQVMsR0FBaEIsVUFBaUIsS0FBYTtRQUMxQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckIsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELHNCQUFXLGtEQUFVO2FBQXJCLGNBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlILFVBQXNCLEtBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FEcUQ7SUFFOUgsc0JBQVcscURBQWE7YUFBeEIsY0FBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlELHNCQUFXLHFEQUFhO2FBQXhCLGNBQTZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsMEVBQWtCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxSSxVQUF5QixLQUFhLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FEMkQ7SUFFMUksc0JBQVcsd0RBQWdCO2FBQTNCLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUM3RCwrREFBMEIsR0FBakMsY0FBd0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFFLENBQUM7SUFDeEQsc0JBQVcseURBQWlCO2FBQTVCO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3JILE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ1MscURBQWdCLEdBQTFCLFVBQTJCLE1BQTBCO1FBQ2pELGlCQUFNLGdCQUFnQixZQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLDJEQUFXLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRyxDQUFDO0lBQ0wsQ0FBQztJQUNPLG1EQUFjLEdBQXRCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3RFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNoQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDN0UsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztnQkFBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFDLENBQUM7SUFDUyxpREFBWSxHQUF0QjtRQUNJLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNTLG9EQUFlLEdBQXpCLFVBQTBCLEtBQVU7UUFDaEMsTUFBTSxDQUFDLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ1MseURBQW9CLEdBQTlCLFVBQStCLEdBQVE7UUFDbkMsSUFBSSxXQUFXLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0QsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7UUFDakMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUNTLG1EQUFjLEdBQXhCLFVBQXlCLFFBQWE7UUFDbEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNTLG1EQUFjLEdBQXhCLFVBQXlCLFFBQWEsRUFBRSxHQUErQjtRQUNuRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDaEIsS0FBSyxDQUFDO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUVPLHVEQUFrQixHQUExQixVQUEyQixhQUFrQixFQUFFLEtBQWE7UUFDeEQsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNwRixDQUFDO0lBQ1MsZ0RBQVcsR0FBckIsVUFBc0IsR0FBK0IsRUFBRSxhQUFrQixFQUFFLE1BQXVCO1FBQXZCLHVDQUF1QjtRQUM5RixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUNMLGlDQUFDO0FBQUQsQ0FBQyxDQXhIK0MscUdBQStCOztBQUNwRSxzQ0FBVyxHQUFHLEdBQUcsQ0FBQztBQXlIN0IsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0lBQzFILEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUN6SSxjQUFjLE1BQU0sQ0FBQyxJQUFJLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFFdEYseUVBQWUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLFVBQUMsSUFBSSxJQUFPLElBQUksQ0FBQyxHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMscUdBQStCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvSXpMO0FBQ2tEO0FBQzFDO0FBQ0k7QUFDVTtBQUVOO0FBQzZCO0FBU3pFO0lBQTJDLHdGQUFJO0lBTzNDLCtCQUFtQixJQUFnQixFQUFFLEtBQW9CO1FBQXRDLGtDQUFnQjtRQUFFLG9DQUFvQjtRQUF6RCxZQUNJLGlCQUFPLFNBSVY7UUFMa0IsVUFBSSxHQUFKLElBQUksQ0FBWTtRQUg1QixnQkFBVSxHQUFZLEtBQUssQ0FBQztRQUNuQyxnQkFBVSxHQUEyQixJQUFJLEtBQUssRUFBbUIsQ0FBQztRQUk5RCxLQUFJLENBQUMsYUFBYSxHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDakQsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQzNELENBQUM7SUFDTSx1Q0FBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQzlCLENBQUM7SUFDRCx1Q0FBTyxHQUFQLFVBQVEsSUFBdUI7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELHNCQUFXLHdDQUFLO2FBQWhCLGNBQXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNsRixVQUFpQixLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BRG1CO0lBRWxGLHNCQUFXLDJDQUFRO2FBQW5CLGNBQXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDcEQsc0JBQVcsNENBQVM7YUFBcEI7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEVBQUUsRUFBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2pGLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDZixDQUFDOzs7T0FBQTtJQUNELHNCQUFXLDhDQUFXO2FBQXRCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDckUsVUFBdUIsS0FBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUROO0lBRXJFLHNCQUFXLGlEQUFjO2FBQXpCLGNBQWlELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNuRixzQkFBVyx3Q0FBSzthQUFoQjtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN4RSxDQUFDO2FBQ0QsVUFBaUIsS0FBVTtZQUN2QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0wsQ0FBQzs7O09BTEE7SUFNTSw4Q0FBYyxHQUFyQixVQUFzQixRQUFhO0lBQ25DLENBQUM7SUFDRCxpQkFBaUI7SUFDVixpREFBaUIsR0FBeEIsY0FBcUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELG1CQUFtQjtJQUNaLHlDQUFTLEdBQWhCLGNBQXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7SUFDeEUsNEJBQUM7QUFBRCxDQUFDLENBN0MwQyxtREFBSSxHQTZDOUM7O0FBRUQ7SUFBK0MsNEZBQVE7SUFLbkQsbUNBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FFZDtRQUhrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBSnZCLG1CQUFhLEdBQVcsQ0FBQyxDQUFDO1FBRTNCLGNBQVEsR0FBVyxFQUFFLENBQUM7UUFDckIsaUJBQVcsR0FBaUMsSUFBSSxLQUFLLEVBQXlCLENBQUM7UUFvRS9FLGlDQUEyQixHQUFHLEtBQUssQ0FBQztRQWpFeEMsS0FBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7O0lBQ3JDLENBQUM7SUFDTSwyQ0FBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBQ0Qsc0JBQVcsNENBQUs7YUFBaEIsY0FBbUQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2FBQzdFLFVBQWlCLEtBQW1DO1lBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDcEQsQ0FBQzs7O09BTDRFO0lBTXRFLDJDQUFPLEdBQWQsVUFBZSxJQUFZLEVBQUUsS0FBb0I7UUFBcEIsb0NBQW9CO1FBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNPLDZEQUF5QixHQUFqQztRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxVQUFVLEtBQUs7WUFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxVQUFVLEtBQWMsRUFBRSxXQUFvQjtZQUFFLGVBQWlDO2lCQUFqQyxVQUFpQyxFQUFqQyxxQkFBaUMsRUFBakMsSUFBaUM7Z0JBQWpDLDhCQUFpQzs7WUFDdkcsRUFBRSxFQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDckIsRUFBRSxFQUFDLENBQUMsV0FBVyxDQUFDO2dCQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDakMsSUFBSSxNQUFNLEdBQUcsV0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsSUFBSSxZQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsU0FBTSxLQUFLLEVBQUMsQ0FBQztZQUMxRixFQUFFLEVBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QixHQUFHLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNELDhEQUEwQixHQUExQjtRQUNJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELHNCQUFXLCtDQUFRO2FBQW5CLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUM1RCxVQUFvQixLQUFhO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRCxDQUFDOzs7T0FMMkQ7SUFNckQsMkNBQU8sR0FBZDtRQUNJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSyxFQUFFLENBQUM7WUFDUixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDcEIsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRVMsa0RBQWMsR0FBeEI7UUFDSSxpQkFBTSxjQUFjLFdBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ1Msa0RBQWMsR0FBeEIsVUFBeUIsSUFBWSxFQUFFLEtBQWE7UUFDaEQsTUFBTSxDQUFDLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDUyxzREFBa0IsR0FBNUI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDN0MsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkQsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNMLENBQUM7SUFDUyxpREFBYSxHQUF2QjtRQUNJLElBQUksS0FBSyxHQUFHLGlCQUFNLGFBQWEsV0FBRSxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxLQUFLLEdBQUcsSUFBSSxtRUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDcEMsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNNLDZDQUFTLEdBQWhCLFVBQWlCLFlBQTRCO1FBQTVCLGtEQUE0QjtRQUN6QyxJQUFJLEdBQUcsR0FBRyxpQkFBTSxTQUFTLFlBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsRUFBRSxFQUFDLENBQUMsR0FBRyxDQUFDO1lBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDUyxtREFBZSxHQUF6QixVQUEwQixZQUFxQjtRQUMzQyxHQUFHLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsRUFBRSxFQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtRUFBbUIsRUFBRSxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsRUFBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELG1CQUFtQjtJQUNuQix3REFBb0IsR0FBcEIsVUFBcUIsSUFBWTtRQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCx3REFBb0IsR0FBcEIsVUFBcUIsSUFBWSxFQUFFLEtBQVU7UUFDekMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNaLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFDRCxxREFBaUIsR0FBakI7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUNMLGdDQUFDO0FBQUQsQ0FBQyxDQXZJOEMsMkRBQVEsR0F1SXREOztBQUVELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUM7SUFDM0ksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFDdEosY0FBYyxNQUFNLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTNELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUU7SUFDakcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUM3RyxjQUFjLE1BQU0sQ0FBQyxJQUFJLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRTNFLHlFQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxVQUFDLElBQUksSUFBTyxJQUFJLENBQUMsR0FBRyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FDaE5oSTtBQUNVO0FBQ1M7QUFFM0Q7SUFBNkMsMEZBQW9CO0lBQzdELGlDQUFtQixJQUFZO1FBQS9CLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBQ2Q7UUFGa0IsVUFBSSxHQUFKLElBQUksQ0FBUTs7SUFFL0IsQ0FBQztJQUNNLHlDQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFDRCw0REFBMEIsR0FBMUIsY0FBK0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakQsOEJBQUM7QUFBRCxDQUFDLENBUjRDLGtGQUFvQixHQVFoRTs7QUFFRCwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxjQUFjLE1BQU0sQ0FBQyxJQUFJLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBRXhILHlFQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxVQUFDLElBQUksSUFBTyxJQUFJLENBQUMsR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyx5RUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQmpJO0FBQ0Y7QUFDSTtBQUNVO0FBQ0k7QUFFdEQ7SUFBeUMsc0ZBQVE7SUFRN0MsNkJBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FJZDtRQUxrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBRTNCLEtBQUksQ0FBQyxLQUFLLEdBQUcsNkRBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDekMsS0FBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDOUQsS0FBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQ2xFLENBQUM7SUFDRCxzQkFBSSwyQ0FBVTthQUFkLGNBQStCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNuRCxVQUFlLFFBQW9CO1lBQy9CLDZEQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN0RCxDQUFDOzs7T0FKa0Q7SUFLbkQsc0JBQUksa0RBQWlCO2FBQXJCO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUNqRCxDQUFDOzs7T0FBQTtJQUNNLHFDQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFDRCx3REFBMEIsR0FBMUIsY0FBK0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEMsNENBQWMsR0FBckIsY0FBbUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUMsMENBQVksR0FBbkIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFL0Msc0JBQVcsbURBQWtCO2FBQTdCLGNBQTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUM7YUFDbEYsVUFBOEIsS0FBYSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUM7OztPQUROO0lBRWxGLHNCQUFXLHNEQUFxQjthQUFoQyxjQUF1RCxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUM7OztPQUFBO0lBQUEsQ0FBQztJQUNoRyxzQkFBVyxtREFBa0I7YUFBN0IsY0FBMEMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBQzthQUNsRixVQUE4QixLQUFhLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBQzs7O09BRE47SUFFbEYsc0JBQVcsc0RBQXFCO2FBQWhDLGNBQXVELE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBQzs7O09BQUE7SUFBQSxDQUFDO0lBQ3BHLDBCQUFDO0FBQUQsQ0FBQyxDQXBDd0MsMkRBQVE7O0FBQ3RDLHFDQUFpQixHQUFnQixFQUFFLENBQUM7QUFvQy9DLDZEQUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsSUFBSSxNQUFNLENBQUMsNkRBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsRUFBRSxLQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7SUFDbFAsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFDO0lBQ3ZILEVBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBQyxDQUFDLEVBQUUsY0FBYyxNQUFNLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvTCx5RUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBQyxJQUFJLElBQU8sTUFBTSxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FDL0N2RDtBQUNWO0FBQ0o7QUFDa0I7QUFFdEQ7SUFBdUMsb0ZBQVE7SUFJM0MsMkJBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FFZDtRQUhrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBSHhCLFVBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsZUFBUyxHQUFXLE1BQU0sQ0FBQztRQUk5QixLQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDM0QsQ0FBQztJQUNNLG1DQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxtQ0FBTyxHQUFQLGNBQXNCLE1BQU0sQ0FBQyxpQkFBTSxPQUFPLFdBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsc0RBQTBCLEdBQTFCLGNBQStCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLHNCQUFXLDBDQUFXO2FBQXRCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDckUsVUFBdUIsS0FBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUROO0lBRXJFLHNCQUFXLDZDQUFjO2FBQXpCLGNBQWdELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN4RSx1Q0FBVyxHQUFyQixVQUFzQixRQUFhO1FBQy9CLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsaUJBQU0sV0FBVyxZQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDUyw0Q0FBZ0IsR0FBMUIsVUFBMkIsUUFBYTtRQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDL0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0QsQ0FBQztRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNPLG9DQUFRLEdBQWhCLFVBQWlCLEtBQUs7UUFDbEIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0wsd0JBQUM7QUFBRCxDQUFDLENBOUJzQywyREFBUSxHQThCOUM7O0FBRUQsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFO0lBQ3pOLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFDLENBQUMsRUFBRSxjQUFjLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRTFLLHlFQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFDLElBQUksSUFBTyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hDdEU7QUFDcUQ7QUFDbkI7QUFHTDtBQUU1RDtJQUE0Qyx5RkFBeUI7SUFDakUsZ0NBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQU9mO1FBTkcsS0FBSSxDQUFDLEtBQUssR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksR0FBRyxLQUFJLENBQUM7UUFDaEIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRztZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQzs7SUFDTCxDQUFDO0lBQ0Qsc0JBQWMsNENBQVE7YUFBdEIsY0FBa0QsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFxQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDdEcsdUNBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsTUFBTSxDQUFDLENBQ0gsOERBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUN4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQ2QsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFDUyx5Q0FBUSxHQUFsQjtRQUNJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0Qsc0JBQWMsNkNBQVM7YUFBdkIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3JDLDJDQUFVLEdBQXBCLFVBQXFCLEdBQVcsRUFBRSxJQUFTLEVBQUUsT0FBZ0I7UUFDekQsTUFBTSxDQUFDLHFEQUFDLDBCQUEwQixJQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxHQUFJLENBQUM7SUFDL00sQ0FBQztJQUNMLDZCQUFDO0FBQUQsQ0FBQyxDQS9CMkMsd0ZBQXlCLEdBK0JwRTs7QUFDRDtJQUFnRCw2RkFBaUI7SUFLN0Qsb0NBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQU1mO1FBTEcsS0FBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLEtBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixLQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakMsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdCLEtBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQ3pELENBQUM7SUFDRCw4REFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxpQkFBTSx5QkFBeUIsWUFBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUNELG1EQUFjLEdBQWQsVUFBZSxLQUFLO1FBQ2hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNaLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDdkIsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDTCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCwyQ0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDOUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN2RixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM5RCxJQUFJLFFBQVEsR0FBRyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ1osUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUNwRyxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzdHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELHNCQUFjLGtEQUFVO2FBQXhCLGNBQWtDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3hELG1EQUFjLEdBQXhCLFVBQXlCLFNBQWtCLEVBQUUsUUFBYSxFQUFFLFNBQXNCO1FBQzlFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxDQUFDLDhEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUTtZQUNsRCxnRUFBTyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO2dCQUMzQixnRUFBTyxJQUFJLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsR0FBSTtnQkFDdEksbUVBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQVEsQ0FDckI7WUFDWCxTQUFTLENBQ1IsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFDUyxnREFBVyxHQUFyQjtRQUNJLE1BQU0sQ0FBQyxDQUFDLDhEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFBRSxxREFBQyx3RkFBeUIsSUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFNLENBQUMsQ0FBQztJQUNqSyxDQUFDO0lBQ0wsaUNBQUM7QUFBRCxDQUFDLENBaEUrQyxnRkFBaUIsR0FnRWhFOztBQUVELG1GQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBQyxLQUFLO0lBQzdELE1BQU0sQ0FBQyxvREFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzRzRCO0FBQ2tDO0FBRUE7QUFDTDtBQUNWO0FBRWxEO0lBQTRDLHlGQUF5QjtJQUNqRSxnQ0FBWSxLQUFVO1FBQXRCLFlBQ0ksa0JBQU0sS0FBSyxDQUFDLFNBUWY7UUFQRyxLQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMvRCxJQUFJLElBQUksR0FBRyxLQUFJLENBQUM7UUFDaEIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRztZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBQ0YsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDekQsQ0FBQztJQUNELHNCQUFjLDRDQUFRO2FBQXRCLGNBQWtELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBcUMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3RHLDBEQUF5QixHQUF6QixVQUEwQixTQUFjO1FBQ3BDLGlCQUFNLHlCQUF5QixZQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFDRCwrQ0FBYyxHQUFkLFVBQWUsS0FBSztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsdUNBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDaEcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxDQUNILDhEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDNUIsTUFBTTtZQUNOLE9BQU8sQ0FDRixDQUNULENBQUM7SUFDTixDQUFDO0lBQ1MsNkNBQVksR0FBdEI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQUUsTUFBTSxDQUFDLENBQUMsOERBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBTyxDQUFDLENBQUM7UUFDM0gsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLE1BQU0sR0FBRyxpRUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFHLElBQUksQ0FBQyxJQUFJLENBQVUsQ0FBQztZQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsRUFBRSxDQUFDLENBQUMsdURBQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyx1REFBTyxDQUFDLE9BQU8sSUFBSSxzRkFBZSxDQUFDLHVEQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRixRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQ0gsaUVBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDekksaUVBQVEsS0FBSyxFQUFDLEVBQUUsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBVTtZQUN2RCxPQUFPLENBQ0MsQ0FDWixDQUFDO0lBQ04sQ0FBQztJQUNTLDRDQUFXLEdBQXJCO1FBQ0ksSUFBSSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLDhEQUFLLEtBQUssRUFBRSxLQUFLO1lBQUUscURBQUMsd0ZBQXlCLElBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBTSxDQUFDO0lBQ2hKLENBQUM7SUFDTCw2QkFBQztBQUFELENBQUMsQ0F4RDJDLHdGQUF5QixHQXdEcEU7O0FBRUQsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxVQUFDLEtBQUs7SUFDN0QsTUFBTSxDQUFDLG9EQUFtQixDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNuRTRCO0FBQ2tDO0FBRUw7QUFFNUQ7SUFBd0MscUZBQXlCO0lBQzdELDRCQUFZLEtBQVU7UUFBdEIsWUFDSSxrQkFBTSxLQUFLLENBQUMsU0FHZjtRQUZHLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDL0IsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDekQsQ0FBQztJQUNELHNCQUFjLHdDQUFRO2FBQXRCLGNBQThDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBaUMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlGLDJDQUFjLEdBQWQsVUFBZSxLQUFLO1FBQ2hCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMzQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNsQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELG1DQUFNLEdBQU47UUFDSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN0QixTQUFTLEdBQUcsZ0VBQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQztRQUMvRixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQ0g7WUFDSyxTQUFTO1lBQ1QsR0FBRyxDQUNGLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFDUyx3Q0FBVyxHQUFyQjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxDQUFDOztZQUFPLDhEQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFJLENBQU0sQ0FBQyxDQUFDO0lBQ3ZJLENBQUM7SUFDTCx5QkFBQztBQUFELENBQUMsQ0FoQ3VDLHdGQUF5QixHQWdDaEU7O0FBRUQsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUs7SUFDekQsTUFBTSxDQUFDLG9EQUFtQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUN6QzRCO0FBQ2tDO0FBRUw7QUFFNUQ7SUFBd0MscUZBQXlCO0lBQzdELDRCQUFZLEtBQVU7ZUFDbEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2hCLENBQUM7SUFDRCxzQkFBYyx3Q0FBUTthQUF0QixjQUE4QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQWlDLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUM5RixtQ0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksU0FBUyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEQsTUFBTSxDQUFDLENBQUMsOERBQUssdUJBQXVCLEVBQUUsU0FBUyxHQUFJLENBQUUsQ0FBQztJQUMxRCxDQUFDO0lBQ0wseUJBQUM7QUFBRCxDQUFDLENBVnVDLHdGQUF5QixHQVVoRTs7QUFFRCxtRkFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSztJQUN6RCxNQUFNLENBQUMsb0RBQW1CLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQjRCO0FBQ3FEO0FBR3hCO0FBRTVEO0lBQTBDLHVGQUF5QjtJQUMvRCw4QkFBWSxLQUFVO2VBQ2xCLGtCQUFNLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBQ0Qsc0JBQWMsMENBQVE7YUFBdEIsY0FBZ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFtQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDbEcscUNBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsZ0VBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUFJLEdBQUcsRUFBRSxHQUFHLElBQUcsTUFBTSxDQUFDLElBQUksQ0FBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMscURBQUMsdUJBQXVCLElBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUMsQ0FBQztRQUNsTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQ0gsZ0VBQU8sU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUMzQjtnQkFDSTtvQkFDSyxPQUFPO29CQUNQLE9BQU8sQ0FDUCxDQUNEO1lBQ1Isb0VBQ0ssSUFBSSxDQUNELENBQ0wsQ0FDVixDQUFDO0lBQ04sQ0FBQztJQUNMLDJCQUFDO0FBQUQsQ0FBQyxDQW5DeUMsd0ZBQXlCLEdBbUNsRTs7QUFFRDtJQUE2QywwRkFBaUI7SUFJMUQsaUNBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQUtmO1FBSkcsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLEtBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyQixLQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDekQsQ0FBQztJQUNELGdEQUFjLEdBQWQsVUFBZSxLQUFLO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCwyREFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxpQkFBTSx5QkFBeUIsWUFBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBQ0Qsd0NBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsaUVBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQU0sR0FBRyxJQUFJLENBQUM7UUFDdEUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLEdBQUcsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDL0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwRSxJQUFJLEVBQUUsR0FBRyw2REFBSSxHQUFHLEVBQUUsR0FBRztnQkFBRSxnRUFBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxPQUFPLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBSyxDQUFDO1lBQzlMLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDO1lBQUssT0FBTztZQUFFLEdBQUcsQ0FBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNMLDhCQUFDO0FBQUQsQ0FBQyxDQW5DNEMsZ0ZBQWlCLEdBbUM3RDs7QUFFRCxtRkFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQUMsS0FBSztJQUMzRCxNQUFNLENBQUMsb0RBQW1CLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEY0QjtBQUNxRDtBQUVmO0FBR1Q7QUFFNUQ7SUFBa0QsK0ZBQXlCO0lBQ3ZFLHNDQUFZLEtBQVU7ZUFDbEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2hCLENBQUM7SUFDRCxzQkFBYyxrREFBUTthQUF0QixjQUF3RCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQTJDLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNsSCw2Q0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLEdBQUcsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksV0FBVyxHQUFHLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyw2REFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQU8sQ0FBQyxDQUFDO1FBQ2pHLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxxREFBQywrQkFBK0IsSUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFJLENBQUMsQ0FBQztRQUM3SixDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUUsTUFBTSxDQUFDLENBQ0gsOERBQU0sS0FBSyxFQUFFLFFBQVE7WUFDakIsZ0VBQU8sU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtnQkFDM0I7b0JBQ0k7d0JBQ0ksZ0VBQVM7d0JBQ1IsT0FBTyxDQUNQLENBQ0Q7Z0JBQ1Isb0VBQ0ssSUFBSSxDQUNELENBQ0osQ0FDTixDQUNULENBQUM7SUFDTixDQUFDO0lBQ0wsbUNBQUM7QUFBRCxDQUFDLENBdENpRCx3RkFBeUIsR0FzQzFFOztBQUVEO0lBQXFELGtHQUFpQjtJQUdsRSx5Q0FBWSxLQUFVO1FBQXRCLFlBQ0ksa0JBQU0sS0FBSyxDQUFDLFNBRWY7UUFERyxLQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUM5QixDQUFDO0lBQ0QsbUVBQXlCLEdBQXpCLFVBQTBCLFNBQWM7UUFDcEMsaUJBQU0seUJBQXlCLFlBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ08sdURBQWEsR0FBckIsVUFBc0IsU0FBYztRQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxnREFBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMzQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksTUFBTSxHQUFHLHFEQUFDLDRFQUFvQixJQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFJO1lBQ3hHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyw2REFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUM7Z0JBQUcsTUFBTTtnQkFBRSxNQUFNLENBQU0sQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQztZQUFJLGlFQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFNO1lBQUMsR0FBRyxDQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ1Msc0RBQVksR0FBdEIsVUFBdUIsSUFBd0I7UUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDTCxzQ0FBQztBQUFELENBQUMsQ0E3Qm9ELGdGQUFpQixHQTZCckU7O0FBRUQsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLFVBQUMsS0FBSztJQUNuRSxNQUFNLENBQUMsb0RBQW1CLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakY0QjtBQUNxRDtBQUVmO0FBR1Q7QUFFNUQ7SUFBaUQsOEZBQXlCO0lBQ3RFLHFDQUFZLEtBQVU7UUFBdEIsWUFDSSxrQkFBTSxLQUFLLENBQUMsU0FFZjtRQURHLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBQzlCLENBQUM7SUFDRCxzQkFBYyxpREFBUTthQUF0QixjQUF1RCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQTBDLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNoSCwrREFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxpQkFBTSx5QkFBeUIsWUFBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDTyxtREFBYSxHQUFyQixVQUFzQixTQUFjO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEdBQUc7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCx5REFBbUIsR0FBbkIsVUFBb0IsS0FBSztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCw0Q0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLEdBQUcsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksV0FBVyxHQUFHLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyw2REFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQU8sQ0FBQyxDQUFDO1FBQ2pHLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxxREFBQyw4QkFBOEIsSUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUksQ0FBQyxDQUFDO1FBQy9MLENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3RSxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0VBQVMsR0FBRyxJQUFJLENBQUM7UUFDekQsTUFBTSxDQUFDLENBQ0g7WUFDSSw4REFBTSxLQUFLLEVBQUUsUUFBUTtnQkFDakIsZ0VBQU8sU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtvQkFDM0I7d0JBQ0k7NEJBQ0ssT0FBTzs0QkFDUCxXQUFXLENBQ1YsQ0FDRjtvQkFDUixvRUFDSyxJQUFJLENBQ0QsQ0FDSixDQUNOO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQ3hCLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFDUyx3REFBa0IsR0FBNUI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNwQyxNQUFNLENBQUMsZ0VBQU8sU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUksQ0FBQztJQUNuSSxDQUFDO0lBQ0wsa0NBQUM7QUFBRCxDQUFDLENBL0RnRCx3RkFBeUIsR0ErRHpFOztBQUVEO0lBQW9ELGlHQUFpQjtJQUtqRSx3Q0FBWSxLQUFVO1FBQXRCLFlBQ0ksa0JBQU0sS0FBSyxDQUFDLFNBRWY7UUFERyxLQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUM5QixDQUFDO0lBQ0Qsa0VBQXlCLEdBQXpCLFVBQTBCLFNBQWM7UUFDcEMsaUJBQU0seUJBQXlCLFlBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ08sc0RBQWEsR0FBckIsVUFBc0IsU0FBYztRQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELCtEQUFzQixHQUF0QixVQUF1QixLQUFLO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsK0NBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLE1BQU0sR0FBRyxxREFBQyw0RUFBb0IsSUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBSSxDQUFDO1lBQ3pHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsR0FBRyxDQUFDLElBQUksQ0FBQyw2REFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUM7Z0JBQUcsTUFBTTtnQkFBRSxNQUFNLENBQU0sQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLDZEQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBRyxZQUFZLENBQU0sQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxpRUFBSyxHQUFHLENBQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDUyx1REFBYyxHQUF4QixVQUF5QixJQUF3QjtRQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNTLHFEQUFZLEdBQXRCO1FBQ0ksTUFBTSxDQUFDLGdFQUFPLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFJLENBQUM7SUFDekksQ0FBQztJQUNMLHFDQUFDO0FBQUQsQ0FBQyxDQTVDbUQsZ0ZBQWlCLEdBNENwRTs7QUFFRCxtRkFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLFVBQUMsS0FBSztJQUNsRSxNQUFNLENBQUMsb0RBQW1CLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6SDRCO0FBQ3FEO0FBR3hCO0FBRTVEO0lBQWdELDZGQUF5QjtJQUNyRSxvQ0FBWSxLQUFVO2VBQ2xCLGtCQUFNLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBQ0Qsc0JBQWMsZ0RBQVE7YUFBdEIsY0FBc0QsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUF5QyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDOUcsMkNBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxNQUFNLENBQUMsQ0FDSCxnRUFBTyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQzNCLG9FQUNDLElBQUksQ0FDRyxDQUNKLENBQ1gsQ0FBQztJQUNOLENBQUM7SUFDUyw4Q0FBUyxHQUFuQixVQUFvQixHQUFXLEVBQUUsS0FBbUM7UUFDaEUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkRBQUksR0FBRyxFQUFFLE9BQU8sR0FBRyxDQUFDO2dCQUFFLCtEQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBRyxJQUFJLENBQUMsU0FBUyxDQUFRLENBQUssQ0FBQyxDQUFDO1lBQ2xHLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkRBQUksR0FBRyxFQUFFLE9BQU8sR0FBRyxDQUFDLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLDZEQUFJLEdBQUcsRUFBRSxHQUFHLElBQUcsR0FBRyxDQUFNLENBQUM7SUFDcEMsQ0FBQztJQUNTLCtDQUFVLEdBQXBCLFVBQXFCLElBQTJCLEVBQUUsT0FBZ0I7UUFDOUQsSUFBSSxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNyRCxNQUFNLENBQUMscURBQUMsOEJBQThCLElBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxHQUFJLENBQUM7SUFDOUgsQ0FBQztJQUNMLGlDQUFDO0FBQUQsQ0FBQyxDQWpDK0Msd0ZBQXlCLEdBaUN4RTs7QUFFRDtJQUFvRCxpR0FBaUI7SUFHakUsd0NBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQU1mO1FBTEcsS0FBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixLQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzlDLEtBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDckQsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDckQsQ0FBQztJQUNELHVEQUFjLEdBQWQsVUFBZSxLQUFLO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxxREFBWSxHQUFaLFVBQWEsS0FBSztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxrRUFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFDRCwrQ0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUM5QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLENBQUMsOERBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQU8sQ0FBQyxDQUFDO1FBQzdILE1BQU0sQ0FBQyxDQUFDLGdFQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsR0FBSSxDQUFDLENBQUM7SUFDek4sQ0FBQztJQUNELHNCQUFjLHlEQUFhO2FBQTNCLGNBQXdDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN4RCxxQ0FBQztBQUFELENBQUMsQ0E3Qm1ELGdGQUFpQixHQTZCcEU7O0FBRUQsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxVQUFDLEtBQUs7SUFDakUsTUFBTSxDQUFDLG9EQUFtQixDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDMUU0QjtBQUNrQztBQUdBO0FBQ0w7QUFFNUQ7SUFBOEMsMkZBQXlCO0lBQ25FLGtDQUFZLEtBQVU7UUFBdEIsWUFDSSxrQkFBTSxLQUFLLENBQUMsU0FRZjtRQVBHLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSSxDQUFDO1FBQ2hCLEtBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEdBQUc7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUNGLEtBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQ3pELENBQUM7SUFDRCxzQkFBYyw4Q0FBUTthQUF0QixjQUFvRCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQXVDLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUMxRyw0REFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxpQkFBTSx5QkFBeUIsWUFBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxpREFBYyxHQUFkLFVBQWUsS0FBSztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QseUNBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsTUFBTSxDQUFDLENBQ0gsOERBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUN4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQ2QsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFDUywyQ0FBUSxHQUFsQjtRQUNJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0Qsc0JBQWMsK0NBQVM7YUFBdkIsY0FBaUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDeEQsNkNBQVUsR0FBbEIsVUFBbUIsR0FBVyxFQUFFLElBQWUsRUFBRSxPQUFnQjtRQUM3RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3ZGLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzlELElBQUksUUFBUSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksU0FBUyxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUN4RyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDUyw4Q0FBVyxHQUFyQixVQUFzQixHQUFXLEVBQUUsSUFBZSxFQUFFLFNBQWtCLEVBQUUsUUFBYSxFQUFFLFNBQXNCLEVBQUUsT0FBZ0I7UUFDM0gsSUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNoRCxNQUFNLENBQUMsQ0FBQyw4REFBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUTtZQUN4RCxnRUFBTyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQyxnRUFBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBQyxPQUFPLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFJO2dCQUNyTCwrREFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFRLENBQ3ZDO1lBQ1gsU0FBUyxDQUNSLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBQ1MsOENBQVcsR0FBckI7UUFDSSxNQUFNLENBQUMsQ0FBQyw4REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQUUscURBQUMsd0ZBQXlCLElBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBTSxDQUFDLENBQUM7SUFDaEssQ0FBQztJQUNMLCtCQUFDO0FBQUQsQ0FBQyxDQTdENkMsd0ZBQXlCLEdBNkR0RTs7QUFFRCxtRkFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFVBQUMsS0FBSztJQUMvRCxNQUFNLENBQUMsb0RBQW1CLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4RTRCO0FBQ2tDO0FBQ0E7QUFHTDtBQUU1RDtJQUEwQyx1RkFBeUI7SUFDL0QsOEJBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQUVmO1FBREcsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDekQsQ0FBQztJQUNELHNCQUFjLDBDQUFRO2FBQXRCLGNBQWdELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBbUMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ2xHLDZDQUFjLEdBQWQsVUFBZSxLQUFLO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxxQ0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDN0YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0YsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlELElBQUksWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEYsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM5RyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNqRSxNQUFNLENBQUMsQ0FDSCw4REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ3hCLE1BQU07WUFDTixPQUFPLENBQ04sQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUNTLHlDQUFVLEdBQXBCLFVBQXFCLEdBQVcsRUFBRSxJQUFlLEVBQUUsT0FBZSxFQUFFLE9BQWU7UUFDL0UsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUM5QixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFBQyxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ3RDLElBQUksR0FBRyxHQUFHLE9BQU8sR0FBRyxtRUFBTyxPQUFPLENBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEQsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLG1FQUFPLE9BQU8sQ0FBUSxHQUFHLElBQUksQ0FBQztRQUNsRCxNQUFNLENBQUMsZ0VBQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUztZQUN4QyxnRUFBTyxJQUFJLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUk7WUFDdk0sR0FBRztZQUNKLG1FQUFPLElBQUksQ0FBQyxJQUFJLENBQVE7WUFDdkIsR0FBRyxDQUNJLENBQUM7SUFDakIsQ0FBQztJQUNTLDBDQUFXLEdBQXJCO1FBQ0ksTUFBTSxDQUFDLENBQUMsOERBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUFFLHFEQUFDLHdGQUF5QixJQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQU0sQ0FBQyxDQUFDO0lBQ2hLLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUMsQ0E1Q3lDLHdGQUF5QixHQTRDbEU7O0FBQ0QsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFDLEtBQUs7SUFDM0QsTUFBTSxDQUFDLG9EQUFtQixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUN0RDRCO0FBQ2tDO0FBRUw7QUFHNUQ7SUFBd0MscUZBQXlCO0lBQzdELDRCQUFZLEtBQVU7UUFBdEIsWUFDSSxrQkFBTSxLQUFLLENBQUMsU0FJZjtRQUhHLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbEQsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNyRCxLQUFJLENBQUMsWUFBWSxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNyRCxDQUFDO0lBQ0Qsc0JBQWMsd0NBQVE7YUFBdEIsY0FBOEMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFpQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDOUYsc0RBQXlCLEdBQXpCLFVBQTBCLFNBQWM7UUFDcEMsaUJBQU0seUJBQXlCLFlBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsMkNBQWMsR0FBZCxVQUFlLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELHlDQUFZLEdBQVosVUFBYSxLQUFLO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxtQ0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxDQUFDLDhEQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBTyxDQUFDO1FBQzdGLE1BQU0sQ0FBQyxDQUNILGdFQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUksQ0FDaFAsQ0FBQztJQUNOLENBQUM7SUFDTCx5QkFBQztBQUFELENBQUMsQ0EzQnVDLHdGQUF5QixHQTJCaEU7O0FBRUQsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUs7SUFDekQsTUFBTSxDQUFDLG9EQUFtQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FDckN5QjtBQUNTO0FBRXJDO0lBQXVDLG9GQUFJO0lBU3ZDLDJCQUFZLE9BQVk7UUFBeEIsWUFDSSxpQkFBTyxTQUlWO1FBSEcsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLEtBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNuQyxLQUFJLENBQUMsYUFBYSxHQUFtQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUN2RSxDQUFDO0lBQ00sbUNBQU8sR0FBZCxjQUE0QixNQUFNLENBQUMsUUFBUSxFQUFDLENBQUM7SUFDN0Msc0JBQVcscUNBQU07YUFBakIsY0FBbUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUM3RCxzQkFBVyx3Q0FBUzthQUFwQixjQUFrQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQy9ELHNCQUFXLHlDQUFVO2FBQXJCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDakUsc0JBQVcsb0NBQUs7YUFBaEIsY0FBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDNUYsVUFBaUIsS0FBYSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BRGdDO0lBRXJGLGtDQUFNLEdBQWI7UUFDSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDTSxvQ0FBUSxHQUFmO1FBQ0ksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ1Msd0NBQVksR0FBdEIsVUFBdUIsT0FBWTtRQUMvQixNQUFNLENBQUMsSUFBSSw0REFBVyxDQUFDLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBQ1MsMENBQWMsR0FBeEIsVUFBeUIsS0FBYztRQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBQ0wsd0JBQUM7QUFBRCxDQUFDLENBakNzQyxtREFBSTs7QUFDekIsbUNBQWlCLEdBQUcsZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSmhCO0FBQ0M7QUFFeEM7SUFBNkIsMEVBQUk7SUFvQjdCO1FBQUEsWUFDSSxpQkFBTyxTQUNWO1FBSk8sYUFBTyxHQUFXLE9BQU8sQ0FBQzs7SUFJbEMsQ0FBQztJQXBCRCxzQkFBVyxvQkFBUzthQUFwQjtZQUNJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxjQUFjLEdBQUc7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVLEtBQUssRUFBRSxhQUFhLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDekQsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLGFBQWEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxLQUFLLEVBQUUsVUFBVSxLQUFLLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDekUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLGFBQWEsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLFFBQVEsRUFBRSxVQUFVLEtBQUssRUFBRSxhQUFhLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BILFdBQVcsRUFBRSxVQUFVLEtBQUssRUFBRSxhQUFhLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxSCxPQUFPLEVBQUUsVUFBVSxLQUFLLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxFQUFFLFVBQVUsS0FBSyxFQUFFLGFBQWEsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLGNBQWMsRUFBRSxVQUFVLEtBQUssRUFBRSxhQUFhLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixXQUFXLEVBQUUsVUFBVSxLQUFLLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQzthQUNsRixDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDbEMsQ0FBQzs7O09BQUE7SUFNRCxzQkFBVyw2QkFBUTthQUFuQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDdEQsVUFBb0IsS0FBYTtZQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7OztPQU5xRDtJQU8vQyx1QkFBSyxHQUFaLFVBQWEsS0FBVTtRQUNuQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBQ1MsMkJBQVMsR0FBbkIsY0FBd0IsQ0FBQztJQUNmLDJCQUFTLEdBQW5CLGNBQXdCLENBQUM7SUFDN0IsY0FBQztBQUFELENBQUMsQ0F2QzRCLG1EQUFJOztBQUN0QixzQkFBYyxHQUF3QixJQUFJLENBQUM7QUE4Q3REO0lBQW1DLGdGQUFPO0lBR3RDO1FBQUEsWUFDSSxpQkFBTyxTQUNWO1FBSFMsV0FBSyxHQUF3QixJQUFJLENBQUM7O0lBRzVDLENBQUM7SUFDTSxnQ0FBUSxHQUFmLFVBQWdCLEtBQTBCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxzQkFBVyx1Q0FBWTthQUF2QixjQUE0QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDL0Msb0JBQUM7QUFBRCxDQUFDLENBVmtDLE9BQU8sR0FVekM7O0FBRUQ7SUFBMEMsdUZBQWE7SUFHbkQ7UUFBQSxZQUNJLGlCQUFPLFNBQ1Y7UUFKTSxXQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ3JCLGVBQVMsR0FBYSxFQUFFLENBQUM7O0lBR2hDLENBQUM7SUFDTSxzQ0FBTyxHQUFkLGNBQTJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDM0Msd0NBQVMsR0FBbkIsY0FBd0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELHdDQUFTLEdBQW5CLGNBQXdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCx3Q0FBUyxHQUFqQixVQUFrQixJQUFjO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNMLENBQUM7SUFDUyw0Q0FBYSxHQUF2QixVQUF3QixJQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELDRDQUFhLEdBQXZCLFVBQXdCLElBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsMkJBQUM7QUFBRCxDQUFDLENBbEJ5QyxhQUFhLEdBa0J0RDs7QUFDRDtJQUEyQyx3RkFBYTtJQUNwRDtlQUNJLGlCQUFPO0lBQ1gsQ0FBQztJQUNNLHVDQUFPLEdBQWQsY0FBMkIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUN0RCxzQkFBVywrQ0FBWTthQUF2QixjQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDaEMseUNBQVMsR0FBbkIsY0FBd0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLDRCQUFDO0FBQUQsQ0FBQyxDQVAwQyxhQUFhLEdBT3ZEOztBQUNEO0lBQTJDLHdGQUFhO0lBSXBEO2VBQ0ksaUJBQU87SUFDWCxDQUFDO0lBQ00sdUNBQU8sR0FBZCxjQUEyQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzVDLHlDQUFTLEdBQW5CO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDTCw0QkFBQztBQUFELENBQUMsQ0FaMEMsYUFBYSxHQVl2RDs7QUFFRCwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDaEUsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRSwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsY0FBYyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzVJLCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsY0FBYyxNQUFNLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFILCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxjQUFjLE1BQU0sQ0FBQyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7Ozs7Ozs7OztBQzNHeEs7QUFBQSxJQUFJLFlBQVksR0FBRyx1QkFBdUIsRUFDdEMsUUFBUSxHQUFHLHNCQUFzQixFQUNqQyxVQUFVLEdBQUcsNkJBQTZCLEVBQzFDLE1BQU0sR0FBRyx5QkFBeUIsRUFDbEMsYUFBYSxHQUFHLDhCQUE4QixDQUFDO0FBQ25ELElBQUksYUFBYSxHQUFHLFVBQVMsRUFBRTtJQUMzQixFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RCLElBQUksTUFBTSxHQUE0RCxFQUFFLEVBQ3BFLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUM5SixXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUN4QixjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEQsV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUNELEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDZCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYztJQUNuQyxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVqRCx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7SUFDekIsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ1osSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQzdCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQixJQUFJLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxDQUFDO0FBS0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdDdUI7QUFDcUI7QUFDTSIsImZpbGUiOiIuL3BhY2thZ2VzL3N1cnZleS1hbmd1bGFyL3N1cnZleS5hbmd1bGFyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJTdXJ2ZXlcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiU3VydmV5XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA4Myk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZGY4OTI2ODg2MzEyOTBhYzM2NTYiLCJleHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0W1wiYXNzaWduXCJdIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0YXJnZXRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcclxuICAgIGZvciAodmFyIHAgaW4gYmFzZUNsYXNzKSBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IHRoaXNDbGFzczsgfVxyXG4gICAgdGhpc0NsYXNzLnByb3RvdHlwZSA9IGJhc2VDbGFzcyA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKSA6IChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn07XHJcblxyXG5kZWNsYXJlIHZhciBSZWZsZWN0O1xyXG5cclxuZXhwb3J0IHZhciBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9oZWxwZXJzLnRzIiwiZXhwb3J0IHZhciBzdXJ2ZXlMb2NhbGl6YXRpb24gPSB7XHJcbiAgICBjdXJyZW50TG9jYWxlOiBcIlwiLFxyXG4gICAgbG9jYWxlczoge30sXHJcbiAgICBnZXRTdHJpbmc6IGZ1bmN0aW9uIChzdHJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50TG9jYWxlID8gdGhpcy5sb2NhbGVzW3RoaXMuY3VycmVudExvY2FsZV0gOiBzdXJ2ZXlTdHJpbmdzO1xyXG4gICAgICAgIGlmICghbG9jIHx8ICFsb2Nbc3RyTmFtZV0pIGxvYyA9IHN1cnZleVN0cmluZ3M7XHJcbiAgICAgICAgcmV0dXJuIGxvY1tzdHJOYW1lXTtcclxuICAgIH0sXHJcbiAgICBnZXRMb2NhbGVzOiBmdW5jdGlvbiAoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xyXG4gICAgICAgIHJlcy5wdXNoKFwiXCIpO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmxvY2FsZXMpIHtcclxuICAgICAgICAgICAgcmVzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzLnNvcnQoKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG59O1xyXG5leHBvcnQgdmFyIHN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJldmlvdXNcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJOZXh0XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGVcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiT3RoZXIgKGRlc2NyaWJlKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IG9mIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlRoYW5rIHlvdSBmb3IgY29tcGxldGluZyB0aGUgc3VydmV5IVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJTdXJ2ZXkgaXMgbG9hZGluZy4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiQ2hvb3NlLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlBsZWFzZSBhbnN3ZXIgdGhlIHF1ZXN0aW9uLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHF1ZXN0aW9ucyBpbiBhbGwgcm93cy5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIGJlIG51bWVyaWMuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gc3ltYm9scy5cIixcclxuICAgIHRleHRNYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIGxlc3MgdGhhbiB7MH0gc3ltYm9scy5cIixcclxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIG1vcmUgdGhhbiB7MH0gYW5kIGxlc3MgdGhhbiB7MX0gc3ltYm9scy5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiUGxlYXNlIGZpbGwgaW4gYXQgbGVhc3QgezB9IHJvd3MuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IHswfSB2YXJpYW50cy5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlBsZWFzZSBzZWxlY3Qgbm8gbW9yZSB0aGFuIHswfSB2YXJpYW50cy5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBtb3JlIHRoYW4gezF9IGFuZCBlcXVhbCBvciBsZXNzIHRoYW4gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIGxlc3MgdGhhbiB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJUaGUgcmVxdWVzdCByZXR1cm5lZCBlcnJvciAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZW1wdHkgZGF0YSBvciB0aGUgJ3BhdGgnIHByb3BlcnR5IGlzIGluY29ycmVjdFwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJUaGUgZmlsZSBzaXplIHNob3VsZCBub3QgZXhjZWVkIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgZW50ZXIgdGhlIG90aGVyIHZhbHVlLlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJZb3VyIGZpbGUgaXMgdXBsb2FkaW5nLiBQbGVhc2Ugd2FpdCBzZXZlcmFsIHNlY29uZHMgYW5kIHRyeSBhZ2Fpbi5cIixcclxuICAgIGFkZFJvdzogXCJBZGQgcm93XCIsXHJcbiAgICByZW1vdmVSb3c6IFwiUmVtb3ZlXCIsXHJcbiAgICBjaG9pY2VzX2ZpcnN0SXRlbTogXCJmaXJzdCBpdGVtXCIsXHJcbiAgICBjaG9pY2VzX3NlY29uZEl0ZW06IFwic2Vjb25kIGl0ZW1cIixcclxuICAgIGNob2ljZXNfdGhpcmRJdGVtOiBcInRoaXJkIGl0ZW1cIixcclxuICAgIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uXCIsXHJcbiAgICBtYXRyaXhfcm93OiBcIlJvd1wiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZW5cIl0gPSBzdXJ2ZXlTdHJpbmdzO1xyXG5cclxuaWYgKCFTdHJpbmcucHJvdG90eXBlW1wiZm9ybWF0XCJdKSB7XHJcbiAgICBTdHJpbmcucHJvdG90eXBlW1wiZm9ybWF0XCJdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL3soXFxkKyl9L2csIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgICAgICA/IGFyZ3NbbnVtYmVyXVxyXG4gICAgICAgICAgICAgICAgOiBtYXRjaFxyXG4gICAgICAgICAgICAgICAgO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzIiwiaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgIHByaXZhdGUgdHlwZVZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PGFueT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzZnVuYzogKCkgPT4gQXJyYXk8YW55PiA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjbGFzc05hbWVQYXJ0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnkgPSBudWxsO1xyXG4gICAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2NhbGl6YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBvbkdldFZhbHVlOiAob2JqOiBhbnkpID0+IGFueSA9IG51bGw7XHJcbiAgICBwdWJsaWMgb25TZXRWYWx1ZTogKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkgPT4gYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwic3RyaW5nXCI7IH1cclxuICAgIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMudHlwZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVG9Vc2VHZXRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMub25HZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTsgfVxyXG4gICAgcHVibGljIGlzRGVmYXVsdFZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGVmYXVsdFZhbHVlKSA/ICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSB2YWx1ZSkgOiAhKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRWYWx1ZShvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25HZXRWYWx1ZSkgcmV0dXJuIHRoaXMub25HZXRWYWx1ZShvYmopO1xyXG4gICAgICAgIGlmKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5KSByZXR1cm4gb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XS5nZXRKc29uKCk7XHJcbiAgICAgICAgcmV0dXJuIG9ialt0aGlzLm5hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb3BlcnR5VmFsdWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmKHRoaXMuaXNMb2NhbGl6YWJsZSkgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUb1VzZVNldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5vblNldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5OyB9XHJcbiAgICBwdWJsaWMgc2V0VmFsdWUob2JqOiBhbnksIHZhbHVlOiBhbnksIGpzb25Db252OiBKc29uT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25TZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2V0VmFsdWUob2JqLCB2YWx1ZSwganNvbkNvbnYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5KSBcclxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgIGVsc2Ugb2JqW3RoaXMubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0T2JqVHlwZShvYmpUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xhc3NOYW1lUGFydCkgcmV0dXJuIG9ialR5cGU7XHJcbiAgICAgICAgcmV0dXJuIG9ialR5cGUucmVwbGFjZSh0aGlzLmNsYXNzTmFtZVBhcnQsIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmNsYXNzTmFtZVBhcnQgJiYgY2xhc3NOYW1lLmluZGV4T2YodGhpcy5jbGFzc05hbWVQYXJ0KSA8IDApID8gY2xhc3NOYW1lICsgdGhpcy5jbGFzc05hbWVQYXJ0IDogY2xhc3NOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKSByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvaWNlc2Z1bmMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMoKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDaG9pY2VzKHZhbHVlOiBBcnJheTxhbnk+LCB2YWx1ZUZ1bmM6ICgpID0+IEFycmF5PGFueT4pIHtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YUNsYXNzIHtcclxuICAgIHN0YXRpYyByZXF1aXJlZFN5bWJvbCA9ICchJztcclxuICAgIHN0YXRpYyB0eXBlU3ltYm9sID0gJzonO1xyXG4gICAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XHJcbiAgICByZXF1aXJlZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHJvcGVydGllczogQXJyYXk8YW55PiwgcHVibGljIGNyZWF0b3I6ICgpID0+IGFueSA9IG51bGwsIHB1YmxpYyBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3AgPSB0aGlzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0pO1xyXG4gICAgICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2gocHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZmluZChuYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVQcm9wZXJ0eShwcm9wSW5mbzogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gdHlwZW9mIHByb3BJbmZvID09PSBcInN0cmluZ1wiID8gcHJvcEluZm8gOiBwcm9wSW5mby5uYW1lO1xyXG4gICAgICAgIGlmICghcHJvcGVydHlOYW1lKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHByb3BlcnR5VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIHR5cGVJbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKEpzb25NZXRhZGF0YUNsYXNzLnR5cGVTeW1ib2wpO1xyXG4gICAgICAgIGlmICh0eXBlSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHR5cGVJbmRleCArIDEpO1xyXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHR5cGVJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgdmFyIHByb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICBwcm9wLnR5cGUgPSBwcm9wZXJ0eVR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcEluZm8gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AudHlwZSA9IHByb3BJbmZvLnR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuZGVmYXVsdFZhbHVlID0gcHJvcEluZm8uZGVmYXVsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVByb3BlcnR5UmVxdWlyZWQocHJvcC5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8uY2hvaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNGdW5jID0gdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNWYWx1ZSA9IHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzICE9PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHByb3Auc2V0Q2hvaWNlcyhjaG9pY2VzVmFsdWUsIGNob2ljZXNGdW5jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8ub25HZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5vbkdldFZhbHVlID0gcHJvcEluZm8ub25HZXRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8ub25TZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlID0gcHJvcEluZm8ub25TZXRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ID0gcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgdmFyIHM6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LmluZGV4T2YoXCJsb2NcIikgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHRydWU7ICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHByb3BJbmZvLmlzTG9jYWxpemFibGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5jbGFzc05hbWUgPSBwcm9wSW5mby5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmJhc2VDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuYmFzZUNsYXNzTmFtZSA9IHByb3BJbmZvLmJhc2VDbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZVBhcnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuY2xhc3NOYW1lUGFydCA9IHByb3BJbmZvLmNsYXNzTmFtZVBhcnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8uYWx0ZXJuYXRpdmVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmFsdGVybmF0aXZlTmFtZSA9IHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lLmxlbmd0aCA9PSAwIHx8IHByb3BlcnR5TmFtZVswXSAhPSBKc29uTWV0YWRhdGFDbGFzcy5yZXF1aXJlZFN5bWJvbCkgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc2xpY2UoMSk7XHJcbiAgICAgICAgdGhpcy5tYWtlUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1ha2VQcm9wZXJ0eVJlcXVpcmVkKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkUHJvcGVydGllcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVxdWlyZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhIHtcclxuICAgIHByaXZhdGUgY2xhc3NlczogSGFzaFRhYmxlPEpzb25NZXRhZGF0YUNsYXNzPiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkNsYXNzZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4+ID0ge307XHJcbiAgICBwcml2YXRlIGNsYXNzUHJvcGVydGllczogSGFzaFRhYmxlPEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4+ID0ge307XHJcbiAgICBwcml2YXRlIGNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzOiBIYXNoVGFibGU8QXJyYXk8c3RyaW5nPj4gPSB7fTtcclxuICAgIHB1YmxpYyBhZGRDbGFzcyhuYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IEFycmF5PGFueT4sIGNyZWF0b3I6ICgpID0+IGFueSA9IG51bGwsIHBhcmVudE5hbWU6IHN0cmluZyA9IG51bGwpOiBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSBuZXcgSnNvbk1ldGFkYXRhQ2xhc3MobmFtZSwgcHJvcGVydGllcywgY3JlYXRvciwgcGFyZW50TmFtZSk7XHJcbiAgICAgICAgdGhpcy5jbGFzc2VzW25hbWVdID0gbWV0YURhdGFDbGFzcztcclxuICAgICAgICBpZiAocGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXS5wdXNoKG1ldGFEYXRhQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWV0YURhdGFDbGFzcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcmUobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcclxuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzKSB7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciA9IGNyZWF0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV07XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBwcm9wZXJ0aWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBmaW5kUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSA6IEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYocHJvcGVydGllc1tpXS5uYW1lID09IHByb3BlcnR5TmFtZSkgcmV0dXJuIHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZUNsYXNzKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbkNsYXNzZXMobmFtZTogc3RyaW5nLCBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhuYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSZXF1aXJlZFByb3BlcnRpZXMobmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzW25hbWVdO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzW25hbWVdID0gcHJvcGVydGllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5SW5mbzogYW55KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuY3JlYXRlUHJvcGVydHkocHJvcGVydHlJbmZvKTtcclxuICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eVRvQ2xhc3MobWV0YURhdGFDbGFzcywgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eVRvQ2xhc3MobWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5maW5kKHByb3BlcnR5Lm5hbWUpICE9IG51bGwpIHJldHVybjtcclxuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaW5kZXggPSBtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgbWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XHJcbiAgICAgICAgdmFyIGNoaWxkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKG1ldGFEYXRhQ2xhc3MubmFtZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbY2hpbGRDbGFzc2VzW2ldLm5hbWVdID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZTogc3RyaW5nLCBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4sIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+KSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbmFtZV07XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFjYW5CZUNyZWF0ZWQgfHwgY2hpbGRyZW5baV0uY3JlYXRvcikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZpbmRDbGFzcyhuYW1lOiBzdHJpbmcpOiBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3Nlc1tuYW1lXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZmlsbFByb3BlcnRpZXMobmFtZTogc3RyaW5nLCBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eUNvcmUobWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzW2ldLCBsaXN0LCBsaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eUNvcmUocHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSwgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiwgZW5kSW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kSW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtpXS5uYW1lID09IHByb3BlcnR5Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgbGlzdC5wdXNoKHByb3BlcnR5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxpc3RbaW5kZXhdID0gcHJvcGVydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZywgbGlzdDogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGxpc3QsIG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxSZXF1aXJlZFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25FcnJvciB7XHJcbiAgICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgYXQ6IE51bWJlciA9IC0xO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEZ1bGxEZXNjcmlwdGlvbigpIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlICsgKHRoaXMuZGVzY3JpcHRpb24gPyBcIlxcblwiICsgdGhpcy5kZXNjcmlwdGlvbiA6IFwiXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihcInVua25vd25wcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSAnXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIicgaW4gY2xhc3MgJ1wiICsgY2xhc3NOYW1lICsgXCInIGlzIHVua25vd24uXCIpO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlOiBcIjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBwcm9wZXJ0aWVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSAnLic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZywgcHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKHR5cGUsIG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGF2YWlsYWJsZTogXCI7XHJcbiAgICAgICAgdmFyIHR5cGVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiJ1wiICsgdHlwZXNbaV0ubmFtZSArIFwiJ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihiYXNlQ2xhc3NOYW1lLCBcIm1pc3Npbmd0eXBlcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBtaXNzaW5nIGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICsgcHJvcGVydHlOYW1lICsgXCInLlwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbkluY29ycmVjdFR5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihiYXNlQ2xhc3NOYW1lLCBcImluY29ycmVjdHR5cGVwcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIGluY29ycmVjdCBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihcInJlcXVpcmVkcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgJ1wiICsgcHJvcGVydHlOYW1lICsgXCInIGlzIHJlcXVpcmVkIGluIGNsYXNzICdcIiArIGNsYXNzTmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uT2JqZWN0IHtcclxuICAgIHByaXZhdGUgc3RhdGljIHR5cGVQcm9wZXJ0eU5hbWUgPSBcInR5cGVcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIHBvc2l0aW9uUHJvcGVydHlOYW1lID0gXCJwb3NcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIG1ldGFEYXRhVmFsdWUgPSBuZXcgSnNvbk1ldGFkYXRhKCk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBtZXRhRGF0YSgpIHsgcmV0dXJuIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZTsgfVxyXG4gICAgcHVibGljIGVycm9ycyA9IG5ldyBBcnJheTxKc29uRXJyb3I+KCk7XHJcbiAgICBwdWJsaWMgdG9Kc29uT2JqZWN0KG9iajogYW55KTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0pzb25PYmplY3RDb3JlKG9iaiwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9PYmplY3QoanNvbk9iajogYW55LCBvYmo6IGFueSkge1xyXG4gICAgICAgIGlmICghanNvbk9iaikgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcclxuICAgICAgICBpZiAob2JqLmdldFR5cGUpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGpzb25PYmopIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09IEpzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIG9ialtrZXldID0ganNvbk9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5maW5kUHJvcGVydHkocHJvcGVydGllcywga2V5KTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdFcnJvcihuZXcgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yKGtleS50b1N0cmluZygpLCBvYmouZ2V0VHlwZSgpKSwganNvbk9iaik7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9PYmooanNvbk9ialtrZXldLCBvYmosIGtleSwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB0b0pzb25PYmplY3RDb3JlKG9iajogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcclxuICAgICAgICBpZiAoIW9iai5nZXRUeXBlKSByZXR1cm4gb2JqO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiAoIXByb3BlcnR5LmNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0W0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eS5nZXRPYmpUeXBlKG9iai5nZXRUeXBlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9Kc29uKG9iaiwgcmVzdWx0LCBwcm9wZXJ0aWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvSnNvbihvYmo6IGFueSwgcmVzdWx0OiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdmFyIGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2godGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlW2ldLCBwcm9wZXJ0eSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbHVlID0gYXJyVmFsdWUubGVuZ3RoID4gMCA/IGFyclZhbHVlIDogbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZSwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb09iaih2YWx1ZTogYW55LCBvYmo6IGFueSwga2V5OiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5Lmhhc1RvVXNlU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgcHJvcGVydHkuc2V0VmFsdWUob2JqLCB2YWx1ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUFycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld09iaiA9IHRoaXMuY3JlYXRlTmV3T2JqKHZhbHVlLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKG5ld09iai5uZXdPYmopIHtcclxuICAgICAgICAgICAgdGhpcy50b09iamVjdCh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3T2JqLm5ld09iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFuZXdPYmouZXJyb3IpIHtcclxuICAgICAgICAgICAgb2JqW3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1ZhbHVlQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSk7IH1cclxuICAgIHByaXZhdGUgY3JlYXRlTmV3T2JqKHZhbHVlOiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7IG5ld09iajogbnVsbCwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdmFsdWVbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXTtcclxuICAgICAgICBpZiAoIWNsYXNzTmFtZSAmJiBwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5LmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5jbGFzc05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmdldENsYXNzTmFtZShjbGFzc05hbWUpO1xyXG4gICAgICAgIHJlc3VsdC5uZXdPYmogPSAoY2xhc3NOYW1lKSA/IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoY2xhc3NOYW1lKSA6IG51bGw7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jaGVja05ld09iamVjdE9uRXJyb3JzKHJlc3VsdC5uZXdPYmosIHZhbHVlLCBwcm9wZXJ0eSwgY2xhc3NOYW1lKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja05ld09iamVjdE9uRXJyb3JzKG5ld09iajogYW55LCB2YWx1ZTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LCBjbGFzc05hbWU6IHN0cmluZyk6IEpzb25FcnJvciB7XHJcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcclxuICAgICAgICBpZiAobmV3T2JqKSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICBpZiAocmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVbcmVxdWlyZWRQcm9wZXJ0aWVzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHJlcXVpcmVkUHJvcGVydGllc1tpXSwgY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmJhc2VDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbk1pc3NpbmdUeXBlRXJyb3IocHJvcGVydHkubmFtZSwgcHJvcGVydHkuYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEpzb25JbmNvcnJlY3RUeXBlRXJyb3IocHJvcGVydHkubmFtZSwgcHJvcGVydHkuYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGROZXdFcnJvcihlcnJvcjogSnNvbkVycm9yLCBqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAoanNvbk9iaiAmJiBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgIGVycm9yLmF0ID0ganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXS5zdGFydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHZhbHVlVG9BcnJheSh2YWx1ZTogQXJyYXk8YW55Piwgb2JqOiBhbnksIGtleTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYob2JqW2tleV0gJiYgdmFsdWUubGVuZ3RoID4gMCkgb2JqW2tleV0uc3BsaWNlKDAsIG9ialtrZXldLmxlbmd0aCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUubmV3T2JqKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpba2V5XS5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvT2JqZWN0KHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldLnB1c2godmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kUHJvcGVydHkocHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Piwga2V5OiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgaWYgKHByb3AubmFtZSA9PSBrZXkgfHwgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPT0ga2V5KSByZXR1cm4gcHJvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvanNvbm9iamVjdC50cyIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcHR5cGVzJztcbmltcG9ydCB7IHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsIGNsb25lRWxlbWVudCBhcyBwcmVhY3RDbG9uZUVsZW1lbnQsIGgsIENvbXBvbmVudCBhcyBQcmVhY3RDb21wb25lbnQsIG9wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuXG5jb25zdCB2ZXJzaW9uID0gJzE1LjEuMCc7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxuY29uc3QgRUxFTUVOVFMgPSAnYSBhYmJyIGFkZHJlc3MgYXJlYSBhcnRpY2xlIGFzaWRlIGF1ZGlvIGIgYmFzZSBiZGkgYmRvIGJpZyBibG9ja3F1b3RlIGJvZHkgYnIgYnV0dG9uIGNhbnZhcyBjYXB0aW9uIGNpdGUgY29kZSBjb2wgY29sZ3JvdXAgZGF0YSBkYXRhbGlzdCBkZCBkZWwgZGV0YWlscyBkZm4gZGlhbG9nIGRpdiBkbCBkdCBlbSBlbWJlZCBmaWVsZHNldCBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgZm9ybSBoMSBoMiBoMyBoNCBoNSBoNiBoZWFkIGhlYWRlciBoZ3JvdXAgaHIgaHRtbCBpIGlmcmFtZSBpbWcgaW5wdXQgaW5zIGtiZCBrZXlnZW4gbGFiZWwgbGVnZW5kIGxpIGxpbmsgbWFpbiBtYXAgbWFyayBtZW51IG1lbnVpdGVtIG1ldGEgbWV0ZXIgbmF2IG5vc2NyaXB0IG9iamVjdCBvbCBvcHRncm91cCBvcHRpb24gb3V0cHV0IHAgcGFyYW0gcGljdHVyZSBwcmUgcHJvZ3Jlc3MgcSBycCBydCBydWJ5IHMgc2FtcCBzY3JpcHQgc2VjdGlvbiBzZWxlY3Qgc21hbGwgc291cmNlIHNwYW4gc3Ryb25nIHN0eWxlIHN1YiBzdW1tYXJ5IHN1cCB0YWJsZSB0Ym9keSB0ZCB0ZXh0YXJlYSB0Zm9vdCB0aCB0aGVhZCB0aW1lIHRpdGxlIHRyIHRyYWNrIHUgdWwgdmFyIHZpZGVvIHdiciBjaXJjbGUgY2xpcFBhdGggZGVmcyBlbGxpcHNlIGcgaW1hZ2UgbGluZSBsaW5lYXJHcmFkaWVudCBtYXNrIHBhdGggcGF0dGVybiBwb2x5Z29uIHBvbHlsaW5lIHJhZGlhbEdyYWRpZW50IHJlY3Qgc3RvcCBzdmcgdGV4dCB0c3Bhbicuc3BsaXQoJyAnKTtcblxuY29uc3QgUkVBQ1RfRUxFTUVOVF9UWVBFID0gKHR5cGVvZiBTeW1ib2whPT0ndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICYmIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHwgMHhlYWM3O1xuXG5jb25zdCBDT01QT05FTlRfV1JBUFBFUl9LRVkgPSB0eXBlb2YgU3ltYm9sIT09J3VuZGVmaW5lZCcgPyBTeW1ib2wuZm9yKCdfX3ByZWFjdENvbXBhdFdyYXBwZXInKSA6ICdfX3ByZWFjdENvbXBhdFdyYXBwZXInO1xuXG4vLyBkb24ndCBhdXRvYmluZCB0aGVzZSBtZXRob2RzIHNpbmNlIHRoZXkgYWxyZWFkeSBoYXZlIGd1YXJhbnRlZWQgY29udGV4dC5cbmNvbnN0IEFVVE9CSU5EX0JMQUNLTElTVCA9IHtcblx0Y29uc3RydWN0b3I6IDEsXG5cdHJlbmRlcjogMSxcblx0c2hvdWxkQ29tcG9uZW50VXBkYXRlOiAxLFxuXHRjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAxLFxuXHRjb21wb25lbnRXaWxsVXBkYXRlOiAxLFxuXHRjb21wb25lbnREaWRVcGRhdGU6IDEsXG5cdGNvbXBvbmVudFdpbGxNb3VudDogMSxcblx0Y29tcG9uZW50RGlkTW91bnQ6IDEsXG5cdGNvbXBvbmVudFdpbGxVbm1vdW50OiAxLFxuXHRjb21wb25lbnREaWRVbm1vdW50OiAxXG59O1xuXG5cbmNvbnN0IENBTUVMX1BST1BTID0gL14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcHxjb2xvcnxmaWxsfGZsb29kfGZvbnR8Z2x5cGh8aG9yaXp8bWFya2VyfG92ZXJsaW5lfHBhaW50fHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dHx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlcnR8d29yZHx3cml0aW5nfHgpW0EtWl0vO1xuXG5cbmNvbnN0IEJZUEFTU19IT09LID0ge307XG5cbi8qZ2xvYmFsIHByb2Nlc3MqL1xuY29uc3QgREVWID0gdHlwZW9mIHByb2Nlc3M9PT0ndW5kZWZpbmVkJyB8fCAhcHJvY2Vzcy5lbnYgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYhPT0ncHJvZHVjdGlvbic7XG5cbi8vIGEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBub3RoaW5nLiBVc2VkIHRvIHJlcGxhY2UgY29tcG9uZW50cyBmb3IgdW5tb3VudENvbXBvbmVudEF0Tm9kZS5cbmZ1bmN0aW9uIEVtcHR5Q29tcG9uZW50KCkgeyByZXR1cm4gbnVsbDsgfVxuXG5cblxuLy8gbWFrZSByZWFjdCB0aGluayB3ZSdyZSByZWFjdC5cbmxldCBWTm9kZSA9IGgoJ2EnLCBudWxsKS5jb25zdHJ1Y3RvcjtcblZOb2RlLnByb3RvdHlwZS4kJHR5cGVvZiA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcblZOb2RlLnByb3RvdHlwZS5wcmVhY3RDb21wYXRVcGdyYWRlZCA9IGZhbHNlO1xuVk5vZGUucHJvdG90eXBlLnByZWFjdENvbXBhdE5vcm1hbGl6ZWQgPSBmYWxzZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdGdldCgpIHsgcmV0dXJuIHRoaXMubm9kZU5hbWU7IH0sXG5cdHNldCh2KSB7IHRoaXMubm9kZU5hbWUgPSB2OyB9LFxuXHRjb25maWd1cmFibGU6dHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsICdwcm9wcycsIHtcblx0Z2V0KCkgeyByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzOyB9LFxuXHRzZXQodikgeyB0aGlzLmF0dHJpYnV0ZXMgPSB2OyB9LFxuXHRjb25maWd1cmFibGU6dHJ1ZVxufSk7XG5cblxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblx0ZS5wZXJzaXN0ID0gT2JqZWN0O1xuXHRlLm5hdGl2ZUV2ZW50ID0gZTtcblx0cmV0dXJuIGU7XG59O1xuXG5cbmxldCBvbGRWbm9kZUhvb2sgPSBvcHRpb25zLnZub2RlO1xub3B0aW9ucy52bm9kZSA9IHZub2RlID0+IHtcblx0aWYgKCF2bm9kZS5wcmVhY3RDb21wYXRVcGdyYWRlZCkge1xuXHRcdHZub2RlLnByZWFjdENvbXBhdFVwZ3JhZGVkID0gdHJ1ZTtcblxuXHRcdGxldCB0YWcgPSB2bm9kZS5ub2RlTmFtZSxcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcztcblxuXHRcdGlmICghYXR0cnMpIGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXG5cdFx0aWYgKHR5cGVvZiB0YWc9PT0nZnVuY3Rpb24nKSB7XG5cdFx0XHRpZiAodGFnW0NPTVBPTkVOVF9XUkFQUEVSX0tFWV09PT10cnVlIHx8ICh0YWcucHJvdG90eXBlICYmICdpc1JlYWN0Q29tcG9uZW50JyBpbiB0YWcucHJvdG90eXBlKSkge1xuXHRcdFx0XHRpZiAodm5vZGUuY2hpbGRyZW4gJiYgIXZub2RlLmNoaWxkcmVuLmxlbmd0aCkgdm5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbikgYXR0cnMuY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcblxuXHRcdFx0XHRpZiAoIXZub2RlLnByZWFjdENvbXBhdE5vcm1hbGl6ZWQpIHtcblx0XHRcdFx0XHRub3JtYWxpemVWTm9kZSh2bm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGFuZGxlQ29tcG9uZW50Vk5vZGUodm5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAmJiAhdm5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB2bm9kZS5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbikgYXR0cnMuY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcblxuXHRcdFx0aWYgKGF0dHJzLmRlZmF1bHRWYWx1ZSkge1xuXHRcdFx0XHRpZiAoIWF0dHJzLnZhbHVlICYmIGF0dHJzLnZhbHVlIT09MCkge1xuXHRcdFx0XHRcdGF0dHJzLnZhbHVlID0gYXR0cnMuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlbGV0ZSBhdHRycy5kZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUVsZW1lbnRWTm9kZSh2bm9kZSwgYXR0cnMpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvbGRWbm9kZUhvb2spIG9sZFZub2RlSG9vayh2bm9kZSk7XG59O1xuXG5mdW5jdGlvbiBoYW5kbGVDb21wb25lbnRWTm9kZSh2bm9kZSkge1xuXHRsZXQgdGFnID0gdm5vZGUubm9kZU5hbWUsXG5cdFx0YSA9IHZub2RlLmF0dHJpYnV0ZXM7XG5cblx0dm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXHRpZiAodGFnLmRlZmF1bHRQcm9wcykgZXh0ZW5kKHZub2RlLmF0dHJpYnV0ZXMsIHRhZy5kZWZhdWx0UHJvcHMpO1xuXHRpZiAoYSkgZXh0ZW5kKHZub2RlLmF0dHJpYnV0ZXMsIGEpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVFbGVtZW50Vk5vZGUodm5vZGUsIGEpIHtcblx0bGV0IHNob3VsZFNhbml0aXplLCBhdHRycywgaTtcblx0aWYgKGEpIHtcblx0XHRmb3IgKGkgaW4gYSkgaWYgKChzaG91bGRTYW5pdGl6ZSA9IENBTUVMX1BST1BTLnRlc3QoaSkpKSBicmVhaztcblx0XHRpZiAoc2hvdWxkU2FuaXRpemUpIHtcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXHRcdFx0Zm9yIChpIGluIGEpIHtcblx0XHRcdFx0aWYgKGEuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRhdHRyc1sgQ0FNRUxfUFJPUFMudGVzdChpKSA/IGkucmVwbGFjZSgvKFtBLVowLTldKS8sICctJDEnKS50b0xvd2VyQ2FzZSgpIDogaSBdID0gYVtpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cblxuLy8gcHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG5mdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0bGV0IHByZXYgPSBwYXJlbnQgJiYgcGFyZW50Ll9wcmVhY3RDb21wYXRSZW5kZXJlZDtcblxuXHQvLyBpZ25vcmUgaW1wb3NzaWJsZSBwcmV2aW91cyByZW5kZXJzXG5cdGlmIChwcmV2ICYmIHByZXYucGFyZW50Tm9kZSE9PXBhcmVudCkgcHJldiA9IG51bGw7XG5cblx0Ly8gZGVmYXVsdCB0byBmaXJzdCBFbGVtZW50IGNoaWxkXG5cdGlmICghcHJldikgcHJldiA9IHBhcmVudC5jaGlsZHJlblswXTtcblxuXHQvLyByZW1vdmUgdW5hZmZlY3RlZCBzaWJsaW5nc1xuXHRmb3IgKGxldCBpPXBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaS0tOyApIHtcblx0XHRpZiAocGFyZW50LmNoaWxkTm9kZXNbaV0hPT1wcmV2KSB7XG5cdFx0XHRwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGxldCBvdXQgPSBwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCwgcHJldik7XG5cdGlmIChwYXJlbnQpIHBhcmVudC5fcHJlYWN0Q29tcGF0UmVuZGVyZWQgPSBvdXQ7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2s9PT0nZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXHRyZXR1cm4gb3V0ICYmIG91dC5fY29tcG9uZW50IHx8IG91dC5iYXNlO1xufVxuXG5cbmNsYXNzIENvbnRleHRQcm92aWRlciB7XG5cdGdldENoaWxkQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jb250ZXh0O1xuXHR9XG5cdHJlbmRlcihwcm9wcykge1xuXHRcdHJldHVybiBwcm9wcy5jaGlsZHJlblswXTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIHZub2RlLCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG5cdGxldCB3cmFwID0gaChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogcGFyZW50Q29tcG9uZW50LmNvbnRleHQgfSwgdm5vZGUpO1xuXHRsZXQgYyA9IHJlbmRlcih3cmFwLCBjb250YWluZXIpO1xuXHRpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGMpO1xuXHRyZXR1cm4gYztcbn1cblxuXG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuXHRsZXQgZXhpc3RpbmcgPSBjb250YWluZXIuX3ByZWFjdENvbXBhdFJlbmRlcmVkO1xuXHRpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcucGFyZW50Tm9kZT09PWNvbnRhaW5lcikge1xuXHRcdHByZWFjdFJlbmRlcihoKEVtcHR5Q29tcG9uZW50KSwgY29udGFpbmVyLCBleGlzdGluZyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5cblxuY29uc3QgQVJSID0gW107XG5cbi8vIFRoaXMgQVBJIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgZm9yIFByZWFjdCwgc28gaXQncyBiYXNpY2FsbHkgcGFzc3Rocm91Z2guXG5sZXQgQ2hpbGRyZW4gPSB7XG5cdG1hcChjaGlsZHJlbiwgZm4sIGN0eCkge1xuXHRcdGlmIChjaGlsZHJlbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0XHRjaGlsZHJlbiA9IENoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChjdHggJiYgY3R4IT09Y2hpbGRyZW4pIGZuID0gZm4uYmluZChjdHgpO1xuXHRcdHJldHVybiBjaGlsZHJlbi5tYXAoZm4pO1xuXHR9LFxuXHRmb3JFYWNoKGNoaWxkcmVuLCBmbiwgY3R4KSB7XG5cdFx0aWYgKGNoaWxkcmVuID09IG51bGwpIHJldHVybiBudWxsO1xuXHRcdGNoaWxkcmVuID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cdFx0aWYgKGN0eCAmJiBjdHghPT1jaGlsZHJlbikgZm4gPSBmbi5iaW5kKGN0eCk7XG5cdFx0Y2hpbGRyZW4uZm9yRWFjaChmbik7XG5cdH0sXG5cdGNvdW50KGNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCB8fCAwO1xuXHR9LFxuXHRvbmx5KGNoaWxkcmVuKSB7XG5cdFx0Y2hpbGRyZW4gPSBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoIT09MSkgdGhyb3cgbmV3IEVycm9yKCdDaGlsZHJlbi5vbmx5KCkgZXhwZWN0cyBvbmx5IG9uZSBjaGlsZC4nKTtcblx0XHRyZXR1cm4gY2hpbGRyZW5bMF07XG5cdH0sXG5cdHRvQXJyYXkoY2hpbGRyZW4pIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSAmJiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogQVJSLmNvbmNhdChjaGlsZHJlbik7XG5cdH1cbn07XG5cblxuLyoqIFRyYWNrIGN1cnJlbnQgcmVuZGVyKCkgY29tcG9uZW50IGZvciByZWYgYXNzaWdubWVudCAqL1xubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5cblxuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cblxubGV0IERPTSA9IHt9O1xuZm9yIChsZXQgaT1FTEVNRU5UUy5sZW5ndGg7IGktLTsgKSB7XG5cdERPTVtFTEVNRU5UU1tpXV0gPSBjcmVhdGVGYWN0b3J5KEVMRU1FTlRTW2ldKTtcbn1cblxuZnVuY3Rpb24gdXBncmFkZVRvVk5vZGVzKGFyciwgb2Zmc2V0KSB7XG5cdGZvciAobGV0IGk9b2Zmc2V0IHx8IDA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IG9iaiA9IGFycltpXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG5cdFx0XHR1cGdyYWRlVG9WTm9kZXMob2JqKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmo9PT0nb2JqZWN0JyAmJiAhaXNWYWxpZEVsZW1lbnQob2JqKSAmJiAoKG9iai5wcm9wcyAmJiBvYmoudHlwZSkgfHwgKG9iai5hdHRyaWJ1dGVzICYmIG9iai5ub2RlTmFtZSkgfHwgb2JqLmNoaWxkcmVuKSkge1xuXHRcdFx0YXJyW2ldID0gY3JlYXRlRWxlbWVudChvYmoudHlwZSB8fCBvYmoubm9kZU5hbWUsIG9iai5wcm9wcyB8fCBvYmouYXR0cmlidXRlcywgb2JqLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0ZWxlc3NDb21wb25lbnQoYykge1xuXHRyZXR1cm4gdHlwZW9mIGM9PT0nZnVuY3Rpb24nICYmICEoYy5wcm90b3R5cGUgJiYgYy5wcm90b3R5cGUucmVuZGVyKTtcbn1cblxuXG4vLyB3cmFwcyBzdGF0ZWxlc3MgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIGEgUHJvcFR5cGVzIHZhbGlkYXRvclxuZnVuY3Rpb24gd3JhcFN0YXRlbGVzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSB7XG5cdHJldHVybiBjcmVhdGVDbGFzcyh7XG5cdFx0ZGlzcGxheU5hbWU6IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lLFxuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiBXcmFwcGVkQ29tcG9uZW50KHRoaXMucHJvcHMsIHRoaXMuY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5mdW5jdGlvbiBzdGF0ZWxlc3NDb21wb25lbnRIb29rKEN0b3IpIHtcblx0bGV0IFdyYXBwZWQgPSBDdG9yW0NPTVBPTkVOVF9XUkFQUEVSX0tFWV07XG5cdGlmIChXcmFwcGVkKSByZXR1cm4gV3JhcHBlZD09PXRydWUgPyBDdG9yIDogV3JhcHBlZDtcblxuXHRXcmFwcGVkID0gd3JhcFN0YXRlbGVzc0NvbXBvbmVudChDdG9yKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JhcHBlZCwgQ09NUE9ORU5UX1dSQVBQRVJfS0VZLCB7IGNvbmZpZ3VyYWJsZTp0cnVlLCB2YWx1ZTp0cnVlIH0pO1xuXHRXcmFwcGVkLmRpc3BsYXlOYW1lID0gQ3Rvci5kaXNwbGF5TmFtZTtcblx0V3JhcHBlZC5wcm9wVHlwZXMgPSBDdG9yLnByb3BUeXBlcztcblx0V3JhcHBlZC5kZWZhdWx0UHJvcHMgPSBDdG9yLmRlZmF1bHRQcm9wcztcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3RvciwgQ09NUE9ORU5UX1dSQVBQRVJfS0VZLCB7IGNvbmZpZ3VyYWJsZTp0cnVlLCB2YWx1ZTpXcmFwcGVkIH0pO1xuXG5cdHJldHVybiBXcmFwcGVkO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoLi4uYXJncykge1xuXHR1cGdyYWRlVG9WTm9kZXMoYXJncywgMik7XG5cdHJldHVybiBub3JtYWxpemVWTm9kZShoKC4uLmFyZ3MpKTtcbn1cblxuXG5mdW5jdGlvbiBub3JtYWxpemVWTm9kZSh2bm9kZSkge1xuXHR2bm9kZS5wcmVhY3RDb21wYXROb3JtYWxpemVkID0gdHJ1ZTtcblxuXHRhcHBseUNsYXNzTmFtZSh2bm9kZSk7XG5cblx0aWYgKGlzU3RhdGVsZXNzQ29tcG9uZW50KHZub2RlLm5vZGVOYW1lKSkge1xuXHRcdHZub2RlLm5vZGVOYW1lID0gc3RhdGVsZXNzQ29tcG9uZW50SG9vayh2bm9kZS5ub2RlTmFtZSk7XG5cdH1cblxuXHRsZXQgcmVmID0gdm5vZGUuYXR0cmlidXRlcy5yZWYsXG5cdFx0dHlwZSA9IHJlZiAmJiB0eXBlb2YgcmVmO1xuXHRpZiAoY3VycmVudENvbXBvbmVudCAmJiAodHlwZT09PSdzdHJpbmcnIHx8IHR5cGU9PT0nbnVtYmVyJykpIHtcblx0XHR2bm9kZS5hdHRyaWJ1dGVzLnJlZiA9IGNyZWF0ZVN0cmluZ1JlZlByb3h5KHJlZiwgY3VycmVudENvbXBvbmVudCk7XG5cdH1cblxuXHRhcHBseUV2ZW50Tm9ybWFsaXphdGlvbih2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdGxldCBlbGVtZW50UHJvcHMgPSBlbGVtZW50LmF0dHJpYnV0ZXMgfHwgZWxlbWVudC5wcm9wcztcblx0bGV0IG5vZGUgPSBoKFxuXHRcdGVsZW1lbnQubm9kZU5hbWUgfHwgZWxlbWVudC50eXBlLFxuXHRcdGVsZW1lbnRQcm9wcyxcblx0XHRlbGVtZW50LmNoaWxkcmVuIHx8IGVsZW1lbnRQcm9wcyAmJiBlbGVtZW50UHJvcHMuY2hpbGRyZW5cblx0KTtcblx0cmV0dXJuIG5vcm1hbGl6ZVZOb2RlKHByZWFjdENsb25lRWxlbWVudChub2RlLCBwcm9wcywgLi4uY2hpbGRyZW4pKTtcbn1cblxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChlbGVtZW50KSB7XG5cdHJldHVybiBlbGVtZW50ICYmICgoZWxlbWVudCBpbnN0YW5jZW9mIFZOb2RlKSB8fCBlbGVtZW50LiQkdHlwZW9mPT09UkVBQ1RfRUxFTUVOVF9UWVBFKTtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdSZWZQcm94eShuYW1lLCBjb21wb25lbnQpIHtcblx0cmV0dXJuIGNvbXBvbmVudC5fcmVmUHJveGllc1tuYW1lXSB8fCAoY29tcG9uZW50Ll9yZWZQcm94aWVzW25hbWVdID0gcmVzb2x2ZWQgPT4ge1xuXHRcdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnJlZnMpIHtcblx0XHRcdGNvbXBvbmVudC5yZWZzW25hbWVdID0gcmVzb2x2ZWQ7XG5cdFx0XHRpZiAocmVzb2x2ZWQ9PT1udWxsKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb21wb25lbnQuX3JlZlByb3hpZXNbbmFtZV07XG5cdFx0XHRcdGNvbXBvbmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUV2ZW50Tm9ybWFsaXphdGlvbih7IG5vZGVOYW1lLCBhdHRyaWJ1dGVzIH0pIHtcblx0aWYgKCFhdHRyaWJ1dGVzIHx8IHR5cGVvZiBub2RlTmFtZSE9PSdzdHJpbmcnKSByZXR1cm47XG5cdGxldCBwcm9wcyA9IHt9O1xuXHRmb3IgKGxldCBpIGluIGF0dHJpYnV0ZXMpIHtcblx0XHRwcm9wc1tpLnRvTG93ZXJDYXNlKCldID0gaTtcblx0fVxuXHRpZiAocHJvcHMub25kb3VibGVjbGljaykge1xuXHRcdGF0dHJpYnV0ZXMub25kYmxjbGljayA9IGF0dHJpYnV0ZXNbcHJvcHMub25kb3VibGVjbGlja107XG5cdFx0ZGVsZXRlIGF0dHJpYnV0ZXNbcHJvcHMub25kb3VibGVjbGlja107XG5cdH1cblx0Ly8gZm9yICp0ZXh0dWFsIGlucHV0cyogKGluY2wgdGV4dGFyZWEpLCBub3JtYWxpemUgYG9uQ2hhbmdlYCAtPiBgb25JbnB1dGA6XG5cdGlmIChwcm9wcy5vbmNoYW5nZSAmJiAobm9kZU5hbWU9PT0ndGV4dGFyZWEnIHx8IChub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09J2lucHV0JyAmJiAhL15maWx8Y2hlfHJhZC9pLnRlc3QoYXR0cmlidXRlcy50eXBlKSkpKSB7XG5cdFx0bGV0IG5vcm1hbGl6ZWQgPSBwcm9wcy5vbmlucHV0IHx8ICdvbmlucHV0Jztcblx0XHRpZiAoIWF0dHJpYnV0ZXNbbm9ybWFsaXplZF0pIHtcblx0XHRcdGF0dHJpYnV0ZXNbbm9ybWFsaXplZF0gPSBtdWx0aWhvb2soW2F0dHJpYnV0ZXNbbm9ybWFsaXplZF0sIGF0dHJpYnV0ZXNbcHJvcHMub25jaGFuZ2VdXSk7XG5cdFx0XHRkZWxldGUgYXR0cmlidXRlc1twcm9wcy5vbmNoYW5nZV07XG5cdFx0fVxuXHR9XG59XG5cblxuZnVuY3Rpb24gYXBwbHlDbGFzc05hbWUoeyBhdHRyaWJ1dGVzIH0pIHtcblx0aWYgKCFhdHRyaWJ1dGVzKSByZXR1cm47XG5cdGxldCBjbCA9IGF0dHJpYnV0ZXMuY2xhc3NOYW1lIHx8IGF0dHJpYnV0ZXMuY2xhc3M7XG5cdGlmIChjbCkgYXR0cmlidXRlcy5jbGFzc05hbWUgPSBjbDtcbn1cblxuXG5mdW5jdGlvbiBleHRlbmQoYmFzZSwgcHJvcHMpIHtcblx0Zm9yIChsZXQga2V5IGluIHByb3BzKSB7XG5cdFx0aWYgKHByb3BzLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGJhc2Vba2V5XSA9IHByb3BzW2tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiYXNlO1xufVxuXG5cbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKGEsIGIpIHtcblx0Zm9yIChsZXQgaSBpbiBhKSBpZiAoIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoYVtpXSE9PWJbaV0pIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50KSB7XG5cdHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50LmJhc2UgfHwgY29tcG9uZW50O1xufVxuXG5cbmZ1bmN0aW9uIEYoKXt9XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKG9iaikge1xuXHRmdW5jdGlvbiBjbChwcm9wcywgY29udGV4dCkge1xuXHRcdGJpbmRBbGwodGhpcyk7XG5cdFx0Q29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQsIEJZUEFTU19IT09LKTtcblx0XHRuZXdDb21wb25lbnRIb29rLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpO1xuXHR9XG5cblx0b2JqID0gZXh0ZW5kKHsgY29uc3RydWN0b3I6IGNsIH0sIG9iaik7XG5cblx0Ly8gV2UgbmVlZCB0byBhcHBseSBtaXhpbnMgaGVyZSBzbyB0aGF0IGdldERlZmF1bHRQcm9wcyBpcyBjb3JyZWN0bHkgbWl4ZWRcblx0aWYgKG9iai5taXhpbnMpIHtcblx0XHRhcHBseU1peGlucyhvYmosIGNvbGxhdGVNaXhpbnMob2JqLm1peGlucykpO1xuXHR9XG5cdGlmIChvYmouc3RhdGljcykge1xuXHRcdGV4dGVuZChjbCwgb2JqLnN0YXRpY3MpO1xuXHR9XG5cdGlmIChvYmoucHJvcFR5cGVzKSB7XG5cdFx0Y2wucHJvcFR5cGVzID0gb2JqLnByb3BUeXBlcztcblx0fVxuXHRpZiAob2JqLmRlZmF1bHRQcm9wcykge1xuXHRcdGNsLmRlZmF1bHRQcm9wcyA9IG9iai5kZWZhdWx0UHJvcHM7XG5cdH1cblx0aWYgKG9iai5nZXREZWZhdWx0UHJvcHMpIHtcblx0XHRjbC5kZWZhdWx0UHJvcHMgPSBvYmouZ2V0RGVmYXVsdFByb3BzKCk7XG5cdH1cblxuXHRGLnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG5cdGNsLnByb3RvdHlwZSA9IGV4dGVuZChuZXcgRigpLCBvYmopO1xuXG5cdGNsLmRpc3BsYXlOYW1lID0gb2JqLmRpc3BsYXlOYW1lIHx8ICdDb21wb25lbnQnO1xuXG5cdHJldHVybiBjbDtcbn1cblxuXG4vLyBGbGF0dGVuIGFuIEFycmF5IG9mIG1peGlucyB0byBhIG1hcCBvZiBtZXRob2QgbmFtZSB0byBtaXhpbiBpbXBsZW1lbnRhdGlvbnNcbmZ1bmN0aW9uIGNvbGxhdGVNaXhpbnMobWl4aW5zKSB7XG5cdGxldCBrZXllZCA9IHt9O1xuXHRmb3IgKGxldCBpPTA7IGk8bWl4aW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IG1peGluID0gbWl4aW5zW2ldO1xuXHRcdGZvciAobGV0IGtleSBpbiBtaXhpbikge1xuXHRcdFx0aWYgKG1peGluLmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIG1peGluW2tleV09PT0nZnVuY3Rpb24nKSB7XG5cdFx0XHRcdChrZXllZFtrZXldIHx8IChrZXllZFtrZXldPVtdKSkucHVzaChtaXhpbltrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGtleWVkO1xufVxuXG5cbi8vIGFwcGx5IGEgbWFwcGluZyBvZiBBcnJheXMgb2YgbWl4aW4gbWV0aG9kcyB0byBhIGNvbXBvbmVudCBwcm90b3R5cGVcbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKHByb3RvLCBtaXhpbnMpIHtcblx0Zm9yIChsZXQga2V5IGluIG1peGlucykgaWYgKG1peGlucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0cHJvdG9ba2V5XSA9IG11bHRpaG9vayhcblx0XHRcdG1peGluc1trZXldLmNvbmNhdChwcm90b1trZXldIHx8IEFSUiksXG5cdFx0XHRrZXk9PT0nZ2V0RGVmYXVsdFByb3BzJyB8fCBrZXk9PT0nZ2V0SW5pdGlhbFN0YXRlJyB8fCBrZXk9PT0nZ2V0Q2hpbGRDb250ZXh0J1xuXHRcdCk7XG5cdH1cbn1cblxuXG5mdW5jdGlvbiBiaW5kQWxsKGN0eCkge1xuXHRmb3IgKGxldCBpIGluIGN0eCkge1xuXHRcdGxldCB2ID0gY3R4W2ldO1xuXHRcdGlmICh0eXBlb2Ygdj09PSdmdW5jdGlvbicgJiYgIXYuX19ib3VuZCAmJiAhQVVUT0JJTkRfQkxBQ0tMSVNULmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHQoY3R4W2ldID0gdi5iaW5kKGN0eCkpLl9fYm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5cbmZ1bmN0aW9uIGNhbGxNZXRob2QoY3R4LCBtLCBhcmdzKSB7XG5cdGlmICh0eXBlb2YgbT09PSdzdHJpbmcnKSB7XG5cdFx0bSA9IGN0eC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbbV07XG5cdH1cblx0aWYgKHR5cGVvZiBtPT09J2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBtLmFwcGx5KGN0eCwgYXJncyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gbXVsdGlob29rKGhvb2tzLCBza2lwRHVwbGljYXRlcykge1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0bGV0IHJldDtcblx0XHRmb3IgKGxldCBpPTA7IGk8aG9va3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCByID0gY2FsbE1ldGhvZCh0aGlzLCBob29rc1tpXSwgYXJndW1lbnRzKTtcblxuXHRcdFx0aWYgKHNraXBEdXBsaWNhdGVzICYmIHIhPW51bGwpIHtcblx0XHRcdFx0aWYgKCFyZXQpIHJldCA9IHt9O1xuXHRcdFx0XHRmb3IgKGxldCBrZXkgaW4gcikgaWYgKHIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdHJldFtrZXldID0gcltrZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgciE9PSd1bmRlZmluZWQnKSByZXQgPSByO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufVxuXG5cbmZ1bmN0aW9uIG5ld0NvbXBvbmVudEhvb2socHJvcHMsIGNvbnRleHQpIHtcblx0cHJvcHNIb29rLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpO1xuXHR0aGlzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBtdWx0aWhvb2soW3Byb3BzSG9vaywgdGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHx8ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJ10pO1xuXHR0aGlzLnJlbmRlciA9IG11bHRpaG9vayhbcHJvcHNIb29rLCBiZWZvcmVSZW5kZXIsIHRoaXMucmVuZGVyIHx8ICdyZW5kZXInLCBhZnRlclJlbmRlcl0pO1xufVxuXG5cbmZ1bmN0aW9uIHByb3BzSG9vayhwcm9wcywgY29udGV4dCkge1xuXHRpZiAoIXByb3BzKSByZXR1cm47XG5cblx0Ly8gUmVhY3QgYW5ub3lpbmdseSBzcGVjaWFsLWNhc2VzIHNpbmdsZSBjaGlsZHJlbiwgYW5kIHNvbWUgcmVhY3QgY29tcG9uZW50cyBhcmUgcmlkaWN1bG91c2x5IHN0cmljdCBhYm91dCB0aGlzLlxuXHRsZXQgYyA9IHByb3BzLmNoaWxkcmVuO1xuXHRpZiAoYyAmJiBBcnJheS5pc0FycmF5KGMpICYmIGMubGVuZ3RoPT09MSkge1xuXHRcdHByb3BzLmNoaWxkcmVuID0gY1swXTtcblxuXHRcdC8vIGJ1dCBpdHMgdG90YWxseSBzdGlsbCBnb2luZyB0byBiZSBhbiBBcnJheS5cblx0XHRpZiAocHJvcHMuY2hpbGRyZW4gJiYgdHlwZW9mIHByb3BzLmNoaWxkcmVuPT09J29iamVjdCcpIHtcblx0XHRcdHByb3BzLmNoaWxkcmVuLmxlbmd0aCA9IDE7XG5cdFx0XHRwcm9wcy5jaGlsZHJlblswXSA9IHByb3BzLmNoaWxkcmVuO1xuXHRcdH1cblx0fVxuXG5cdC8vIGFkZCBwcm9wdHlwZSBjaGVja2luZ1xuXHRpZiAoREVWKSB7XG5cdFx0bGV0IGN0b3IgPSB0eXBlb2YgdGhpcz09PSdmdW5jdGlvbicgPyB0aGlzIDogdGhpcy5jb25zdHJ1Y3Rvcixcblx0XHRcdHByb3BUeXBlcyA9IHRoaXMucHJvcFR5cGVzIHx8IGN0b3IucHJvcFR5cGVzO1xuXHRcdGlmIChwcm9wVHlwZXMpIHtcblx0XHRcdGZvciAobGV0IHByb3AgaW4gcHJvcFR5cGVzKSB7XG5cdFx0XHRcdGlmIChwcm9wVHlwZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgdHlwZW9mIHByb3BUeXBlc1twcm9wXT09PSdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lO1xuXHRcdFx0XHRcdGxldCBlcnIgPSBwcm9wVHlwZXNbcHJvcF0ocHJvcHMsIHByb3AsIGRpc3BsYXlOYW1lLCAncHJvcCcpO1xuXHRcdFx0XHRcdGlmIChlcnIpIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGVyci5tZXNzYWdlIHx8IGVycikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cblxuZnVuY3Rpb24gYmVmb3JlUmVuZGVyKHByb3BzKSB7XG5cdGN1cnJlbnRDb21wb25lbnQgPSB0aGlzO1xufVxuXG5mdW5jdGlvbiBhZnRlclJlbmRlcigpIHtcblx0aWYgKGN1cnJlbnRDb21wb25lbnQ9PT10aGlzKSB7XG5cdFx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdH1cbn1cblxuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgb3B0cykge1xuXHRQcmVhY3RDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdHRoaXMuc3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiB7fTtcblx0dGhpcy5yZWZzID0ge307XG5cdHRoaXMuX3JlZlByb3hpZXMgPSB7fTtcblx0aWYgKG9wdHMhPT1CWVBBU1NfSE9PSykge1xuXHRcdG5ld0NvbXBvbmVudEhvb2suY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdH1cbn1cbmV4dGVuZChDb21wb25lbnQucHJvdG90eXBlID0gbmV3IFByZWFjdENvbXBvbmVudCgpLCB7XG5cdGNvbnN0cnVjdG9yOiBDb21wb25lbnQsXG5cblx0aXNSZWFjdENvbXBvbmVudDoge30sXG5cblx0cmVwbGFjZVN0YXRlKHN0YXRlLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuc2V0U3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcblx0XHRmb3IgKGxldCBpIGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdGlmICghKGkgaW4gc3RhdGUpKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnN0YXRlW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRnZXRET01Ob2RlKCkge1xuXHRcdHJldHVybiB0aGlzLmJhc2U7XG5cdH0sXG5cblx0aXNNb3VudGVkKCkge1xuXHRcdHJldHVybiAhIXRoaXMuYmFzZTtcblx0fVxufSk7XG5cblxuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG5cdENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KTtcbn1cbkYucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IEYoKTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uKHByb3BzLCBzdGF0ZSkge1xuXHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgcHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn07XG5cblxuXG5leHBvcnQge1xuXHR2ZXJzaW9uLFxuXHRET00sXG5cdFByb3BUeXBlcyxcblx0Q2hpbGRyZW4sXG5cdHJlbmRlcixcblx0Y3JlYXRlQ2xhc3MsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNsb25lRWxlbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGZpbmRET01Ob2RlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIGFzIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdHZlcnNpb24sXG5cdERPTSxcblx0UHJvcFR5cGVzLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRjcmVhdGVDbGFzcyxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y2xvbmVFbGVtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0ZmluZERPTU5vZGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdENvbXBvbmVudCxcblx0UHVyZUNvbXBvbmVudCxcblx0dW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wcmVhY3QtY29tcGF0L3NyYy9pbmRleC5qcyIsImV4cG9ydCBpbnRlcmZhY2UgSGFzaFRhYmxlPFQ+IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFQ7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5RGF0YSB7XHJcbiAgICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnk7XHJcbiAgICBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpO1xyXG4gICAgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZyk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5IGV4dGVuZHMgSVN1cnZleURhdGEge1xyXG4gICAgY3VycmVudFBhZ2U6IElQYWdlO1xyXG4gICAgcGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2U6IElQYWdlLCBuZXdWYWx1ZTogYm9vbGVhbik7XHJcbiAgICBxdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBib29sZWFuKTtcclxuICAgIHF1ZXN0aW9uQWRkZWQocXVlc3Rpb246IElRdWVzdGlvbiwgaW5kZXg6IG51bWJlciwgcGFyZW50UGFuZWw6IGFueSwgcm9vdFBhbmVsOiBhbnkpO1xyXG4gICAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KTtcclxuICAgIHF1ZXN0aW9uUmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTtcclxuICAgIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpO1xyXG4gICAgdmFsaWRhdGVRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBTdXJ2ZXlFcnJvcjtcclxuICAgIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZztcclxuICAgIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcclxuICAgIGlzRGlzcGxheU1vZGU6IGJvb2xlYW47XHJcbiAgICBpc0Rlc2lnbk1vZGU6IGJvb2xlYW47XHJcbiAgICBpc0xvYWRpbmdGcm9tSnNvbjogYm9vbGVhbjtcclxuICAgIHJlcXVpcmVkVGV4dDogc3RyaW5nO1xyXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBzdHJpbmc7XHJcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IHN0cmluZztcclxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBib29sZWFuO1xyXG4gICAgdXBsb2FkRmlsZShuYW1lOiBzdHJpbmcsIGZpbGU6IEZpbGUsIHN0b3JlRGF0YUFzVGV4dDogYm9vbGVhbiwgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZykgPT4gYW55KTogYm9vbGVhbjtcclxuICAgIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQpO1xyXG4gICAgYWZ0ZXJSZW5kZXJQYW5lbChwYW5lbDogSUVsZW1lbnQsIGh0bWxFbGVtZW50KTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElDb25kaXRpb25SdW5uZXIge1xyXG4gICAgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVsZW1lbnQgIGV4dGVuZHMgSUNvbmRpdGlvblJ1bm5lcntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICBpc1Zpc2libGU6IGJvb2xlYW47XHJcbiAgICBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSk7XHJcbiAgICByb3dWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJlbmRlcldpZHRoOiBzdHJpbmc7XHJcbiAgICB3aWR0aDogc3RyaW5nO1xyXG4gICAgcmlnaHRJbmRlbnQ6IG51bWJlcjtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IGJvb2xlYW47XHJcbiAgICBpc1BhbmVsOiBib29sZWFuO1xyXG4gICAgb25TdXJ2ZXlMb2FkKCk7XHJcbiAgICBvbkxvY2FsZUNoYW5nZWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUXVlc3Rpb24gZXh0ZW5kcyBJRWxlbWVudCB7XHJcbiAgICBoYXNUaXRsZTogYm9vbGVhbjtcclxuICAgIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKTtcclxuICAgIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpO1xyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKTogYm9vbGVhbjtcclxuICAgIGNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJUGFuZWwgZXh0ZW5kcyBJRWxlbWVudCB7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnZSBleHRlbmRzIElDb25kaXRpb25SdW5uZXIge1xyXG4gICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgIG9uU3VydmV5TG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzZSB7XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBtZXRob2QgaXMgYWJzdHJhY3QnKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBpc1R3b1ZhbHVlRXF1YWxzKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHggPT09IHkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICghKHggaW5zdGFuY2VvZiBPYmplY3QpIHx8ICEoeSBpbnN0YW5jZW9mIE9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHgpIHtcclxuICAgICAgICAgICAgaWYgKCF4Lmhhc093blByb3BlcnR5KHApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKCF5Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4W3BdID09PSB5W3BdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoeFtwXSkgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMoeFtwXSwgeVtwXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChwIGluIHkpIHtcclxuICAgICAgICAgICAgaWYgKHkuaGFzT3duUHJvcGVydHkocCkgJiYgIXguaGFzT3duUHJvcGVydHkocCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleUVycm9yIHtcclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG1ldGhvZCBpcyBhYnN0cmFjdCcpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIFN1cnZleVBhZ2VJZDogc3RyaW5nO1xyXG5TdXJ2ZXlQYWdlSWQgPSBcInNxX3BhZ2VcIjtcclxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnQge1xyXG4gICAgcHVibGljIHN0YXRpYyBTY3JvbGxFbGVtZW50VG9Ub3AoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICAgICAgaWYgKCFlbCB8fCAhZWwuc2Nyb2xsSW50b1ZpZXcpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZWxlbVRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICBpZiAoZWxlbVRvcCA8IDApICBlbC5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIHJldHVybiBlbGVtVG9wIDwgMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0Rmlyc3ROb25UZXh0RWxlbWVudChlbGVtZW50czogYW55KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjdGV4dFwiICYmIGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI2NvbW1lbnRcIikgcmV0dXJuIGVsZW1lbnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgRm9jdXNFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50SWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBlbC5mb2N1cygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXZlbnQ8VCBleHRlbmRzIEZ1bmN0aW9uLCBPcHRpb25zPiAge1xyXG4gICAgcHJpdmF0ZSBjYWxsYmFja3M6IEFycmF5PFQ+O1xyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jYWxsYmFja3MgPT0gbnVsbCB8fCB0aGlzLmNhbGxiYWNrcy5sZW5ndGggPT0gMDsgfVxyXG4gICAgcHVibGljIGZpcmUoc2VuZGVyOiBhbnksIG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsUmVzdWx0ID0gdGhpcy5jYWxsYmFja3NbaV0oc2VuZGVyLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZChmdW5jOiBUKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgQXJyYXk8VD4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MucHVzaChmdW5jKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmUoZnVuYzogVCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jYWxsYmFja3MuaW5kZXhPZihmdW5jLCAwKTtcclxuICAgICAgICBpZiAoaW5kZXggIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jhc2UudHMiLCJpbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSAnLi9xdWVzdGlvbmJhc2UnO1xyXG5pbXBvcnQge0lFbGVtZW50LCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbi8vVE9ETyByZXBsYWNlIGNvbXBsZXRlbHkgd2l0aCBFbGVtZW50RmFjdG9yeVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GYWN0b3J5IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBRdWVzdGlvbkZhY3RvcnkoKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRDaG9pY2VzKCk6IHN0cmluZ1tdIHsgXHJcbiAgICAgICAgcmV0dXJuIFtcIjF8XCIgKyBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19maXJzdEl0ZW1cIiksIFwiMnxcIiArIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX3NlY29uZEl0ZW1cIiksIFwiM3xcIiArIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX3RoaXJkSXRlbVwiKV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q29sdW1zKCk6IHN0cmluZ1tdIHsgXHJcbiAgICAgICAgdmFyIGNvbE5hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X2NvbHVtblwiKSArIFwiIFwiO1xyXG4gICAgICAgIHJldHVybiBbY29sTmFtZSArIFwiMVwiLCBjb2xOYW1lICsgXCIyXCIsIGNvbE5hbWUgKyBcIjNcIl07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Um93cygpOiBzdHJpbmdbXSB7IFxyXG4gICAgICAgIHZhciByb3dOYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIikgKyBcIiBcIjtcclxuICAgICAgICByZXR1cm4gW3Jvd05hbWUgKyBcIjFcIiwgcm93TmFtZSArIFwiMlwiXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbkJhc2U+ID0ge307XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gUXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2ggPSB7fTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbkJhc2Uge1xyXG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xyXG4gICAgICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRWxlbWVudEZhY3Rvcnkge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRWxlbWVudEZhY3RvcnkgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcclxuICAgIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBJRWxlbWVudD4gPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIGVsZW1lbnRDcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBJRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdID0gZWxlbWVudENyZWF0b3I7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcclxuICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xyXG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XHJcbiAgICAgICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihlbGVtZW50VHlwZSwgbmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge0hhc2hUYWJsZX0gZnJvbSBcIi4uL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZWFjdFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSgpO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgIGZvcih2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xyXG4gICAgICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnkudHN4IiwiZXhwb3J0IGludGVyZmFjZSBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBnZXRMb2NhbGUoKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcHVibGljIHN0YXRpYyAgZGVmYXVsdExvY2FsZTogc3RyaW5nID0gXCJkZWZhdWx0XCI7XHJcbiAgICBwcml2YXRlIHZhbHVlcyA9IHt9O1xyXG4gICAgY29uc3RydWN0b3IgKHB1YmxpYyBvd25lcjogSUxvY2FsaXphYmxlT3duZXIpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCkge3JldHVybiB0aGlzLm93bmVyID8gdGhpcy5vd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgdGV4dCgpIDogc3RyaW5nIHsgXHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xyXG4gICAgICAgIGlmKCFsb2MpIGxvYyA9IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgaWYoIXJlcyAmJiBsb2MgIT09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgcmVzID0gdGhpcy52YWx1ZXNbTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLnZhbHVlc1trZXlzWzBdXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KHRoaXMubG9jYWxlLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy52YWx1ZXNbbG9jXTtcclxuICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICBpZighdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYodGhpcy52YWx1ZXNbbG9jXSkgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlmKGxvYyAhPSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlICYmIHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChsb2MsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tsb2NdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobG9jID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMSAmJiBrZXlzWzBdID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHJldHVybiB0aGlzLnZhbHVlc1trZXlzWzBdXTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcclxuICAgICAgICBpZighdmFsdWUpIHJldHVybjtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQobnVsbCwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQoa2V5LCB2YWx1ZVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0KGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmKGtleXNbaV0gPT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudmFsdWVzW2tleXNbaV1dID09IGRlZmF1bHRWYWx1ZSkgZGVsZXRlIHRoaXMudmFsdWVzW2tleXNbaV1dO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tICcuLi9xdWVzdGlvbmJhc2UnO1xyXG5pbXBvcnQge0lTdXJ2ZXlDcmVhdG9yfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmNvbW1lbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50QmFzZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgcHJvdGVjdGVkIHJvb3RDc3M6IGFueTtcclxuICAgIHByb3RlY3RlZCBpc0Rpc3BsYXlNb2RlOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgICAgICB0aGlzLnJvb3RDc3MgPSBwcm9wcy5yb290Q3NzO1xyXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5TW9kZSA9IHByb3BzLmlzRGlzcGxheU1vZGUgfHwgZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBuZXh0UHJvcHMuY3NzO1xyXG4gICAgICAgIHRoaXMucm9vdENzcyA9IG5leHRQcm9wcy5yb290Q3NzO1xyXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5TW9kZSA9IG5leHRQcm9wcy5pc0Rpc3BsYXlNb2RlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlIHtcclxuICAgIHByb3RlY3RlZCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZTtcclxuICAgIHByb3RlY3RlZCBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UgPSBwcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBwcm9wcy5jcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZSA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgfHwgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXI7XHJcbiAgICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25lbGVtZW50LnRzeCIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tICcuL3N1cnZleVN0cmluZ3MnO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQW5zd2VyUmVxdWlyZWRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkgIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlcXVpcmVkRXJyb3JcIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFJlcXVyZU51bWVyaWNFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY0Vycm9yXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBFeGNlZWRTaXplRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBwcml2YXRlIG1heFNpemU6IG51bWJlcjtcclxuICAgIGNvbnN0cnVjdG9yKG1heFNpemU6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJleGNlZWRNYXhTaXplXCIpW1wiZm9ybWF0XCJdKHRoaXMuZ2V0VGV4dFNpemUoKSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFRleHRTaXplKCkge1xyXG4gICAgICAgIHZhciBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcclxuICAgICAgICB2YXIgZml4ZWQgPSBbMCwgMCwgMiwgMywgM107XHJcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA9PSAwKSByZXR1cm4gJzAgQnl0ZSc7XHJcbiAgICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubWF4U2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5tYXhTaXplIC8gTWF0aC5wb3coMTAyNCwgaSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZml4ZWRbaV0pICsgJyAnICsgc2l6ZXNbaV07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21FcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcclxuICAgIHByaXZhdGUgdGV4dDogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IodGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Vycm9yLnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tICcuL2pzb25vYmplY3QnO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSAnLi9xdWVzdGlvbmJhc2UnO1xyXG5pbXBvcnQge1N1cnZleUVycm9yLCBTdXJ2ZXlFbGVtZW50fSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7QW5zd2VyUmVxdWlyZWRFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciwgVmFsaWRhdG9yUnVubmVyfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcclxuaW1wb3J0IHtUZXh0UHJlUHJvY2Vzc29yfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uIGV4dGVuZHMgUXVlc3Rpb25CYXNlIGltcGxlbWVudHMgSVZhbGlkYXRvck93bmVyIHtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY0NvbW1lbnRUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvblZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uQ29tbWVudDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1JlcXVpcmVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGFzQ29tbWVudFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc090aGVyVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcmVhZE9ubHlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBUZXh0UHJlUHJvY2Vzc29yO1xyXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4gPSBbXTtcclxuICAgIHZhbGlkYXRvcnM6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4gPSBuZXcgQXJyYXk8U3VydmV5VmFsaWRhdG9yPigpO1xyXG4gICAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb21tZW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgZXJyb3JzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgdGl0bGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY0NvbW1lbnRUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaW5wdXRJZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZCArIFwiaVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7IFxyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmxvY1RpdGxlLnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IHRoaXMubmFtZTsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlLnRleHQgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnRpdGxlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldCBsb2NDb21tZW50VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbW1lbnRUZXh0VmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgIT0gbnVsbCA/IHRoaXMuc3VydmV5LnByb2Nlc3NUZXh0KHRoaXMudGl0bGUpIDogdGhpcy50aXRsZTsgfVxyXG4gICAgcHVibGljIGdldCBmdWxsVGl0bGUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy50ZXh0UHJlUHJvY2Vzc29yKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgVGV4dFByZVByb2Nlc3NvcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uSGFzVmFsdWUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7IHJldHVybiBzZWxmLmNhblByb2Nlc3NlZFRleHRWYWx1ZXMobmFtZS50b0xvd2VyQ2FzZSgpKTsgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vblByb2Nlc3MgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7IHJldHVybiBzZWxmLmdldFByb2Nlc3NlZFRleHRWYWx1ZShuYW1lKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZVRlbXBsYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlcXVpcmVUZXh0ID0gdGhpcy5yZXF1aXJlZFRleHQ7XHJcbiAgICAgICAgaWYgKHJlcXVpcmVUZXh0KSByZXF1aXJlVGV4dCArPSBcIiBcIjtcclxuICAgICAgICB2YXIgbm8gPSB0aGlzLm5vO1xyXG4gICAgICAgIGlmIChubykgbm8gKz0gXCIuIFwiO1xyXG4gICAgICAgIHJldHVybiBubyArIHJlcXVpcmVUZXh0ICsgdGhpcy5wcm9jZXNzZWRUaXRsZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBTdXJ2ZXlFbGVtZW50LlNjcm9sbEVsZW1lbnRUb1RvcCh0aGlzLmlkKTtcclxuICAgICAgICB2YXIgaWQgPSAhb25FcnJvciA/IHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpIDogdGhpcy5nZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTtcclxuICAgICAgICBpZiAoU3VydmV5RWxlbWVudC5Gb2N1c0VsZW1lbnQoaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZm9jdXNDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjYW5Qcm9jZXNzZWRUZXh0VmFsdWVzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBuYW1lID09IFwibm9cIiB8fCBuYW1lID09IFwidGl0bGVcIiB8fCBuYW1lID09IFwicmVxdWlyZVwiO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldFByb2Nlc3NlZFRleHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmIChuYW1lID09IFwibm9cIikgcmV0dXJuIHRoaXMubm87XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJ0aXRsZVwiKSByZXR1cm4gdGhpcy5wcm9jZXNzZWRUaXRsZTtcclxuICAgICAgICBpZiAobmFtZSA9PSBcInJlcXVpcmVcIikgcmV0dXJuIHRoaXMucmVxdWlyZWRUZXh0O1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1JlcXVpcmVkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgaXNSZXF1aXJlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkID09IHZhbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudGl0bGVDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5oYXNDb21tZW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgaGFzQ29tbWVudCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydENvbW1lbnQoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaGFzQ29tbWVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHRoaXMuaGFzT3RoZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29tbWVudFRleHQoKTogc3RyaW5nIHsgXHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMubG9jQ29tbWVudFRleHQudGV4dDtcclxuICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIik7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjb21tZW50VGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NDb21tZW50VGV4dC50ZXh0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc090aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5oYXNPdGhlclZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0T3RoZXIoKSB8fCB0aGlzLmhhc090aGVyID09IHZhbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaGFzT3RoZXJWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy5oYXNPdGhlcikgdGhpcy5oYXNDb21tZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNPdGhlckNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBoYXNPdGhlckNoYW5nZWQoKSB7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpIHsgcmV0dXJuIHRoaXMucmVhZE9ubHkgfHwgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGlzcGxheU1vZGUpO31cclxuICAgIHB1YmxpYyBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnJlYWRPbmx5VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pIHsgXHJcbiAgICAgICAgaWYodGhpcy5yZWFkT25seSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVhZE9ubHlWYWx1ZSA9IHZhbHVlOyBcclxuICAgICAgICB0aGlzLnJlYWRPbmx5Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlYWRPbmx5Q2hhbmdlZCgpIHsgXHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IG5vKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZUluZGV4IDwgMCkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSAxO1xyXG4gICAgICAgIHZhciBpc051bWVyaWMgPSB0cnVlO1xyXG4gICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXgpIHtcclxuICAgICAgICAgICAgc3RyID0gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xyXG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoc3RyKSkgc3RhcnRJbmRleCA9IHBhcnNlSW50KHN0cik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT0gMSkgaXNOdW1lcmljID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc051bWVyaWMpIHJldHVybiAodGhpcy52aXNpYmxlSW5kZXggKyBzdGFydEluZGV4KS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KDApICsgdGhpcy52aXNpYmxlSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uU2V0RGF0YSgpIHtcclxuICAgICAgICBzdXBlci5vblNldERhdGEoKTtcclxuICAgICAgICB0aGlzLm9uU3VydmV5VmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlRnJvbURhdGEodGhpcy5nZXRWYWx1ZUNvcmUoKSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzdmFsdWVDaGFuZ2VkQ2FsbGJhY2tGaXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzdmFsdWVDaGFuZ2VkQ2FsbGJhY2tGaXJpbmcpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzdmFsdWVDaGFuZ2VkQ2FsbGJhY2tGaXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMuaXN2YWx1ZUNoYW5nZWRDYWxsYmFja0ZpcmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb21tZW50KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENvbW1lbnQoKTsgfVxyXG4gICAgcHVibGljIHNldCBjb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jb21tZW50ID09IG5ld1ZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRDb21tZW50KG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbW1lbnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbW1lbnQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZGF0YSAhPSBudWxsID8gdGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5uYW1lKSA6IHRoaXMucXVlc3Rpb25Db21tZW50OyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdDb21tZW50KG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52YWx1ZSA9PSBudWxsOyB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLmNoZWNrRm9yRXJyb3JzKGZpcmVDYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRFcnJvckNvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGg7IH1cclxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZCA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dCA6IFwiXCI7IH1cclxuICAgIHB1YmxpYyBhZGRFcnJvcihlcnJvcjogU3VydmV5RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrRm9yRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBlcnJvckxlbmd0aCA9IHRoaXMuZXJyb3JzID8gdGhpcy5lcnJvcnMubGVuZ3RoIDogMDtcclxuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgICAgIHRoaXMub25DaGVja0ZvckVycm9ycyh0aGlzLmVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA9PSAwICYmIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5ydW5WYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuZXJyb3JzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMuc3VydmV5LnZhbGlkYXRlUXVlc3Rpb24odGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlyZUNhbGxiYWNrICYmIChlcnJvckxlbmd0aCAhPSB0aGlzLmVycm9ycy5sZW5ndGggfHwgZXJyb3JMZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQW5zd2VyUmVxdWlyZWRFcnJvcigpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzUmVxdWlyZWRFcnJvcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMuaXNFbXB0eSgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJ1blZhbGlkYXRvcnMoKTogU3VydmV5RXJyb3Ige1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUnVubmVyKCkucnVuKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZUluRGF0YShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlVG9EYXRhKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUNvcmUobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVDb3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgIT0gbnVsbCA/IHRoaXMuZGF0YS5nZXRWYWx1ZSh0aGlzLm5hbWUpIDogdGhpcy5xdWVzdGlvblZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0VmFsdWUodGhpcy5uYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkgeyByZXR1cm4gdmFsOyB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkgeyByZXR1cm4gdmFsOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7IH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnNldENvbW1lbnQodGhpcy5uYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHRoaXMucXVlc3Rpb25Db21tZW50ID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgICAvL0lRdWVzdGlvblxyXG4gICAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVGcm9tRGF0YShuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vSVZhbGlkYXRvck93bmVyXHJcbiAgICBnZXRWYWxpZGF0b3JUaXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gbnVsbDsgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJxdWVzdGlvblwiLCBbeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgIHsgbmFtZTogXCJjb21tZW50VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tbWVudFRleHRcIiB9LFxyXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgXCJyZWFkT25seTpib29sZWFuXCIsIHsgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIiwgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl2YWxpZGF0b3JcIiwgY2xhc3NOYW1lUGFydDogXCJ2YWxpZGF0b3JcIn1dLCBudWxsLCBcInF1ZXN0aW9uYmFzZVwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb24udHMiLCJpbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtVmFsdWUge1xyXG4gICAgcHVibGljIHN0YXRpYyBTZXBhcmF0b3IgPSAnfCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUFycmF5KGxvY093bmVyOiBJTG9jYWxpemFibGVPd25lcik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIHZhciBpdGVtczogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXR1cEFycmF5KGl0ZW1zLCBsb2NPd25lcik7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBzZXR1cEFycmF5KGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpIHtcclxuICAgICAgICBpdGVtcy5wdXNoID0gZnVuY3Rpb24odmFsdWUpOiBudW1iZXIge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlLmxvY093bmVyID0gbG9jT3duZXI7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpdGVtcy5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogSXRlbVZhbHVlW10pOiBJdGVtVmFsdWVbXSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcywgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi4gaXRlbXMpO1xyXG4gICAgICAgICAgICBpZighaXRlbXMpIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zW2ldLmxvY093bmVyID0gbG9jT3duZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBzZXREYXRhKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCB2YWx1ZXM6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBpdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgSXRlbVZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICBpdGVtLnNldERhdGEodmFsdWUpO1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPik6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaGFzVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyB2YWx1ZTogaXRlbS52YWx1ZSwgdGV4dDogaXRlbS5sb2NUZXh0LmdldEpzb24oKSB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEl0ZW1CeVZhbHVlKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCB2YWw6IGFueSk6IEl0ZW1WYWx1ZSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLnZhbHVlID09IHZhbCkgcmV0dXJuIGl0ZW1zW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIGl0ZW1WYWx1ZVByb3AgPSBbIFwidGV4dFwiLCBcInZhbHVlXCIsIFwiaGFzVGV4dFwiLCBcImxvY093bmVyXCIsIFwibG9jVGV4dFwiXTtcclxuICAgIHByaXZhdGUgaXRlbVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIGxvY1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogYW55LCB0ZXh0OiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcobnVsbCk7XHJcbiAgICAgICAgaWYodGV4dCkgdGhpcy5sb2NUZXh0LnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcIml0ZW12YWx1ZVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUZXh0VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jT3duZXIoKSA6IElMb2NhbGl6YWJsZU93bmVyIHsgcmV0dXJuIHRoaXMubG9jVGV4dC5vd25lcjsgfVxyXG4gICAgcHVibGljIHNldCBsb2NPd25lcih2YWx1ZTogSUxvY2FsaXphYmxlT3duZXIpIHsgdGhpcy5sb2NUZXh0Lm93bmVyID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHsgcmV0dXJuIHRoaXMuaXRlbVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLml0ZW1WYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtVmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YXIgc3RyOiBzdHJpbmcgPSB0aGlzLml0ZW1WYWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHN0ci5pbmRleE9mKEl0ZW1WYWx1ZS5TZXBhcmF0b3IpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbVZhbHVlID0gc3RyLnNsaWNlKDAsIGluZGV4KTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0ID0gc3RyLnNsaWNlKGluZGV4ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUZXh0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5sb2NUZXh0LnRleHQgPyB0cnVlIDogZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1RleHQpIHJldHVybiB0aGlzLmxvY1RleHQudGV4dDtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSkgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGV4dChuZXdUZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmxvY1RleHQudGV4dCA9IG5ld1RleHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0RGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUudmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB2YXIgZXhjZXB0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNPYmpJdGVtVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5pdGVtVmFsdWUgPSB2YWx1ZS5pdGVtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY1RleHQuc2V0SnNvbih2YWx1ZS5sb2NUZXh0LmdldEpzb24oKSk7XHJcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBJdGVtVmFsdWUuaXRlbVZhbHVlUHJvcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvcHlBdHRyaWJ1dGVzKHZhbHVlLCBleGNlcHRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlICBpc09iakl0ZW1WYWx1ZShvYmo6IGFueSkgeyByZXR1cm4gdHlwZW9mIChvYmouZ2V0VHlwZSkgIT09ICd1bmRlZmluZWQnICYmIG9iai5nZXRUeXBlKCkgPT0gJ2l0ZW12YWx1ZSd9XHJcbiAgICBwcml2YXRlIGNvcHlBdHRyaWJ1dGVzKHNyYzogYW55LCBleGNlcHRvbnM6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XHJcbiAgICAgICAgICAgIGlmICgodHlwZW9mIHNyY1trZXldID09ICdmdW5jdGlvbicpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGV4Y2VwdG9ucyAmJiBleGNlcHRvbnMuaW5kZXhPZihrZXkpID4gLTEpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihrZXkgPT0gXCJ0ZXh0XCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jVGV4dC5zZXRKc29uKHNyY1trZXldKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IHNyY1trZXldOyAgICBcclxuICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9pdGVtdmFsdWUudHMiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25Db21tZW50TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCAnJyB9O1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkJsdXIgPSB0aGlzLmhhbmRsZU9uQmx1ci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNvbW1lbnRNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkNvbW1lbnRNb2RlbDsgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCAnJyB9O1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQmx1cihldmVudCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIHx8ICcnIH0pO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybiAoPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzfT57dGhpcy5xdWVzdGlvbi52YWx1ZX08L2Rpdj4pXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5jc3N9IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnBsYWNlSG9sZGVyfSBvbkJsdXI9e3RoaXMuaGFuZGxlT25CbHVyfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0gY29scz17dGhpcy5xdWVzdGlvbi5jb2xzfSByb3dzPXt0aGlzLnF1ZXN0aW9uLnJvd3N9IC8+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZSB7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICAgIHByaXZhdGUgY29tbWVudDogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcHJvcHMucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy5jb21tZW50ID0gdGhpcy5xdWVzdGlvbi5jb21tZW50O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLmNvbW1lbnQgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25CbHVyID0gdGhpcy5oYW5kbGVPbkJsdXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5jb21tZW50IH0pO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25CbHVyKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jb21tZW50ID0gdGhpcy5jb21tZW50O1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBuZXh0UHJvcHMucXVlc3Rpb247XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSlcclxuICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucXVlc3Rpb24uY29tbWVudH0+e3RoaXMuY29tbWVudH08L2Rpdj4pO1xyXG4gICAgICAgIHJldHVybiAoPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPXt0aGlzLmNzcy5xdWVzdGlvbi5jb21tZW50fSB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IG9uQmx1cj17dGhpcy5oYW5kbGVPbkJsdXJ9IC8+KTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25jb21tZW50LnRzeCIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtDaG9pY2VzUmVzdGZ1bGx9IGZyb20gXCIuL2Nob2ljZXNSZXN0ZnVsbFwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uU2VsZWN0QmFzZSBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHByaXZhdGUgdmlzaWJsZUNob2ljZXNDYWNoZTogQXJyYXk8SXRlbVZhbHVlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNvbW1lbnRWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBvdGhlckl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm90aGVyXCIsIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpKTtcclxuICAgIHByaXZhdGUgbG9jT3RoZXJUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NPdGhlckVycm9yVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByb3RlY3RlZCBjYWNoZWRWYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzRnJvbVVybDogQXJyYXk8SXRlbVZhbHVlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbjogYW55ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2hvaWNlc1ZhbHVlczogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHB1YmxpYyBjaG9pY2VzQnlVcmw6IENob2ljZXNSZXN0ZnVsbDtcclxuICAgIHB1YmxpYyBzdG9yZU90aGVyc0FzQ29tbWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIGNob2ljZXNPcmRlclZhbHVlOiBzdHJpbmcgPSBcIm5vbmVcIjtcclxuICAgIGNob2ljZXNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZXMgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzQnlVcmwgPSB0aGlzLmNyZWF0ZVJlc3RmdWxsKCk7XHJcbiAgICAgICAgdGhpcy5sb2NPdGhlclRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY090aGVyRXJyb3JUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsLmdldFJlc3VsdENhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSB7IHNlbGYub25Mb2FkQ2hvaWNlc0Zyb21VcmwoaXRlbXMpIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG90aGVySXRlbSgpOiBJdGVtVmFsdWUge1xyXG4gICAgICAgIHRoaXMub3RoZXJJdGVtVmFsdWUudGV4dCA9IHRoaXMub3RoZXJUZXh0ID8gdGhpcy5vdGhlclRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW1WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzT3RoZXJTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpID8gdGhpcy5nZXRIYXNPdGhlcih0aGlzLnZhbHVlKSA6IHRoaXMuZ2V0SGFzT3RoZXIodGhpcy5jYWNoZWRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0SGFzT3RoZXIodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJlc3RmdWxsKCk6IENob2ljZXNSZXN0ZnVsbCB7IHJldHVybiBuZXcgQ2hvaWNlc1Jlc3RmdWxsKCk7IH1cclxuICAgIHByb3RlY3RlZCBnZXRDb21tZW50KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHN1cGVyLmdldENvbW1lbnQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU2V0dGluZ0NvbW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBzZXRDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKVxyXG4gICAgICAgICAgICBzdXBlci5zZXRDb21tZW50KG5ld1ZhbHVlKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2V0dGluZ0NvbW1lbnQgJiYgbmV3VmFsdWUgIT0gdGhpcy5jb21tZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPdGhlclNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZUluRGF0YSh0aGlzLmNhY2hlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUpIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uID0gbmV3VmFsdWU7ICAgICAgICBcclxuICAgICAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHN1cGVyLnZhbHVlRnJvbURhdGEodmFsKTtcclxuICAgICAgICB0aGlzLmNhY2hlZFZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhQ29yZSh2YWwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSByZXR1cm4gc3VwZXIudmFsdWVUb0RhdGEodmFsKTtcclxuICAgICAgICB0aGlzLmNhY2hlZFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlVG9EYXRhQ29yZSh2YWwpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCkpIHJldHVybiB2YWw7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkgcmV0dXJuIHZhbDtcclxuICAgICAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSAmJiB0aGlzLmdldENvbW1lbnQoKSkge1xyXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmdldENvbW1lbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBoYXNVbmtub3duVmFsdWUodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuYWN0aXZlQ2hvaWNlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtc1tpXS52YWx1ZSA9PSB2YWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlczsgfVxyXG4gICAgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZXMsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIGdldCBjaG9pY2VzT3JkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY2hvaWNlc09yZGVyVmFsdWU7IH1cclxuICAgIHNldCBjaG9pY2VzT3JkZXIobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSB0aGlzLmNob2ljZXNPcmRlclZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzT3JkZXJWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3RoZXJUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY090aGVyVGV4dC50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IG90aGVyVGV4dCh2YWx1ZTogc3RyaW5nKSB7IFxyXG4gICAgICAgIHRoaXMubG9jT3RoZXJUZXh0LnRleHQgPSB2YWx1ZTsgXHJcbiAgICAgICAgdGhpcy51cGRhdGVPdGhlckl0ZW0oKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3RoZXJFcnJvclRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJFcnJvclRleHQudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBvdGhlckVycm9yVGV4dCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jT3RoZXJFcnJvclRleHQudGV4dCA9IHZhbHVlOyAgfVxyXG4gICAgcHVibGljIGdldCBsb2NPdGhlclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlclRleHRWYWx1ZTsgfSBcclxuICAgIHB1YmxpYyBnZXQgbG9jT3RoZXJFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlckVycm9yVGV4dFZhbHVlOyB9IFxyXG4gICAgXHJcbiAgICBnZXQgdmlzaWJsZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc090aGVyICYmIHRoaXMuY2hvaWNlc09yZGVyID09IFwibm9uZVwiKSByZXR1cm4gdGhpcy5hY3RpdmVDaG9pY2VzO1xyXG4gICAgICAgIGlmKCF0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGUpIHtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlID0gdGhpcy5zb3J0VmlzaWJsZUNob2ljZXModGhpcy5hY3RpdmVDaG9pY2VzLnNsaWNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNPdGhlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlLnB1c2godGhpcy5vdGhlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBhY3RpdmVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4geyByZXR1cm4gdGhpcy5jaG9pY2VzRnJvbVVybCA/IHRoaXMuY2hvaWNlc0Zyb21VcmwgOiB0aGlzLmNob2ljZXM7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xyXG4gICAgICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNPdGhlclNlbGVjdGVkIHx8IHRoaXMuY29tbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciB0ZXh0ID0gdGhpcy5vdGhlckVycm9yVGV4dDtcclxuICAgICAgICBpZiAoIXRleHQpIHtcclxuICAgICAgICAgICAgdGV4dCA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlclJlcXVpcmVkRXJyb3JcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBDdXN0b21FcnJvcih0ZXh0KSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHN1cGVyLm9uTG9jYWxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT3RoZXJJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZU90aGVySXRlbSgpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHRoaXMub3RoZXJJdGVtOyAvLyBzZXQgdGhlIGNvcnJlY3QgdGV4dFxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY2hvaWNlc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSB7IHJldHVybiB0aGlzLnN0b3JlT3RoZXJzQXNDb21tZW50ICYmICh0aGlzLnN1cnZleSAhPSBudWxsID8gdGhpcy5zdXJ2ZXkuc3RvcmVPdGhlcnNBc0NvbW1lbnQgOiB0cnVlKTsgfVxyXG4gICAgb25TdXJ2ZXlMb2FkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNCeVVybCkgdGhpcy5jaG9pY2VzQnlVcmwucnVuKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uTG9hZENob2ljZXNGcm9tVXJsKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KSB7XHJcbiAgICAgICAgdmFyIGVycm9yQ291bnQgPSB0aGlzLmVycm9ycy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwgJiYgdGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh0aGlzLmNob2ljZXNCeVVybC5lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvckNvdW50ID4gMCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld0Nob2ljZXMgPSBudWxsO1xyXG4gICAgICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG5ld0Nob2ljZXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xyXG4gICAgICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YShuZXdDaG9pY2VzLCBhcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hvaWNlc0Zyb21VcmwgPSBuZXdDaG9pY2VzO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNob2ljZXNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzb3J0VmlzaWJsZUNob2ljZXMoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICB2YXIgb3JkZXIgPSB0aGlzLmNob2ljZXNPcmRlci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChvcmRlciA9PSBcImFzY1wiKSByZXR1cm4gdGhpcy5zb3J0QXJyYXkoYXJyYXksIDEpO1xyXG4gICAgICAgIGlmIChvcmRlciA9PSBcImRlc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAtMSk7XHJcbiAgICAgICAgaWYgKG9yZGVyID09IFwicmFuZG9tXCIpIHJldHVybiB0aGlzLnJhbmRvbWl6ZUFycmF5KGFycmF5KTtcclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNvcnRBcnJheShhcnJheTogQXJyYXk8SXRlbVZhbHVlPiwgbXVsdDogbnVtYmVyKTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgaWYgKGEudGV4dCA8IGIudGV4dCkgcmV0dXJuIC0xICogbXVsdDtcclxuICAgICAgICAgICAgaWYgKGEudGV4dCA+IGIudGV4dCkgcmV0dXJuIDEgKiBtdWx0O1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmFuZG9taXplQXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpICsgMSkpO1xyXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xyXG4gICAgICAgICAgICBhcnJheVtqXSA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH1cclxuICAgIGNsZWFyVW51c2VkVmFsdWVzKCkge1xyXG4gICAgICAgIHN1cGVyLmNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuaXNPdGhlclNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveEJhc2UgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAxO1xyXG4gICAgY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInNlbGVjdGJhc2VcIiwgW1wiaGFzQ29tbWVudDpib29sZWFuXCIsIFwiaGFzT3RoZXI6Ym9vbGVhblwiLFxyXG4gICAgeyBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jaG9pY2VzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzID0gdmFsdWU7IH19LFxyXG4gICAgeyBuYW1lOiBcImNob2ljZXNPcmRlclwiLCBkZWZhdWx0OiBcIm5vbmVcIiwgY2hvaWNlczogW1wibm9uZVwiLCBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIl0gfSxcclxuICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIiwgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIG9iai5jaG9pY2VzQnlVcmwuaXNFbXB0eSA/IG51bGwgOiBvYmouY2hvaWNlc0J5VXJsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTsgfSB9LFxyXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJUZXh0XCIgfSwge25hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY090aGVyRXJyb3JUZXh0XCJ9LFxyXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZX1dLCBudWxsLCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNoZWNrYm94YmFzZVwiLCBbeyBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAxLCBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNF0gfV0sIG51bGwsIFwic2VsZWN0YmFzZVwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5pbXBvcnQge0NvbmRpdGlvbnNQYXJzZXJ9IGZyb20gJy4vY29uZGl0aW9uc1BhcnNlcic7XHJcbmltcG9ydCB7UHJvY2Vzc1ZhbHVlfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb24ge1xyXG4gICAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcclxuICAgIHN0YXRpYyBnZXQgb3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGlmIChDb25kaXRpb24ub3BlcmF0b3JzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIENvbmRpdGlvbi5vcGVyYXRvcnNWYWx1ZTtcclxuICAgICAgICBDb25kaXRpb24ub3BlcmF0b3JzVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuICFsZWZ0OyB9LFxyXG4gICAgICAgICAgICBub3RlbXB0eTogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiAhKCFsZWZ0KTsgfSxcclxuICAgICAgICAgICAgZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA9PSByaWdodDsgfSxcclxuICAgICAgICAgICAgbm90ZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCAhPSByaWdodDsgfSxcclxuICAgICAgICAgICAgY29udGFpbnM6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCAmJiBsZWZ0W1wiaW5kZXhPZlwiXSAmJiBsZWZ0LmluZGV4T2YocmlnaHQpID4gLTE7IH0sXHJcbiAgICAgICAgICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuICFsZWZ0IHx8ICFsZWZ0W1wiaW5kZXhPZlwiXSB8fCBsZWZ0LmluZGV4T2YocmlnaHQpID09IC0xOyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPiByaWdodDsgfSxcclxuICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0IDwgcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPj0gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPD0gcmlnaHQ7IH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBDb25kaXRpb24ub3BlcmF0b3JzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wVmFsdWU6IHN0cmluZyA9IFwiZXF1YWxcIjtcclxuICAgIHB1YmxpYyBsZWZ0OiBhbnk7XHJcbiAgICBwdWJsaWMgcmlnaHQ6IGFueTtcclxuICAgIHB1YmxpYyBnZXQgb3BlcmF0b3IoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMub3BWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoIUNvbmRpdGlvbi5vcGVyYXRvcnNbdmFsdWVdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vcFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcGVyZm9ybShsZWZ0OiBhbnkgPSBudWxsLCByaWdodDogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbGVmdCkgbGVmdCA9IHRoaXMubGVmdDtcclxuICAgICAgICBpZiAoIXJpZ2h0KSByaWdodCA9IHRoaXMucmlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBDb25kaXRpb24ub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHRoaXMuZ2V0UHVyZVZhbHVlKGxlZnQpLCB0aGlzLmdldFB1cmVWYWx1ZShyaWdodCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRQdXJlVmFsdWUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdmFsIHx8ICh0eXBlb2YgdmFsICE9IFwic3RyaW5nXCIpKSByZXR1cm4gdmFsO1xyXG4gICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gMCAmJiAodmFsWzBdID09IFwiJ1wiIHx8IHZhbFswXSA9PSAnXCInKSkgIHZhbCA9IHZhbC5zdWJzdHIoMSk7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxlbiA+IDAgJiYgKHZhbFtsZW4gLSAxXSA9PSBcIidcIiB8fCB2YWxbbGVuIC0gMV0gPT0gJ1wiJykpICB2YWwgPSB2YWwuc3Vic3RyKDAsIGxlbiAtIDEpO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbk5vZGUge1xyXG4gICAgcHJpdmF0ZSBjb25uZWN0aXZlVmFsdWU6IHN0cmluZyA9IFwiYW5kXCI7XHJcbiAgICBwdWJsaWMgY2hpbGRyZW46IEFycmF5PGFueT4gPSBbXTtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIGdldCBjb25uZWN0aXZlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbm5lY3RpdmVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb25uZWN0aXZlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIiZcIiB8fCB2YWx1ZSA9PSBcIiYmXCIpIHZhbHVlID0gXCJhbmRcIjtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdmFsdWUgPT0gXCJ8fFwiKSB2YWx1ZSA9IFwib3JcIjtcclxuICAgICAgICBpZiAodmFsdWUgIT0gXCJhbmRcIiAmJiB2YWx1ZSAhPSBcIm9yXCIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbm5lY3RpdmVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCkgeyByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMDsgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RpdmUgPSBcImFuZFwiO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25SdW5uZXIge1xyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcHJvY2Vzc1ZhbHVlOiBQcm9jZXNzVmFsdWU7XHJcbiAgICBwcml2YXRlIHJvb3Q6IENvbmRpdGlvbk5vZGU7XHJcbiAgICBwcml2YXRlIHZhbHVlczogSGFzaFRhYmxlPGFueT47XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmV4cHJlc3Npb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBuZXcgQ29uZGl0aW9uc1BhcnNlcigpLnBhcnNlKHRoaXMuZXhwcmVzc2lvblZhbHVlLCB0aGlzLnJvb3QpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJ1bih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuTm9kZSh0aGlzLnJvb3QpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Ob2RlKG5vZGU6IENvbmRpdGlvbk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgb25GaXJzdEZhaWwgPSBub2RlLmNvbm5lY3RpdmUgPT0gXCJhbmRcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMucnVuTm9kZUNvbmRpdGlvbihub2RlLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgaWYgKCFyZXMgJiYgb25GaXJzdEZhaWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiAhb25GaXJzdEZhaWwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb25GaXJzdEZhaWw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bk5vZGVDb25kaXRpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodmFsdWVbXCJjaGlsZHJlblwiXSkgcmV0dXJuIHRoaXMucnVuTm9kZSh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlW1wibGVmdFwiXSkgcmV0dXJuIHRoaXMucnVuQ29uZGl0aW9uKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bkNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7XHJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZShsZWZ0KTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc1ZhbHVlLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKSkgcmV0dXJuIGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJlbXB0eVwiO1xyXG4gICAgICAgICAgICBsZWZ0ID0gdGhpcy5wcm9jZXNzVmFsdWUuZ2V0VmFsdWUobmFtZSwgdGhpcy52YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmlnaHQgPSBjb25kaXRpb24ucmlnaHQ7XHJcbiAgICAgICAgbmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKHJpZ2h0KTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc1ZhbHVlLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByaWdodCA9IHRoaXMucHJvY2Vzc1ZhbHVlLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmRpdGlvbi5wZXJmb3JtKGxlZnQsIHJpZ2h0KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVOYW1lKG5vZGVWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFub2RlVmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZVZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKG5vZGVWYWx1ZS5sZW5ndGggPCAzIHx8IG5vZGVWYWx1ZVswXSAhPSAneycgfHwgbm9kZVZhbHVlW25vZGVWYWx1ZS5sZW5ndGggLSAxXSAhPSAnfScpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBub2RlVmFsdWUuc3Vic3RyKDEsIG5vZGVWYWx1ZS5sZW5ndGggLSAyKTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSAnLi4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSAnLi4vcXVlc3Rpb24nO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gJy4vcmVhY3RxdWVzdGlvbmNvbW1lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvciB7XHJcbiAgICBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSk6IEpTWC5FbGVtZW50O1xyXG4gICAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yVGV4dDogc3RyaW5nKTogSlNYLkVsZW1lbnQ7XHJcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcXVlc3Rpb25CYXNlOiBRdWVzdGlvbkJhc2U7XHJcbiAgICBwcm90ZWN0ZWQgcXVlc3Rpb246IFF1ZXN0aW9uO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvbihwcm9wcy5xdWVzdGlvbik7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvbihuZXh0UHJvcHMucXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRRdWVzdGlvbihxdWVzdGlvbikge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlID0gcXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHF1ZXN0aW9uIGluc3RhbmNlb2YgUXVlc3Rpb24gPyBxdWVzdGlvbiA6IG51bGw7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5xdWVzdGlvbiA/IHRoaXMucXVlc3Rpb24udmFsdWUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IFxyXG4gICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlLCB2YWx1ZTogdmFsdWUsIGVycm9yOiAwLCByZW5kZXJXaWR0aDogMCxcclxuICAgICAgICAgICAgdmlzaWJsZUluZGV4VmFsdWU6IC0xLCBpc1JlYWRPbmx5IDogdGhpcy5xdWVzdGlvbkJhc2UuaXNSZWFkT25seVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZVtcInJlYWN0XCJdID0gc2VsZjtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLnJlbmRlcldpZHRoID0gc2VsZi5zdGF0ZS5yZW5kZXJXaWR0aCArIDE7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS52aXNpYmxlSW5kZXhWYWx1ZSA9IHNlbGYucXVlc3Rpb25CYXNlLnZpc2libGVJbmRleDtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUuaXNSZWFkT25seSA9IHNlbGYucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMucmVmc1tcInJvb3RcIl07XHJcbiAgICAgICAgICAgIGlmIChlbCAmJiB0aGlzLnF1ZXN0aW9uQmFzZS5zdXJ2ZXkpIHRoaXMucXVlc3Rpb25CYXNlLnN1cnZleS5hZnRlclJlbmRlclF1ZXN0aW9uKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcclxuICAgICAgICAgICAgICAgIGVsID0gdGhpcy5yZWZzW1wid2lkZ2V0XCJdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsKSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMucmVmc1tcInJvb3RcIl07XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlW1wicmVhY3RcIl0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xyXG4gICAgICAgICAgICBlbCA9IHRoaXMucmVmc1tcIndpZGdldFwiXTtcclxuICAgICAgICAgICAgaWYgKGVsKSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbkJhc2UgfHwgIXRoaXMuY3JlYXRvcikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcXVlc3Rpb25SZW5kZXIgPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5xdWVzdGlvbkJhc2UuaGFzVGl0bGUgPyB0aGlzLnJlbmRlclRpdGxlKCkgOiBudWxsO1xyXG4gICAgICAgIHZhciB0aXRsZVRvcCA9IHRoaXMuY3JlYXRvci5xdWVzdGlvblRpdGxlTG9jYXRpb24oKSA9PSBcInRvcFwiID8gdGl0bGUgOiBudWxsO1xyXG4gICAgICAgIHZhciB0aXRsZUJvdHRvbSA9IHRoaXMuY3JlYXRvci5xdWVzdGlvblRpdGxlTG9jYXRpb24oKSA9PSBcImJvdHRvbVwiID8gdGl0bGUgOiBudWxsO1xyXG4gICAgICAgIHZhciBjb21tZW50ID0gKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5oYXNDb21tZW50KSA/IHRoaXMucmVuZGVyQ29tbWVudCgpIDogbnVsbDtcclxuICAgICAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoKTtcclxuICAgICAgICB2YXIgbWFyZ2luTGVmdCA9ICh0aGlzLnF1ZXN0aW9uQmFzZS5pbmRlbnQgPiAwKSA/IHRoaXMucXVlc3Rpb25CYXNlLmluZGVudCAqIHRoaXMuY3NzLnF1ZXN0aW9uLmluZGVudCArIFwicHhcIiA6IG51bGw7XHJcbiAgICAgICAgdmFyIHBhZGRpbmdSaWdodCA9ICh0aGlzLnF1ZXN0aW9uQmFzZS5yaWdodEluZGVudCA+IDApID8gdGhpcy5xdWVzdGlvbkJhc2UucmlnaHRJbmRlbnQgKiB0aGlzLmNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCIgOiBudWxsO1xyXG4gICAgICAgIHZhciByb290U3R5bGUgPSB7IGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLCB2ZXJ0aWNhbEFsaWduOiAndG9wJyB9O1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJXaWR0aCkgcm9vdFN0eWxlW1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJXaWR0aDtcclxuICAgICAgICBpZiAobWFyZ2luTGVmdCkgcm9vdFN0eWxlW1wibWFyZ2luTGVmdFwiXSA9IG1hcmdpbkxlZnQ7XHJcbiAgICAgICAgaWYgKHBhZGRpbmdSaWdodCkgcm9vdFN0eWxlW1wicGFkZGluZ1JpZ2h0XCJdID0gcGFkZGluZ1JpZ2h0O1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgIHJlZj1cInJvb3RcIiBpZD17dGhpcy5xdWVzdGlvbkJhc2UuaWR9IGNsYXNzTmFtZT17dGhpcy5jc3MucXVlc3Rpb24ucm9vdH0gc3R5bGU9e3Jvb3RTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICB7dGl0bGVUb3B9XHJcbiAgICAgICAgICAgICAgICB7ZXJyb3JzfVxyXG4gICAgICAgICAgICAgICAge3F1ZXN0aW9uUmVuZGVyfVxyXG4gICAgICAgICAgICAgICAge2NvbW1lbnR9XHJcbiAgICAgICAgICAgICAgICB7dGl0bGVCb3R0b219XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBjdXN0b21XaWRnZXQgPSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQ7XHJcbiAgICAgICAgaWYgKCFjdXN0b21XaWRnZXQpIHJldHVybiB0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKTtcclxuICAgICAgICB2YXIgd2lkZ2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiByZWY9XCJ3aWRnZXRcIj57dGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudCh0aGlzLnF1ZXN0aW9uQmFzZSl9PC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IHJlZj1cIndpZGdldFwiIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9PjwvZGl2Pik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgcmVmPVwid2lkZ2V0XCI+e3dpZGdldH08L2Rpdj5cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHRpdGxlVGV4dCA9IHRoaXMucXVlc3Rpb24uZnVsbFRpdGxlO1xyXG4gICAgICAgIHJldHVybiAoPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MucXVlc3Rpb24udGl0bGV9Pnt0aXRsZVRleHR9PC9oNT4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckNvbW1lbnQoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiAoPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+e3RoaXMucXVlc3Rpb24uY29tbWVudFRleHR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGNzcz17dGhpcy5jc3N9IC8+XHJcbiAgICAgICAgICAgIDwvZGl2Pik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPFN1cnZleVF1ZXN0aW9uRXJyb3JzIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMuY3NzfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVycm9ycyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICAgIHByaXZhdGUgY3JlYXRvcjogSVN1cnZleUNyZWF0b3I7XHJcbiAgICBwcm90ZWN0ZWQgY3NzOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UXVlc3Rpb24ocHJvcHMucXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IHByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBwcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvbihuZXh0UHJvcHMucXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IG5leHRQcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gbmV4dFByb3BzLmNzcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UXVlc3Rpb24ocXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcXVlc3Rpb24gaW5zdGFuY2VvZiBRdWVzdGlvbiA/IHF1ZXN0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZXJyb3JzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5lcnJvciA9IHNlbGYuc3RhdGUuZXJyb3IgKyAxO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlID0geyBlcnJvcjogMCB9O1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24gfHwgdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBlcnJvcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvclRleHQgPSB0aGlzLnF1ZXN0aW9uLmVycm9yc1tpXS5nZXRUZXh0KCk7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcImVycm9yXCIgKyBpO1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaCh0aGlzLmNyZWF0b3IucmVuZGVyRXJyb3Ioa2V5LCBlcnJvclRleHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuZXJyb3Iucm9vdH0+e2Vycm9yc308L2Rpdj4pO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xyXG5pbXBvcnQge1N1cnZleX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5XCI7XHJcbmltcG9ydCB7U3VydmV5V2luZG93fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlORyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlbmRlcihlbGVtZW50SWQ6IHN0cmluZyB8IEVsZW1lbnQsIHByb3BzKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQ6IEVsZW1lbnQgPSB0eXBlb2YgZWxlbWVudElkID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCkgOiBlbGVtZW50SWQ7XHJcbiAgICAgICAgUmVhY3RET00ucmVuZGVyKDxTdXJ2ZXkgey4uLnByb3BzfSAvPiwgZWxlbWVudCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3dORyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlbmRlcihlbGVtZW50SWQ6IHN0cmluZyB8IEVsZW1lbnQsIHByb3BzKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQ6IEVsZW1lbnQgPSB0eXBlb2YgZWxlbWVudElkID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCkgOiBlbGVtZW50SWQ7XHJcbiAgICAgICAgUmVhY3RET00ucmVuZGVyKDxTdXJ2ZXlXaW5kb3cgey4uLnByb3BzfSAvPiwgZWxlbWVudCk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYW5ndWxhci9TdXJ2ZXlORy50c3giLCJpbXBvcnQge0Jhc2UsIFN1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hvaWNlc1Jlc3RmdWxsIGV4dGVuZHMgQmFzZSB7XHJcbiAgICBwdWJsaWMgdXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHBhdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgdmFsdWVOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHRpdGxlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJ1bigpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXJsIHx8ICF0aGlzLmdldFJlc3VsdENhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB0aGlzLnVybCk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLm9uTG9hZChKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImNob2ljZXNCeVVybFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnVybCAmJiAhdGhpcy5wYXRoICYmICF0aGlzLnZhbHVlTmFtZSAmJiAhdGhpcy50aXRsZU5hbWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0RGF0YShqc29uOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgaWYgKGpzb24udXJsKSB0aGlzLnVybCA9IGpzb24udXJsO1xyXG4gICAgICAgIGlmIChqc29uLnBhdGgpIHRoaXMucGF0aCA9IGpzb24ucGF0aDtcclxuICAgICAgICBpZiAoanNvbi52YWx1ZU5hbWUpIHRoaXMudmFsdWVOYW1lID0ganNvbi52YWx1ZU5hbWU7XHJcbiAgICAgICAgaWYgKGpzb24udGl0bGVOYW1lKSB0aGlzLnRpdGxlTmFtZSA9IGpzb24udGl0bGVOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMudXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBhdGggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkKHJlc3VsdDogYW55KSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5nZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0KTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdFtcImxlbmd0aFwiXSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IHJlc3VsdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICghaXRlbVZhbHVlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobmV3IEl0ZW1WYWx1ZSh2YWx1ZSwgdGl0bGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVybEdldENob2ljZXNFcnJvclwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVycm9yKHN0YXR1czogc3RyaW5nLCByZXNwb25zZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBDdXN0b21FcnJvcihzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsUmVxdWVzdEVycm9yXCIpW1wiZm9ybWF0XCJdKHN0YXR1cywgcmVzcG9uc2UpKTtcclxuICAgICAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKFtdKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhdGgpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgdmFyIHBhdGhlcyA9IHRoaXMuZ2V0UGF0aGVzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhlc1tpXV07XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UGF0aGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwYXRoZXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5wYXRoLmluZGV4T2YoJzsnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHBhdGhlcyA9IHRoaXMucGF0aC5zcGxpdCgnOycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhdGhlcyA9IHRoaXMucGF0aC5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF0aGVzLmxlbmd0aCA9PSAwKSBwYXRoZXMucHVzaCh0aGlzLnBhdGgpO1xyXG4gICAgICAgIHJldHVybiBwYXRoZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lKSByZXR1cm4gaXRlbVt0aGlzLnZhbHVlTmFtZV07XHJcbiAgICAgICAgdmFyIGxlbiA9IE9iamVjdC5rZXlzKGl0ZW0pLmxlbmd0aDtcclxuICAgICAgICBpZiAobGVuIDwgMSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bT2JqZWN0LmtleXMoaXRlbSlbMF1dO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUaXRsZShpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdGhpcy50aXRsZU5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMudGl0bGVOYW1lXTtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiY2hvaWNlc0J5VXJsXCIsIFtcInVybFwiLCBcInBhdGhcIiwgXCJ2YWx1ZU5hbWVcIiwgXCJ0aXRsZU5hbWVcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nob2ljZXNSZXN0ZnVsbC50cyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2Nlc3NWYWx1ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIGdldEZpcnN0TmFtZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgdmFyIHJlcyA9IFwiXCI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaCA9IHRleHRbaV07XHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ1snKSBicmVhaztcclxuICAgICAgICAgICAgcmVzICs9IGNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc1ZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xyXG4gICAgICAgIHJldHVybiByZXMuaGFzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcclxuICAgICAgICByZXR1cm4gcmVzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHsgaGFzVmFsdWU6IGZhbHNlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICAgIHZhciBjdXJWYWx1ZSA9IHZhbHVlcztcclxuICAgICAgICBpZiAoIWN1clZhbHVlKSByZXR1cm4gcmVzO1xyXG4gICAgICAgIHZhciBpc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAodGV4dCAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzQXJyYXkgPSAhaXNGaXJzdCAmJiB0ZXh0WzBdID09ICdbJztcclxuICAgICAgICAgICAgaWYgKCFpc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3QpIHRleHQgPSB0ZXh0LnN1YnN0cigxKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdE5hbWUodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1ck5hbWUpIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1clZhbHVlW2N1ck5hbWVdKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBjdXJWYWx1ZVtjdXJOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKGN1ck5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJWYWx1ZSkpIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0W2luZGV4XSAhPSAnXScpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGV4dFtpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRleHQgPSBpbmRleCA8IHRleHQubGVuZ3RoID8gdGV4dC5zdWJzdHIoaW5kZXggKyAxKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0SW50VmFsdWUoc3RyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gY3VyVmFsdWUubGVuZ3RoKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBjdXJWYWx1ZVtpbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMudmFsdWUgPSBjdXJWYWx1ZTtcclxuICAgICAgICByZXMuaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEludFZhbHVlKHN0cjogYW55KSB7XHJcbiAgICAgICAgaWYgKHN0ciA9PSBcIjBcIiB8fCAoKHN0ciB8IDApID4gMCAmJiBzdHIgJSAxID09IDApKVxyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHN0cik7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsImV4cG9ydCB2YXIgc3VydmV5Q3NzID0ge1xyXG4gICAgY3VycmVudFR5cGU6IFwiXCIsXHJcbiAgICBnZXRDc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50VHlwZSA/IHRoaXNbdGhpcy5jdXJyZW50VHlwZV0gOiBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICAgICAgaWYgKCFsb2MpIGxvYyA9IGRlZmF1bHRTdGFuZGFyZENzcztcclxuICAgICAgICByZXR1cm4gbG9jO1xyXG4gICAgfSxcclxufTtcclxuXHJcbmV4cG9ydCB2YXIgZGVmYXVsdFN0YW5kYXJkQ3NzID0ge1xyXG4gICAgcm9vdDogXCJzdl9tYWluXCIsXHJcbiAgICBoZWFkZXI6IFwiXCIsXHJcbiAgICBib2R5OiBcInN2X2JvZHlcIixcclxuICAgIGZvb3RlcjogXCJzdl9uYXZcIixcclxuICAgIG5hdmlnYXRpb25CdXR0b246IFwiXCIsIG5hdmlnYXRpb246IHsgY29tcGxldGU6IFwiXCIsIHByZXY6XCJcIiwgbmV4dDogXCJcIn0sXHJcbiAgICBwcm9ncmVzczogXCJzdl9wcm9ncmVzc1wiLCBwcm9ncmVzc0JhcjogXCJcIixcclxuICAgIHBhZ2VUaXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICByb3c6IFwic3Zfcm93XCIsXHJcbiAgICBxdWVzdGlvbjogeyByb290OiBcInN2X3FcIiwgdGl0bGU6IFwic3ZfcV90aXRsZVwiLCBjb21tZW50OiBcIlwiLCBpbmRlbnQ6IDIwIH0sXHJcbiAgICBlcnJvcjogeyByb290OiBcInN2X3FfZXJib3hcIiwgaWNvbjogXCJcIiwgaXRlbTogXCJcIiB9LFxyXG5cclxuICAgIGNoZWNrYm94OiB7IHJvb3Q6IFwic3ZfcWNiY1wiLCBpdGVtOiBcInN2X3FfY2hlY2tib3hcIiwgb3RoZXI6IFwic3ZfcV9vdGhlclwiIH0sXHJcbiAgICBjb21tZW50OiBcIlwiLFxyXG4gICAgZHJvcGRvd246IHsgcm9vdDogXCJcIiwgY29udHJvbDogXCJcIiB9LFxyXG4gICAgbWF0cml4OiB7IHJvb3Q6IFwic3ZfcV9tYXRyaXhcIiB9LFxyXG4gICAgbWF0cml4ZHJvcGRvd246IHsgcm9vdDogXCJzdl9xX21hdHJpeFwiIH0sXHJcbiAgICBtYXRyaXhkeW5hbWljOiB7IHJvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcIlwiIH0sXHJcbiAgICBtdWx0aXBsZXRleHQ6IHsgcm9vdDogXCJcIiwgaXRlbVRpdGxlOiBcIlwiLCBpdGVtVmFsdWU6IFwiXCIgfSxcclxuICAgIHJhZGlvZ3JvdXA6IHsgcm9vdDogXCJzdl9xY2JjXCIsIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsIGxhYmVsOiBcIlwiLCBvdGhlcjogXCJzdl9xX290aGVyXCIgfSxcclxuICAgIHJhdGluZzogeyByb290OiBcInN2X3FfcmF0aW5nXCIsIGl0ZW06IFwic3ZfcV9yYXRpbmdfaXRlbVwiIH0sXHJcbiAgICB0ZXh0OiBcIlwiLFxyXG4gICAgd2luZG93OiB7XHJcbiAgICAgICAgcm9vdDogXCJzdl93aW5kb3dcIiwgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxyXG4gICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLCB0aXRsZTogXCJcIiwgYnV0dG9uOiBcIlwiLCBidXR0b25FeHBhbmRlZDogXCJcIiwgYnV0dG9uQ29sbGFwc2VkOiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuc3VydmV5Q3NzW1wic3RhbmRhcmRcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmQudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtCYXNlLCBJU3VydmV5RGF0YSwgSGFzaFRhYmxlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkRyb3Bkb3duTW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9jaGVja2JveFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25UZXh0TW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5pbXBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxsXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgb25Sb3dDaGFuZ2VkKGNlbGw6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBuZXdSb3dWYWx1ZTogYW55KTtcclxuICAgIGNvbHVtbnM6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPjtcclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbjtcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93bkNvbHVtbiBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc090aGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWluV2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY2VsbFR5cGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG4gICAgcHVibGljIGlucHV0VHlwZTogc3RyaW5nID0gXCJ0ZXh0XCI7XHJcbiAgICBwdWJsaWMgY2hvaWNlc09yZGVyOiBzdHJpbmcgPSBcIm5vbmVcIjtcclxuICAgIHB1YmxpYyBjaG9pY2VzQnlVcmw6IENob2ljZXNSZXN0ZnVsbDtcclxuICAgIHB1YmxpYyBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybCA9IG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCkgeyByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiIH1cclxuICAgIFxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbih2YWx1ZTogc3RyaW5nKXsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAtMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlID0gZGF0YS5jcmVhdGVRdWVzdGlvbih0aGlzLnJvdywgdGhpcy5jb2x1bW4pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZS5zZXREYXRhKHJvdyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5xdWVzdGlvbi52YWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RGF0YSwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaWRDb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWQoKTogc3RyaW5nIHsgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrOyB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YTtcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSByb3dDb21tZW50czogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaWRWYWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5nZXRJZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRDZWxscygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm93VmFsdWVzID0ge307XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1ZhbHVlc1trZXldID0gdmFsdWVba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jZWxsc1tpXS5xdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLmdldFZhbHVlKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93VmFsdWVzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiKSBuZXdWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXNbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yb3dWYWx1ZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQodGhpcywgdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NvbW1lbnRzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDb21tZW50c1tuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCkge1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxuICAgIHByaXZhdGUgYnVpbGRDZWxscygpIHtcclxuICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZGF0YS5jb2x1bW5zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGV4dGVuZHMgUXVlc3Rpb24gaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgIGFkZERlZmF1bHRDb2x1bW5zKG1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSkge1xyXG4gICAgICAgIHZhciBjb2xOYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkgKyspXHJcbiAgICAgICAgICAgIG1hdHJpeC5hZGRDb2x1bW4oY29sTmFtZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNlbGxUeXBlVmFsdWU6IHN0cmluZyA9IFwiZHJvcGRvd25cIjtcclxuICAgIHByaXZhdGUgY29sdW1uQ29sQ291bnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb2x1bW5NaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29sdW1uc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHB1YmxpYyB1cGRhdGVDZWxsc0NhbGxiYWs6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29sdW1uc01ldGhvZHMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbHVtbnModmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPikge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vdmVycmlkZUNvbHVtbnNNZXRob2RzKCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVDb2x1bW5zTWV0aG9kcygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlLmxvY093bmVyID0gc2VsZjtcclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZS5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTWF0cml4RHJvcGRvd25Db2x1bW5bXSk6IE1hdHJpeERyb3Bkb3duQ29sdW1uW10ge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IHNlbGY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY2VsbFR5cGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjZWxsVHlwZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2VsbFR5cGUgPT0gbmV3VmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNlbGxUeXBlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnVwZGF0ZUNlbGxzQ2FsbGJhayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbHVtbkNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sdW1uQ29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Db2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy51cGRhdGVDZWxsc0NhbGxiYWspO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENvbHVtblRpdGxlKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5pc1JlcXVpcmVkICYmIHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dDtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVUZXh0KSByZXF1aXJlVGV4dCArPSBcIiBcIjtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVxdWlyZVRleHQgKyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5taW5XaWR0aCA/IGNvbHVtbi5taW5XaWR0aCA6IHRoaXMuY29sdW1uTWluV2lkdGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNob2ljZXNWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jaG9pY2VzVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIik7IH1cclxuICAgIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24obmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xyXG4gICAgICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlLnB1c2goY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3cobmFtZTogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoY3VyVmFsdWU6IGFueSk6IGFueSB7IHJldHVybiAhY3VyVmFsdWUgPyB7fSA6IGN1clZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgcXVlc3Rpb25WYWx1ZTogYW55LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7fTtcclxuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZighKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xyXG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgICAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiYgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBlcnJvc0luQ29sdW1ucyA9IHRoaXMuaGFzRXJyb3JJbkNvbHVtbnMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJbkNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Db2x1bW5zKGZpcmVDYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBjZWxscyAmJiBjZWxsc1tjb2xJbmRleF0gJiYgY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uICYmIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKSB8fCByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0Q2VsbFF1ZXN0aW9uKHRydWUpO1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uLmN1cnJlbnRFcnJvckNvdW50ID4gMCkgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RHJvcGRvd25EYXRhXHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uQ29yZShyb3csIGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24ubmFtZSA9IGNvbHVtbi5uYW1lO1xyXG4gICAgICAgIHF1ZXN0aW9uLmlzUmVxdWlyZWQgPSBjb2x1bW4uaXNSZXF1aXJlZDtcclxuICAgICAgICBxdWVzdGlvbi5oYXNPdGhlciA9IGNvbHVtbi5oYXNPdGhlcjtcclxuICAgICAgICBxdWVzdGlvbi5yZWFkT25seSA9IHRoaXMucmVhZE9ubHk7XHJcbiAgICAgICAgcXVlc3Rpb24uc2V0RGF0YSh0aGlzLnN1cnZleSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5oYXNPdGhlcikge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24gaW5zdGFuY2VvZiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcclxuICAgICAgICAgICAgICAgICg8UXVlc3Rpb25TZWxlY3RCYXNlPnF1ZXN0aW9uKS5zdG9yZU90aGVyc0FzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgY2VsbFR5cGUgPSBjb2x1bW4uY2VsbFR5cGUgPT0gXCJkZWZhdWx0XCIgPyB0aGlzLmNlbGxUeXBlIDogY29sdW1uLmNlbGxUeXBlO1xyXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRRdWVzdGlvbk5hbWUocm93LCBjb2x1bW4pO1xyXG4gICAgICAgIGlmIChjZWxsVHlwZSA9PSBcImNoZWNrYm94XCIpIHJldHVybiB0aGlzLmNyZWF0ZUNoZWNrYm94KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwicmFkaW9ncm91cFwiKSByZXR1cm4gdGhpcy5jcmVhdGVSYWRpb2dyb3VwKG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwidGV4dFwiKSByZXR1cm4gdGhpcy5jcmVhdGVUZXh0KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwiY29tbWVudFwiKSByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRHJvcGRvd24obmFtZSwgY29sdW1uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRRdWVzdGlvbk5hbWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7IHJldHVybiByb3cucm93TmFtZSArIFwiX1wiICsgY29sdW1uLm5hbWU7IH1cclxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBBcnJheTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLmNob2ljZXMgJiYgY29sdW1uLmNob2ljZXMubGVuZ3RoID4gMCA/IGNvbHVtbi5jaG9pY2VzIDogdGhpcy5jaG9pY2VzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW4ub3B0aW9uc0NhcHRpb24gPyBjb2x1bW4ub3B0aW9uc0NhcHRpb24gOiB0aGlzLm9wdGlvbnNDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURyb3Bkb3duKG5hbWU6IHN0cmluZywgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxLCBjb2x1bW4pO1xyXG4gICAgICAgIHEub3B0aW9uc0NhcHRpb24gPSB0aGlzLmdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2hlY2tib3gobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkNoZWNrYm94TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJjaGVja2JveFwiLCBuYW1lKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdEJhc2VQcm9wZXJ0aWVzKHEsIGNvbHVtbik7XHJcbiAgICAgICAgcS5jb2xDb3VudCA9IGNvbHVtbi5jb2xDb3VudCA+IC0gMSA/IGNvbHVtbi5jb2xDb3VudCA6IHRoaXMuY29sdW1uQ29sQ291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUmFkaW9ncm91cChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0QmFzZVByb3BlcnRpZXMocSwgY29sdW1uKTtcclxuICAgICAgICBxLmNvbENvdW50ID0gY29sdW1uLmNvbENvdW50ID4gLSAxID8gY29sdW1uLmNvbENvdW50IDogdGhpcy5jb2x1bW5Db2xDb3VudDtcclxuICAgICAgICByZXR1cm4gcTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc09yZGVyID0gY29sdW1uLmNob2ljZXNPcmRlcjtcclxuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5nZXRDb2x1bW5DaG9pY2VzKGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc0J5VXJsLnNldERhdGEoY29sdW1uLmNob2ljZXNCeVVybCk7XHJcbiAgICAgICAgaWYoIXF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblRleHRNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25UZXh0TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJ0ZXh0XCIsIG5hbWUpO1xyXG4gICAgICAgIHEuaW5wdXRUeXBlID0gY29sdW1uLmlucHV0VHlwZTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbW1lbnQobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25Db21tZW50TW9kZWwge1xyXG4gICAgICAgIHZhciBxID0gPFF1ZXN0aW9uQ29tbWVudE1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiY29tbWVudFwiLCBuYW1lKTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNlbGxRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIHJldHVybiA8UXVlc3Rpb24+UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUobmV3VmFsdWU6IGFueSwgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XHJcbiAgICAgICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25Sb3dDaGFuZ2VkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIG5ld1Jvd1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCBuZXdWYWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSBkZWxldGUgcm93VmFsdWVba2V5XTtcclxuICAgICAgICBpZiAobmV3Um93VmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuZXdSb3dWYWx1ZSkgcm93VmFsdWVba2V5XSA9IG5ld1Jvd1ZhbHVlW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKG5ld1ZhbHVlLCByb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIiwgW1wibmFtZVwiLCB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNob2ljZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICAgICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifSAsIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sQ291bnRcIiwgZGVmYXVsdDogLTEsIGNob2ljZXM6IFstMSwgMCwgMSwgMiwgMywgNF0gfSwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgXCJoYXNPdGhlcjpib29sZWFuXCIsIFwibWluV2lkdGhcIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc09yZGVyXCIsIGRlZmF1bHQ6IFwibm9uZVwiLCBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIiwgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIG9iai5jaG9pY2VzQnlVcmwuaXNFbXB0eSA/IG51bGwgOiBvYmouY2hvaWNlc0J5VXJsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTsgfSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJpbnB1dFR5cGVcIiwgZGVmYXVsdDogXCJ0ZXh0XCIsIGNob2ljZXM6IFtcImNvbG9yXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIiwgXCJlbWFpbFwiLCBcIm1vbnRoXCIsIFwibnVtYmVyXCIsIFwicGFzc3dvcmRcIiwgXCJyYW5nZVwiLCBcInRlbFwiLCBcInRleHRcIiwgXCJ0aW1lXCIsIFwidXJsXCIsIFwid2Vla1wiXSB9XSxcclxuICAgICAgICBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25iYXNlXCIsIFt7IG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIiwgY2xhc3NOYW1lOiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCJ9LFxyXG4gICAgICAgIFwiaG9yaXpvbnRhbFNjcm9sbDpib29sZWFuXCIsXHJcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jaG9pY2VzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzID0gdmFsdWU7IH19LFxyXG4gICAgICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRyb3Bkb3duXCIsIGNob2ljZXM6IFtcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sdW1uQ29sQ291bnRcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDMsIDRdIH0sIFwiY29sdW1uTWluV2lkdGhcIl0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwiaW1wb3J0IHtCYXNlLCBJUXVlc3Rpb24sIElDb25kaXRpb25SdW5uZXIsIElTdXJ2ZXlEYXRhLCBJU3VydmV5LCBIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcbmltcG9ydCB7UXVlc3Rpb25DdXN0b21XaWRnZXR9IGZyb20gJy4vcXVlc3Rpb25DdXN0b21XaWRnZXRzJztcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tICcuL2pzb25vYmplY3QnO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSAnLi9jb25kaXRpb25zJztcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lcn0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJhc2UgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVF1ZXN0aW9uLCBJQ29uZGl0aW9uUnVubmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBxdWVzdGlvbkNvdW50ZXIgPSAxMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbkJhc2UucXVlc3Rpb25Db3VudGVyKys7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSVN1cnZleURhdGE7XHJcbiAgICBwcml2YXRlIHN1cnZleVZhbHVlOiBJU3VydmV5O1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XHJcbiAgICBwdWJsaWMgY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldDtcclxuICAgIHB1YmxpYyB2aXNpYmxlSWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgc3RhcnRXaXRoTmV3TGluZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgdmlzaWJsZUluZGV4VmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSByZW5kZXJXaWR0aFZhbHVlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSByaWdodEluZGVudFZhbHVlOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGluZGVudDogbnVtYmVyID0gMDtcclxuICAgIGZvY3VzQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgdmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkOyAgICBcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvbkJhc2UuZ2V0UXVlc3Rpb25JZCgpO1xyXG4gICAgICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnZpc2libGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQoPElRdWVzdGlvbj50aGlzLCB0aGlzLnZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlIHx8ICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVJbmRleCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy52aXNpYmxlSW5kZXhWYWx1ZTsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gMDsgfVxyXG4gICAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHsgXHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGFydFdpdGhOZXdMaW5lVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZih0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByZW5kZXJXaWR0aCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5yZW5kZXJXaWR0aFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlbmRlcldpZHRoKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnJlbmRlcldpZHRoKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZW5kZXJXaWR0aFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yaWdodEluZGVudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnJpZ2h0SW5kZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yaWdodEluZGVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzKG9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZSkgeyB9XHJcbiAgICBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIGlmKG5ld1ZhbHVlICYmIG5ld1ZhbHVlW1wicXVlc3Rpb25BZGRlZFwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleVZhbHVlID0gPElTdXJ2ZXk+bmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25TZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBmaXJlQ2FsbGJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25TZXREYXRhKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHsgfVxyXG4gICAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGVJZikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25SdW5uZXIpIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgLy9JUXVlc3Rpb25cclxuICAgIHB1YmxpYyBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZUluZGV4VmFsdWUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZpc2libGVJbmRleFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy52aXNpYmxlSW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBjbGVhclVudXNlZFZhbHVlcygpIHt9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge31cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gKDxJTG9jYWxpemFibGVPd25lcj48YW55PnRoaXMuZGF0YSkuZ2V0TG9jYWxlKCkgOiBcIlwiOyBcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicXVlc3Rpb25iYXNlXCIsIFtcIiFuYW1lXCIsIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcInZpc2libGVJZjpleHByZXNzaW9uXCIsXHJcbiAgICB7IG5hbWU6IFwid2lkdGhcIiB9LCB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWV9LCB7bmFtZTogXCJpbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXX1dKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25iYXNlLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1JlYWN0U3VydmV5TW9kZWx9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQYWdlfSBmcm9tIFwiLi9yZWFjdHBhZ2VcIjtcclxuaW1wb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9ufSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvcn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge3N1cnZleUNzc30gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9ncmVzc30gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlQcm9ncmVzc1wiO1xyXG5pbXBvcnQge1N1cnZleVBhZ2VJZH0gZnJvbSBcIi4uL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgY3NzVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlOyB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHNldCBjc3NUeXBlKHZhbHVlOiBzdHJpbmcpIHsgc3VydmV5Q3NzLmN1cnJlbnRUeXBlID0gdmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBzdXJ2ZXk6IFJlYWN0U3VydmV5TW9kZWw7XHJcbiAgICBwcml2YXRlIGlzQ3VycmVudFBhZ2VDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVN1cnZleShwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTdXJ2ZXkobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRQYWdlQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cnZleS5mb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VydmV5LmZvY3VzRmlyc3RRdWVzdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5yZWZzW1wicm9vdFwiXTtcclxuICAgICAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmRvQWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJjb21wbGV0ZWRcIikgcmV0dXJuIHRoaXMucmVuZGVyQ29tcGxldGVkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwibG9hZGluZ1wiKSByZXR1cm4gdGhpcy5yZW5kZXJMb2FkaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3VydmV5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkgeyByZXR1cm4gc3VydmV5Q3NzLmdldENzcygpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkubWVyZ2VDc3ModmFsdWUsIHRoaXMuY3NzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJDb21wbGV0ZWQoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmKCF0aGlzLnN1cnZleS5zaG93Q29tcGxldGVkUGFnZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJMb2FkaW5nKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZExvYWRpbmdIdG1sIH07XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc3VydmV5LnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dUaXRsZSA/IHRoaXMucmVuZGVyVGl0bGUoKSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRQYWdlID0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPyB0aGlzLnJlbmRlclBhZ2UoKSA6IG51bGw7XHJcbiAgICAgICAgdmFyIHRvcFByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuc2hvd1Byb2dyZXNzQmFyID09IFwidG9wXCIgPyB0aGlzLnJlbmRlclByb2dyZXNzKHRydWUpIDogbnVsbDtcclxuICAgICAgICB2YXIgYm90dG9tUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5zaG93UHJvZ3Jlc3NCYXIgPT0gXCJib3R0b21cIiA/IHRoaXMucmVuZGVyUHJvZ3Jlc3MoZmFsc2UpIDogbnVsbDtcclxuICAgICAgICB2YXIgYnV0dG9ucyA9IChjdXJyZW50UGFnZSAmJiB0aGlzLnN1cnZleS5zaG93TmF2aWdhdGlvbkJ1dHRvbnMpID8gdGhpcy5yZW5kZXJOYXZpZ2F0aW9uKCkgOiBudWxsO1xyXG4gICAgICAgIGlmICghY3VycmVudFBhZ2UpIHtcclxuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLnJlbmRlckVtcHR5U3VydmV5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgcmVmPVwicm9vdFwiIGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICB7dGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPXtTdXJ2ZXlQYWdlSWR9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3RvcFByb2dyZXNzfVxyXG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50UGFnZX1cclxuICAgICAgICAgICAgICAgICAgICB7Ym90dG9tUHJvZ3Jlc3N9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtidXR0b25zfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+PGgzPnt0aGlzLnN1cnZleS5wcm9jZXNzZWRUaXRsZX08L2gzPjwvZGl2PjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJQYWdlKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPFN1cnZleVBhZ2Ugc3VydmV5PXt0aGlzLnN1cnZleX0gcGFnZT17dGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2V9IGNzcz17dGhpcy5jc3N9IGNyZWF0b3I9e3RoaXN9IC8+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclByb2dyZXNzKGlzVG9wOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UHJvZ3Jlc3Mgc3VydmV5PXt0aGlzLnN1cnZleX0gY3NzPXt0aGlzLmNzc30gaXNUb3A9e2lzVG9wfSAgLz47XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdGlvbigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleSA9IHt0aGlzLnN1cnZleX0gY3NzPXt0aGlzLmNzc30vPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJFbXB0eVN1cnZleSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8c3Bhbj57dGhpcy5zdXJ2ZXkuZW1wdHlTdXJ2ZXlUZXh0fTwvc3Bhbj4pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSkge1xyXG4gICAgICAgIGlmIChuZXdQcm9wcykge1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3UHJvcHMubW9kZWw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UHJvcHMuanNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFJlYWN0U3VydmV5TW9kZWwobmV3UHJvcHMuanNvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleSA9IG5ldyBSZWFjdFN1cnZleU1vZGVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcykge1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMuY2xpZW50SWQpIHRoaXMuc3VydmV5LmNsaWVudElkID0gbmV3UHJvcHMuY2xpZW50SWQ7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcy5kYXRhKSB0aGlzLnN1cnZleS5kYXRhID0gbmV3UHJvcHMuZGF0YTtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzLmNzcykgdGhpcy5zdXJ2ZXkubWVyZ2VDc3MobmV3UHJvcHMuY3NzLCB0aGlzLmNzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3NldCB0aGUgZmlyc3QgcGFnZVxyXG4gICAgICAgIHZhciBkdW1teSA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0geyBwYWdlSW5kZXhDaGFuZ2U6IDAsIGlzQ29tcGxldGVkOiBmYWxzZSwgbW9kZWxDaGFuZ2VkOiAwIH07XHJcbiAgICAgICAgdGhpcy5zZXRTdXJ2ZXlFdmVudHMobmV3UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldFN1cnZleUV2ZW50cyhuZXdQcm9wczogYW55KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLm1vZGVsQ2hhbmdlZCA9IHNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkICsgMTtcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKChzZW5kZXIpID0+IHsgc2VsZi5zdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7IHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7IH0pO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUGFydGlhbFNlbmQuYWRkKChzZW5kZXIpID0+IHsgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTsgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25DdXJyZW50UGFnZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgc2VsZi5pc0N1cnJlbnRQYWdlQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUucGFnZUluZGV4Q2hhbmdlID0gc2VsZi5zdGF0ZS5wYWdlSW5kZXhDaGFuZ2UgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMgJiYgbmV3UHJvcHMub25DdXJyZW50UGFnZUNoYW5nZWQpIG5ld1Byb3BzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkKHNlbmRlciwgb3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25WaXNpYmxlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5xdWVzdGlvbiAmJiBvcHRpb25zLnF1ZXN0aW9uLnJlYWN0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBvcHRpb25zLnF1ZXN0aW9uLnJlYWN0LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUudmlzaWJsZSA9IG9wdGlvbnMucXVlc3Rpb24udmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24ucmVhY3Quc2V0U3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25WYWx1ZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucXVlc3Rpb24gJiYgb3B0aW9ucy5xdWVzdGlvbi5yZWFjdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gb3B0aW9ucy5xdWVzdGlvbi5yZWFjdC5zdGF0ZTtcclxuICAgICAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24ucmVhY3Quc2V0U3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFuZXdQcm9wcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uVmFsdWVDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcy5kYXRhKSBuZXdQcm9wcy5kYXRhW29wdGlvbnMubmFtZV0gPSBvcHRpb25zLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMub25WYWx1ZUNoYW5nZWQpIG5ld1Byb3BzLm9uVmFsdWVDaGFuZ2VkKHNlbmRlciwgb3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoKHNlbmRlcikgPT4geyBuZXdQcm9wcy5vbkNvbXBsZXRlKHNlbmRlcik7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25QYXJ0aWFsU2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7IG5ld1Byb3BzLm9uUGFydGlhbFNlbmQoc2VuZGVyKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IGlmIChuZXdQcm9wcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZCkgbmV3UHJvcHMub25QYWdlVmlzaWJsZUNoYW5nZWQoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyA9IG5ld1Byb3BzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblF1ZXN0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25RdWVzdGlvbkFkZGVkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uUXVlc3Rpb25BZGRlZChzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uUXVlc3Rpb25SZW1vdmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uUXVlc3Rpb25SZW1vdmVkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uUXVlc3Rpb25SZW1vdmVkKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25WYWxpZGF0ZVF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uVmFsaWRhdGVRdWVzdGlvbi5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vblZhbGlkYXRlUXVlc3Rpb24oc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblNlbmRSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25TZW5kUmVzdWx0LmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uU2VuZFJlc3VsdChzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uR2V0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uR2V0UmVzdWx0LmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uR2V0UmVzdWx0KHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25Qcm9jZXNzSHRtbCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblByb2Nlc3NIdG1sLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uUHJvY2Vzc0h0bWwoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vbkFmdGVyUmVuZGVyU3VydmV5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25BZnRlclJlbmRlclN1cnZleShzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uQWZ0ZXJSZW5kZXJQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uQWZ0ZXJSZW5kZXJQYWdlLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uQWZ0ZXJSZW5kZXJQYWdlKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25BZnRlclJlbmRlclF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbi5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24oc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vSVN1cnZleUNyZWF0b3JcclxuICAgIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25Dc3MgPSB0aGlzLmNzc1txdWVzdGlvbi5nZXRUeXBlKCldO1xyXG4gICAgICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihxdWVzdGlvbi5nZXRUeXBlKCksIHtcclxuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLCBjc3M6IHF1ZXN0aW9uQ3NzLCByb290Q3NzOiB0aGlzLmNzcywgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNSZWFkT25seSwgY3JlYXRvcjogdGhpc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvclRleHQ6IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPGRpdiBrZXk9e2tleX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5lcnJvci5pdGVtfT57ZXJyb3JUZXh0fTwvZGl2PjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjsgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uL3N1cnZleVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CYXNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgICBwcm90ZWN0ZWQgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBwcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBwcm9wcy5jc3M7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdXBkYXRlOiAwIH07XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXh0UHJvcHMuc3VydmV5O1xyXG4gICAgICAgIHRoaXMuY3NzID0gbmV4dFByb3BzLmNzcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlU3RhdGVGdW5jdGlvbjogYW55ID0gbnVsbDtcclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUudXBkYXRlID0gc2VsZi5zdGF0ZS51cGRhdGUgKyAxO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLnJlbW92ZSh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uL3N1cnZleVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5TW9kZWwgZXh0ZW5kcyBTdXJ2ZXlNb2RlbCB7XHJcbiAgICByZW5kZXJDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcihqc29uT2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBtZXJnZUNzcyhzcmM6IGFueSwgZGVzdDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tZXJnZVZhbHVlcyhzcmMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRvQWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpIHtcclxuICAgICAgICB0aGlzLmFmdGVyUmVuZGVyU3VydmV5KGVsKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4IiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7QmFzZSwgSVN1cnZleSwgSGFzaFRhYmxlLCBJUXVlc3Rpb24sIElFbGVtZW50LCBJQ29uZGl0aW9uUnVubmVyLCBJUGFnZSwgU3VydmV5RXJyb3IsIEV2ZW50fSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SVN1cnZleVRyaWdnZXJPd25lciwgU3VydmV5VHJpZ2dlcn0gZnJvbSBcIi4vdHJpZ2dlclwiO1xyXG5pbXBvcnQge1BhZ2VNb2RlbH0gZnJvbSBcIi4vcGFnZVwiO1xyXG5pbXBvcnQge1RleHRQcmVQcm9jZXNzb3J9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtQcm9jZXNzVmFsdWV9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xyXG5pbXBvcnQge2R4U3VydmV5U2VydmljZX0gZnJvbSBcIi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SnNvbkVycm9yfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtDdXN0b21XaWRnZXRDb2xsZWN0aW9ufSBmcm9tICcuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cyc7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleU1vZGVsIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElTdXJ2ZXksIElTdXJ2ZXlUcmlnZ2VyT3duZXIsIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICAgIHB1YmxpYyBzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBzdXJ2ZXlQb3N0SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xpZW50SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY29va2llTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0T25QYWdlTmV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb21tZW50UHJlZml4OiBzdHJpbmcgPSBcIi1Db21tZW50XCI7XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd1BhZ2VUaXRsZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dDb21wbGV0ZWRQYWdlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyByZXF1aXJlZFRleHQ6IHN0cmluZyA9IFwiKlwiO1xyXG4gICAgcHVibGljIHF1ZXN0aW9uU3RhcnRJbmRleDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBzaG93UHJvZ3Jlc3NCYXI6IHN0cmluZyA9IFwib2ZmXCI7XHJcbiAgICBwdWJsaWMgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwYWdlczogQXJyYXk8UGFnZU1vZGVsPiA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XHJcbiAgICBwdWJsaWMgdHJpZ2dlcnM6IEFycmF5PFN1cnZleVRyaWdnZXI+ID0gbmV3IEFycmF5PFN1cnZleVRyaWdnZXI+KCk7XHJcbiAgICBwdWJsaWMgY2xlYXJJbnZpc2libGVWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGxvY1RpdGxlVmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jQ29tcGxldGVkSHRtbFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1BhZ2VQcmV2VGV4dFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1BhZ2VOZXh0VGV4dFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY0NvbXBsZXRlVGV4dFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRQYWdlVmFsdWU6IFBhZ2VNb2RlbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHZhbHVlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHZhcmlhYmxlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHBhZ2VQcmV2VGV4dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHBhZ2VOZXh0VGV4dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNvbXBsZXRlVGV4dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHNob3dQYWdlTnVtYmVyc1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHNob3dRdWVzdGlvbk51bWJlcnNWYWx1ZTogc3RyaW5nID0gXCJvblwiO1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZTogc3RyaW5nID0gXCJ0b3BcIjtcclxuICAgIHByaXZhdGUgbG9jYWxlVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGlzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBwcm9jZXNzZWRUZXh0VmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBUZXh0UHJlUHJvY2Vzc29yO1xyXG4gICAgcHJpdmF0ZSBpc1ZhbGlkYXRpbmdPblNlcnZlclZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG1vZGVWYWx1ZTogc3RyaW5nID0gXCJlZGl0XCI7XHJcbiAgICBwcml2YXRlIGlzRGVzaWduTW9kZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG9uQ29tcGxldGU6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFydGlhbFNlbmQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQ3VycmVudFBhZ2VDaGFuZ2VkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblZpc2libGVDaGFuZ2VkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYWdlVmlzaWJsZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblF1ZXN0aW9uQWRkZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblF1ZXN0aW9uUmVtb3ZlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFuZWxBZGRlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFuZWxSZW1vdmVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25WYWxpZGF0ZVF1ZXN0aW9uOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uczogKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55O1xyXG4gICAgcHVibGljIG9uUHJvY2Vzc0h0bWw6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblNlbmRSZXN1bHQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkdldFJlc3VsdDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uVXBsb2FkRmlsZTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJTdXJ2ZXk6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFnZTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbjogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJQYW5lbDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIGpzb25FcnJvcnM6IEFycmF5PEpzb25FcnJvcj4gPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY0NvbXBsZXRlZEh0bWxWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1BhZ2VQcmV2VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGFnZU5leHRUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NDb21wbGV0ZVRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgVGV4dFByZVByb2Nlc3NvcigpO1xyXG4gICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vbkhhc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5oYXNQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uUHJvY2VzcyA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIHNlbGYuZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWUpOyB9O1xyXG4gICAgICAgIHRoaXMucGFnZXMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhID0gc2VsZjtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50cmlnZ2Vycy5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLnNldE93bmVyKHNlbGYpO1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2Nlc3NlZFRleHRWYWx1ZXMoKTtcclxuICAgICAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcclxuICAgICAgICBpZiAoanNvbk9iaikge1xyXG4gICAgICAgICAgICB0aGlzLnNldEpzb25PYmplY3QoanNvbk9iaik7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cnZleUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInN1cnZleVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NhbGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jYWxlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uY3VycmVudExvY2FsZSA9IHZhbHVlO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLm9uTG9jYWxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSB7IHJldHVybiB0aGlzLmxvY2FsZTsgfVxyXG4gICAgcHVibGljIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykgeyByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpOyB9XHJcblxyXG4gICAgcHVibGljIGdldCBlbXB0eVN1cnZleVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwiZW1wdHlTdXJ2ZXlcIik7IH1cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBjb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlZEh0bWwudGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IGNvbXBsZXRlZEh0bWwodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0NvbXBsZXRlZEh0bWwudGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jQ29tcGxldGVkSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlZEh0bWxWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IHBhZ2VQcmV2VGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlUHJldlRleHQudGV4dCA/IHRoaXMubG9jUGFnZVByZXZUZXh0LnRleHQgOiB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTsgfVxyXG4gICAgcHVibGljIHNldCBwYWdlUHJldlRleHQobmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BhZ2VQcmV2VGV4dC50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGFnZVByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZVByZXZUZXh0VmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBwYWdlTmV4dFRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZU5leHRUZXh0LnRleHQgPyB0aGlzLmxvY1BhZ2VOZXh0VGV4dC50ZXh0IDogdGhpcy5nZXRMb2NTdHJpbmcoXCJwYWdlTmV4dFRleHRcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgcGFnZU5leHRUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQYWdlTmV4dFRleHQudGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BhZ2VOZXh0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BhZ2VOZXh0VGV4dFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgY29tcGxldGVUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlVGV4dC50ZXh0ID8gdGhpcy5sb2NDb21wbGV0ZVRleHQudGV4dCA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbXBsZXRlVGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jQ29tcGxldGVUZXh0LnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NDb21wbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21wbGV0ZVRleHRWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUudGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVZhbHVlOyB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93UGFnZU51bWJlcnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnNob3dQYWdlTnVtYmVyc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dQYWdlTnVtYmVycyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5zaG93UGFnZU51bWJlcnMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNob3dQYWdlTnVtYmVyc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnNWYWx1ZTsgfTtcclxuICAgIHB1YmxpYyBzZXQgc2hvd1F1ZXN0aW9uTnVtYmVycyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH07XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkgeyByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dCh0aGlzLnRpdGxlKTsgfVxyXG4gICAgcHVibGljIGdldCBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uVmFsdWU7IH07XHJcbiAgICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZSA9IHZhbHVlO1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBnZXQgbW9kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5tb2RlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMubW9kZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBcImVkaXRcIiAmJiB2YWx1ZSAhPSBcImRpc3BsYXlcIikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubW9kZVZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFsdWVzSGFzaCkge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMudmFsdWVzSGFzaFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXREYXRhVmFsdWUoZGF0YTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzSGFzaFtrZXldID0gZGF0YVtrZXldO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkYXRhKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzSGFzaCA9IHt9O1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhVmFsdWUoZGF0YSwga2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhrZXksIGRhdGFba2V5XSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNba2V5LnRvTG93ZXJDYXNlKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2tleS50b0xvd2VyQ2FzZSgpXSA9IFwidmFsdWVcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbW1lbnRzKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlc0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuY29tbWVudFByZWZpeCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMudmFsdWVzSGFzaFtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBnZXQgdmlzaWJsZVBhZ2VzKCk6IEFycmF5PFBhZ2VNb2RlbD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucGFnZXM7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5wYWdlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoID09IDA7IH1cclxuICAgIHB1YmxpYyBnZXQgUGFnZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlUGFnZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFBhZ2UoKTogUGFnZU1vZGVsIHtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBudWxsICYmIHZQYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRQYWdlKHZhbHVlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdlBhZ2VzLmluZGV4T2YodmFsdWUpIDwgMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDdXN0b21XaWRnZXRzKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlQ2hhbmdlZCh2YWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50UGFnZU5vKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRQYWdlTm8odmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IHRoaXMudmlzaWJsZVBhZ2VzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1t2YWx1ZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlLnNjcm9sbFRvVG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VWYWx1ZS5mb2N1c0ZpcnN0UXVlc3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKSByZXR1cm4gXCJsb2FkaW5nXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQpIHJldHVybiBcImNvbXBsZXRlZFwiO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSkgPyBcInJ1bm5pbmdcIiA6IFwiZW1wdHlcIlxyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKGNsZWFyRGF0YTogYm9vbGVhbiA9IHRydWUsIGdvdG9GaXJzdFBhZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGNsZWFyRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc0hhc2ggPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChnb3RvRmlyc3RQYWdlICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VzWzBdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBtZXJnZVZhbHVlcyhzcmM6IGFueSwgZGVzdDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0IHx8ICFzcmMpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNyY1trZXldO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkZXN0W2tleV0pIGRlc3Rba2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgZGVzdFtrZXldKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUN1c3RvbVdpZGdldHMocGFnZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwYWdlLnF1ZXN0aW9uc1tpXS5jdXN0b21XaWRnZXQgPSBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmdldEN1c3RvbVdpZGdldChwYWdlLnF1ZXN0aW9uc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdlZChuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ29sZEN1cnJlbnRQYWdlJzogb2xkVmFsdWUsICduZXdDdXJyZW50UGFnZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCgoaW5kZXggKiAxMDAgLyB0aGlzLnZpc2libGVQYWdlQ291bnQpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xyXG4gICAgICAgIGlmICghcGFnZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSA9PSBcInNob3dcIiB8fFxyXG4gICAgICAgICAgICAocGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgIT0gXCJoaWRlXCIgJiYgdGhpcy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VkaXRNb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5tb2RlID09IFwiZWRpdFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm1vZGUgPT0gXCJkaXNwbGF5XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc0Rlc2lnbk1vZGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldERlc2lnbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzRGVzaWduTW9kZVZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0Nvb2tpZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llO1xyXG4gICAgICAgIHJldHVybiBjb29raWVzICYmIGNvb2tpZXMuaW5kZXhPZih0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlXCIpID4gLTE7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q29va2llKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm47XHJcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gdGhpcy5jb29raWVOYW1lICsgXCI9dHJ1ZTsgZXhwaXJlcz1GcmksIDMxIERlYyA5OTk5IDA6MDowIEdNVFwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRlbGV0ZUNvb2tpZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPTtcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBuZXh0UGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLmlzQ3VycmVudFBhZ2VIYXNFcnJvcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24oKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZG9OZXh0UGFnZSgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzQ3VycmVudFBhZ2VIYXNFcnJvcnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UuaGFzRXJyb3JzKHRydWUsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHByZXZQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbaW5kZXggLSAxXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjb21wbGV0ZUxhc3RQYWdlKCkgOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuaXNDdXJyZW50UGFnZUhhc0Vycm9ycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRvU2VydmVyVmFsaWRhdGlvbigpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4geyBcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSA9PSAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICByZXR1cm4gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgPT0gdlBhZ2VzLmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9Db21wbGV0ZSgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb29raWUoKTtcclxuICAgICAgICB0aGlzLnNldENvbXBsZXRlZCgpO1xyXG4gICAgICAgIHRoaXMub25Db21wbGV0ZS5maXJlKHRoaXMsIG51bGwpO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleVBvc3RJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRSZXN1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGluZ09uU2VydmVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlclZhbHVlOyB9XHJcbiAgICBwcml2YXRlIHNldElzVmFsaWRhdGluZ09uU2VydmVyKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXJWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLm9uSXNWYWxpZGF0aW5nT25TZXJ2ZXJDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKSB7IH1cclxuICAgIHByb3RlY3RlZCBkb1NlcnZlclZhbGlkYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGRhdGE6IHt9LCBlcnJvcnM6IHt9LCBzdXJ2ZXk6IHRoaXMsIGNvbXBsZXRlIDogZnVuY3Rpb24gKCkgeyBzZWxmLmNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zKTsgfSB9O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocXVlc3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgb3B0aW9ucy5kYXRhW3F1ZXN0aW9uLm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjb21wbGV0ZVNlcnZlclZhbGlkYXRpb24ob3B0aW9uczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZXRJc1ZhbGlkYXRpbmdPblNlcnZlcihmYWxzZSk7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zICYmICFvcHRpb25zLnN1cnZleSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzZWxmID0gb3B0aW9ucy5zdXJ2ZXk7XHJcbiAgICAgICAgdmFyIGhhc0Vycm9ycyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmVycm9ycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBzZWxmLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uW1wiZXJyb3JzXCJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbltcImFkZEVycm9yXCJdKG5ldyBDdXN0b21FcnJvcihvcHRpb25zLmVycm9yc1tuYW1lXSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGFzRXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmlzTGFzdFBhZ2UpIHNlbGYuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICBlbHNlIHNlbGYuZG9OZXh0UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkb05leHRQYWdlKCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tPblBhZ2VUcmlnZ2VycygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbmRSZXN1bHRPblBhZ2VOZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFJlc3VsdCh0aGlzLnN1cnZleVBvc3RJZCwgdGhpcy5jbGllbnRJZCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4ICsgMV07XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0Q29tcGxldGVkKCkge1xyXG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkSHRtbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbCh0aGlzLmNvbXBsZXRlZEh0bWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI8aDM+XCIgKyB0aGlzLmdldExvY1N0cmluZyhcImNvbXBsZXRpbmdTdXJ2ZXlcIikgKyBcIjwvaDM+XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZExvYWRpbmdIdG1sKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJsb2FkaW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgKyAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInByb2dyZXNzVGV4dFwiKVtcImZvcm1hdFwiXShpbmRleCwgdlBhZ2VzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXJTdXJ2ZXkoaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkuZmlyZSh0aGlzLCB7IHN1cnZleTogdGhpcywgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50IH0pO1xyXG4gICAgfVxyXG4gICAgYWZ0ZXJSZW5kZXJQYWdlKGh0bWxFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25BZnRlclJlbmRlclBhZ2UuaXNFbXB0eSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclBhZ2UuZmlyZSh0aGlzLCB7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuICAgIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbi5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgICBhZnRlclJlbmRlclBhbmVsKHBhbmVsOiBJRWxlbWVudCwgaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYW5lbC5maXJlKHRoaXMsIHsgcGFuZWw6IHBhbmVsLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZEZpbGUobmFtZTogc3RyaW5nLCBmaWxlOiBGaWxlLCBzdG9yZURhdGFBc1RleHQ6IGJvb2xlYW4sIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcpPT5hbnkpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgYWNjZXB0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uVXBsb2FkRmlsZS5maXJlKHRoaXMsIHsgbmFtZTogbmFtZSwgZmlsZTogZmlsZSwgYWNjZXB0OiBhY2NlcHQgfSk7XHJcbiAgICAgICAgaWYgKCFhY2NlcHQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIXN0b3JlRGF0YUFzVGV4dCAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb3JlKG5hbWUsIGZpbGUsIHVwbG9hZGluZ0NhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBsb2FkRmlsZUNvcmUobmFtZTogc3RyaW5nLCBmaWxlOiBGaWxlLCB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nKSA9PiBhbnkpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInVwbG9hZGluZ1wiKTtcclxuICAgICAgICBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCkuc2VuZEZpbGUodGhpcy5zdXJ2ZXlQb3N0SWQsIGZpbGUsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaykgdXBsb2FkaW5nQ2FsbGJhY2soc3VjY2VzcyA/IFwic3VjY2Vzc1wiIDogXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0VmFsdWUobmFtZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBnZXRQYWdlKGluZGV4OiBudW1iZXIpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGFkZFBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBhZGROZXdQYWdlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jcmVhdGVOZXdQYWdlKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuYWRkUGFnZShwYWdlKTtcclxuICAgICAgICByZXR1cm4gcGFnZTtcclxuICAgIH1cclxuICAgIHJlbW92ZVBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBwYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZywgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UpOiBJUXVlc3Rpb24ge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25OYW1lID0gcXVlc3Rpb25zW2ldLm5hbWU7XHJcbiAgICAgICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHF1ZXN0aW9uTmFtZSA9IHF1ZXN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZihxdWVzdGlvbk5hbWUgPT0gbmFtZSkgcmV0dXJuIHF1ZXN0aW9uc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UXVlc3Rpb25zQnlOYW1lcyhuYW1lczogc3RyaW5nW10sIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVF1ZXN0aW9uW10ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoIW5hbWVzKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lc1tpXSwgY2FzZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uKSByZXN1bHQucHVzaChxdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZUJ5RWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xyXG4gICAgICAgICAgICBpZihwYWdlLmNvbnRhaW5zRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VCeVF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeUVsZW1lbnQocXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VCeU5hbWUobmFtZTogc3RyaW5nKTogUGFnZU1vZGVsIHtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiB0aGlzLnBhZ2VzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlc0J5TmFtZXMobmFtZXM6IHN0cmluZ1tdKTogUGFnZU1vZGVsW117XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghbmFtZXNbaV0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMuZ2V0UGFnZUJ5TmFtZShuYW1lc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChwYWdlKSByZXN1bHQucHVzaChwYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRBbGxRdWVzdGlvbnModmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElRdWVzdGlvbj4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8SVF1ZXN0aW9uPigpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0uYWRkUXVlc3Rpb25zVG9MaXN0KHJlc3VsdCwgdmlzaWJsZU9ubHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhZ2UobmFtZTogc3RyaW5nKSB7IHJldHVybiBuZXcgUGFnZU1vZGVsKG5hbWUpOyB9XHJcbiAgICBwcml2YXRlIG5vdGlmeVF1ZXN0aW9uT25WYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV0ubmFtZSAhPSBuYW1lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuZG9TdXJ2ZXlWYWx1ZUNoYW5nZWQocXVlc3Rpb24sIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ25hbWUnOiBuYW1lLCAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ3ZhbHVlJzogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5kb1N1cnZleVZhbHVlQ2hhbmdlZChxdWVzdGlvbnNbaV0sIHRoaXMuZ2V0VmFsdWUocXVlc3Rpb25zW2ldLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZG9TdXJ2ZXlWYWx1ZUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHF1ZXN0aW9uLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tPblBhZ2VUcmlnZ2VycygpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZShxdWVzdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RyaWdnZXJzKHF1ZXN0aW9uLm5hbWUsIHZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uQmFzZT4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcGFnZS5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24ubmFtZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tUcmlnZ2VycyhuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnksIGlzT25OZXh0UGFnZTogYm9vbGVhbikge1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0cmlnZ2VyID0gdGhpcy50cmlnZ2Vyc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRyaWdnZXIubmFtZSA9PSBuYW1lICYmIHRyaWdnZXIuaXNPbk5leHRQYWdlID09IGlzT25OZXh0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlci5jaGVjayhuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvRWxlbWVudHNPbkxvYWQoKSB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ub25TdXJ2ZXlMb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Db25kaXRpb25zKCkge1xyXG4gICAgICAgIHZhciBwYWdlcyA9IHRoaXMucGFnZXM7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBwYWdlc1tpXS5ydW5Db25kaXRpb24odGhpcy52YWx1ZXNIYXNoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2VuZFJlc3VsdChwb3N0SWQ6IHN0cmluZyA9IG51bGwsIGNsaWVudElkOiBzdHJpbmcgPSBudWxsLCBpc1BhcnRpYWxDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCAmJiB0aGlzLm9uUGFydGlhbFNlbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5vblBhcnRpYWxTZW5kLmZpcmUodGhpcywgbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXBvc3RJZCAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xyXG4gICAgICAgICAgICBwb3N0SWQgPSB0aGlzLnN1cnZleVBvc3RJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwb3N0SWQpIHJldHVybjtcclxuICAgICAgICBpZiAoY2xpZW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmICF0aGlzLmNsaWVudElkKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5zZW5kUmVzdWx0KHBvc3RJZCwgdGhpcy5kYXRhLCBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBzZWxmLm9uU2VuZFJlc3VsdC5maXJlKHNlbGYsIHsgc3VjY2Vzczogc3VjY2VzcywgcmVzcG9uc2U6IHJlc3BvbnNlfSk7XHJcbiAgICAgICAgfSwgdGhpcy5jbGllbnRJZCwgaXNQYXJ0aWFsQ29tcGxldGVkKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSZXN1bHQocmVzdWx0SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5nZXRSZXN1bHQocmVzdWx0SWQsIG5hbWUsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCBkYXRhOiBhbnksIGRhdGFMaXN0OiBhbnlbXSwgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBzZWxmLm9uR2V0UmVzdWx0LmZpcmUoc2VsZiwgeyBzdWNjZXNzOiBzdWNjZXNzLCBkYXRhOiBkYXRhLCBkYXRhTGlzdDogZGF0YUxpc3QsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkU3VydmV5RnJvbVNlcnZpY2Uoc3VydmV5SWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBpZiAoc3VydmV5SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKTtcclxuICAgICAgICBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCkubG9hZFN1cnZleSh0aGlzLnN1cnZleUlkLCBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldEpzb25PYmplY3QocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHNlbGYubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHNlbGYub25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja1BhZ2VWaXNpYmlsaXR5KHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9sZFF1ZXN0aW9uVmlzaWJsZTogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlRdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gcGFnZS5pc1Zpc2libGU7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IHBhZ2UuZ2V0SXNQYWdlVmlzaWJsZShxdWVzdGlvbikgfHwgb2xkUXVlc3Rpb25WaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2UsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVZpc2libGVJbmRleGVzKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVZpc2libGVJbmRleGVzKHRoaXMuc2hvd1BhZ2VOdW1iZXJzKTtcclxuICAgICAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25QYWdlXCIpIHtcclxuICAgICAgICAgICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25WaXNpYmxlSW5kZXhlcyh2aXNQYWdlc1tpXS5xdWVzdGlvbnMsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvblZpc2libGVJbmRleGVzKHRoaXMuZ2V0QWxsUXVlc3Rpb25zKGZhbHNlKSwgdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXMoc2hvd0luZGV4OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS52aXNpYmxlSW5kZXggPSB0aGlzLnBhZ2VzW2ldLnZpc2libGUgPyAoaW5kZXgrKykgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5udW0gPSBzaG93SW5kZXggJiYgdGhpcy5wYWdlc1tpXS52aXNpYmxlID8gdGhpcy5wYWdlc1tpXS52aXNpYmxlSW5kZXggKyAxIDogLTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblZpc2libGVJbmRleGVzKHF1ZXN0aW9uczogSVF1ZXN0aW9uW10sIHNob3dJbmRleDogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLnNldFZpc2libGVJbmRleChzaG93SW5kZXggJiYgcXVlc3Rpb25zW2ldLnZpc2libGUgJiYgcXVlc3Rpb25zW2ldLmhhc1RpdGxlID8gKGluZGV4KyspIDogLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBpc0xvYWRpbmdGcm9tSnNvbigpIHsgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBzZXRKc29uT2JqZWN0KGpzb25PYmo6IGFueSkge1xyXG4gICAgICAgIGlmICghanNvbk9iaikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuanNvbkVycm9ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB2YXIganNvbkNvbnZlcnRlciA9IG5ldyBKc29uT2JqZWN0KCk7XHJcbiAgICAgICAganNvbkNvbnZlcnRlci50b09iamVjdChqc29uT2JqLCB0aGlzKTtcclxuICAgICAgICBpZiAoanNvbkNvbnZlcnRlci5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25FcnJvcnMgPSBqc29uQ29udmVydGVyLmVycm9ycztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9jZXNzZWRUZXh0VmFsdWVzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29va2llKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRvRWxlbWVudHNPbkxvYWQoKTtcclxuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGluZygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ3JlYXRpbmcoKSB7IH1cclxuICAgIHByaXZhdGUgdXBkYXRlUHJvY2Vzc2VkVGV4dFZhbHVlcygpIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXMgPSB7fTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW1wicGFnZW5vXCJdID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHNlbGYuY3VycmVudFBhZ2UgIT0gbnVsbCA/IHNlbGYudmlzaWJsZVBhZ2VzLmluZGV4T2Yoc2VsZi5jdXJyZW50UGFnZSkgKyAxIDogMDsgfVxyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tcInBhZ2Vjb3VudFwiXSA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBzZWxmLnZpc2libGVQYWdlQ291bnQ7IH1cclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uVG9Qcm9jZXNzZWRUZXh0VmFsdWVzKHF1ZXN0aW9uc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRRdWVzdGlvblRvUHJvY2Vzc2VkVGV4dFZhbHVlcyhxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW3F1ZXN0aW9uLm5hbWUudG9Mb3dlckNhc2UoKV0gPSBcInF1ZXN0aW9uXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc1Byb2Nlc3NlZFRleHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZShuYW1lKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2ZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRGaXJzdE5hbWUobmFtZSk7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tmaXJzdE5hbWUudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh2YWwgPT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlKG5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWwgPT0gXCJxdWVzdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoZmlyc3ROYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIG5hbWUgPSBxdWVzdGlvbi5uYW1lICsgbmFtZS5zdWJzdHIoZmlyc3ROYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUobmFtZSwgdGhpcy52YWx1ZXNIYXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbCA9PSBcInZhbHVlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjbGVhclVudXNlZFZhbHVlcygpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclVudXNlZFZhbHVlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jbGVhckludmlzaWJsZVZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zW2ldLnZpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUocXVlc3Rpb25zW2ldLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZhcmlhYmxlc0hhc2hbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IFwidmFyaWFibGVcIjtcclxuICAgIH1cclxuICAgIC8vSVN1cnZleSBkYXRhXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VW5iaW5kVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIC8vZG8gbm90IHJldHVybiB0aGUgc2FtZSBvYmplY3QgaW5zdGFuY2UhISFcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVzSGFzaFtuYW1lXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVxdWFsKG5hbWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJcIiB8fCBuZXdWYWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNIYXNoW25hbWVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IFwidmFsdWVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmNoZWNrVHJpZ2dlcnMobmFtZSwgbmV3VmFsdWUsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzVmFsdWVFcXVhbChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT0gXCJcIikgbmV3VmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSBudWxsKSByZXR1cm4gbmV3VmFsdWUgPT09IG9sZFZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIG9sZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB0cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5nb05leHRQYWdlQXV0b21hdGljIHx8ICF0aGlzLmN1cnJlbnRQYWdlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcclxuICAgICAgICBpZiAocXVlc3Rpb24gJiYgKCFxdWVzdGlvbi52aXNpYmxlIHx8ICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpKSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5oYXNJbnB1dCAmJiAhdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0ubmFtZSkpIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQYWdlLmhhc0Vycm9ycyh0cnVlLCBmYWxzZSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhW25hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXhdO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbmFtZSA9IG5hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXg7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiIHx8IG5ld1ZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc0hhc2hbbmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXJWYWx1ZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldFZhbHVlKG5hbWUsIG51bGwpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tbWVudChuYW1lLCBudWxsKTtcclxuICAgIH1cclxuICAgIHF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywgeyAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ25hbWUnOiBxdWVzdGlvbi5uYW1lLCAndmlzaWJsZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgICAgIHRoaXMuY2hlY2tQYWdlVmlzaWJpbGl0eShxdWVzdGlvbiwgIW5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ3BhZ2UnOiBwYWdlLCAndmlzaWJsZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb25BZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uVG9Qcm9jZXNzZWRUZXh0VmFsdWVzKHF1ZXN0aW9uKTtcclxuICAgICAgICB0aGlzLm9uUXVlc3Rpb25BZGRlZC5maXJlKHRoaXMsIHsgJ3F1ZXN0aW9uJzogcXVlc3Rpb24sICduYW1lJzogcXVlc3Rpb24ubmFtZSwgJ2luZGV4JzogaW5kZXgsICdwYXJlbnRQYW5lbCc6IHBhcmVudFBhbmVsLCAncm9vdFBhbmVsJzogcm9vdFBhbmVsIH0pO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb25SZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblF1ZXN0aW9uUmVtb3ZlZC5maXJlKHRoaXMsIHsgJ3F1ZXN0aW9uJzogcXVlc3Rpb24sICduYW1lJzogcXVlc3Rpb24ubmFtZSB9KTtcclxuICAgIH1cclxuICAgIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUGFuZWxBZGRlZC5maXJlKHRoaXMsIHsgJ3BhbmVsJzogcGFuZWwsICduYW1lJzogcGFuZWwubmFtZSwgJ2luZGV4JzogaW5kZXgsICdwYXJlbnRQYW5lbCc6IHBhcmVudFBhbmVsLCAncm9vdFBhbmVsJzogcm9vdFBhbmVsIH0pO1xyXG4gICAgfVxyXG4gICAgcGFuZWxSZW1vdmVkKHBhbmVsOiBJRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUGFuZWxSZW1vdmVkLmZpcmUodGhpcywgeyAncGFuZWwnOiBwYW5lbCwgJ25hbWUnOiBwYW5lbC5uYW1lIH0pO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGVRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgaWYgKHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmlzRW1wdHkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBvcHRpb25zID0geyBuYW1lOiBuYW1lLCB2YWx1ZTogdGhpcy5nZXRWYWx1ZShuYW1lKSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB0aGlzLm9uVmFsaWRhdGVRdWVzdGlvbi5maXJlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3IpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGh0bWw6IGh0bWwgfTtcclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0h0bWwuZmlyZSh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dChvcHRpb25zLmh0bWwpO1xyXG4gICAgfVxyXG4gICAgcHJvY2Vzc1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGV4dCk7XHJcbiAgICB9XHJcbiAgICAvL0lTdXJ2ZXlUcmlnZ2VyT3duZXJcclxuICAgIGdldE9iamVjdHMocGFnZXM6IHN0cmluZ1tdLCBxdWVzdGlvbnM6IHN0cmluZ1tdKTogYW55W117XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRQYWdlc0J5TmFtZXMocGFnZXMpKTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc1ZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFyaWFibGUobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy9NYWtlIGxvY2FsaXphYmxlOiBjb21wbGV0ZWRIdG1sLCBwYWdlUHJldlRleHQsIHBhZ2VOZXh0VGV4dCwgY29tcGxldGVUZXh0XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5XCIsIFt7IG5hbWU6IFwibG9jYWxlXCIsIGNob2ljZXM6ICgpID0+IHsgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRMb2NhbGVzKCkgfSB9LFxyXG4gICAge25hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCJ9LCB7IG5hbWU6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZX0sIFxyXG4gICAge25hbWU6IFwiY29tcGxldGVkSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRIdG1sXCJ9LCB7IG5hbWU6IFwicGFnZXNcIiwgY2xhc3NOYW1lOiBcInBhZ2VcIiwgdmlzaWJsZTogZmFsc2UgfSxcclxuICAgIHsgbmFtZTogXCJxdWVzdGlvbnNcIiwgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLCB2aXNpYmxlOiBmYWxzZSwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gbnVsbDsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsdWUsIGpzb25Db252ZXJ0ZXIpIHsgdmFyIHBhZ2UgPSBvYmouYWRkTmV3UGFnZShcIlwiKTsganNvbkNvbnZlcnRlci50b09iamVjdCh7IHF1ZXN0aW9uczogdmFsdWUgfSwgcGFnZSk7IH0gfSxcclxuICAgIHsgbmFtZTogXCJ0cmlnZ2Vyczp0cmlnZ2Vyc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXRyaWdnZXJcIiwgY2xhc3NOYW1lUGFydDogXCJ0cmlnZ2VyXCIgfSxcclxuICAgIFwic3VydmV5SWRcIiwgXCJzdXJ2ZXlQb3N0SWRcIiwgXCJjb29raWVOYW1lXCIsIFwic2VuZFJlc3VsdE9uUGFnZU5leHQ6Ym9vbGVhblwiLFxyXG4gICAgeyBuYW1lOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgeyBuYW1lOiBcInNob3dUaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgXHJcbiAgICB7IG5hbWU6IFwic2hvd1BhZ2VUaXRsZXM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIHsgbmFtZTogXCJzaG93Q29tcGxldGVkUGFnZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcclxuICAgIFwic2hvd1BhZ2VOdW1iZXJzOmJvb2xlYW5cIiwgeyBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgZGVmYXVsdDogXCJvblwiLCBjaG9pY2VzOiBbXCJvblwiLCBcIm9uUGFnZVwiLCBcIm9mZlwiXSB9LFxyXG4gICAgeyBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCBkZWZhdWx0OiBcInRvcFwiLCBjaG9pY2VzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0gfSxcclxuICAgIHsgbmFtZTogXCJzaG93UHJvZ3Jlc3NCYXJcIiwgZGVmYXVsdDogXCJvZmZcIiwgY2hvaWNlczogW1wib2ZmXCIsIFwidG9wXCIsIFwiYm90dG9tXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwibW9kZVwiLCBkZWZhdWx0OiBcImVkaXRcIiwgY2hvaWNlczogW1wiZWRpdFwiLCBcImRpc3BsYXlcIl0gfSxcclxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgXCJnb05leHRQYWdlQXV0b21hdGljOmJvb2xlYW5cIiwgXCJjbGVhckludmlzaWJsZVZhbHVlczpib29sZWFuXCIsXHJcbiAgICB7IG5hbWU6IFwicGFnZVByZXZUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlUHJldlRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlTmV4dFRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwiY29tcGxldGVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZVRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRUZXh0XCIsIGRlZmF1bHQ6IFwiKlwiIH0sIFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHtuYW1lOiBcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCJ9XSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleS50cyIsImV4cG9ydCBjbGFzcyBUZXh0UHJlUHJvY2Vzc29ySXRlbSB7XHJcbiAgICBwdWJsaWMgc3RhcnQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBlbmQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3Ige1xyXG4gICAgcHVibGljIG9uUHJvY2VzczogKG5hbWU6IHN0cmluZykgPT4gYW55O1xyXG4gICAgcHVibGljIG9uSGFzVmFsdWU6IChuYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIHByb2Nlc3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIGlmICghdGhpcy5vblByb2Nlc3MpIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZ2V0SXRlbXModGV4dCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKHRleHQuc3Vic3RyaW5nKGl0ZW0uc3RhcnQgKyAxLCBpdGVtLmVuZCkpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuUHJvY2Vzc05hbWUobmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkhhc1ZhbHVlICYmICF0aGlzLm9uSGFzVmFsdWUobmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLm9uUHJvY2VzcyhuYW1lKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDAsIGl0ZW0uc3RhcnQpICsgdmFsdWUgKyB0ZXh0LnN1YnN0cihpdGVtLmVuZCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0SXRlbXModGV4dDogc3RyaW5nKTogQXJyYXk8VGV4dFByZVByb2Nlc3Nvckl0ZW0+IHtcclxuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gLTE7XHJcbiAgICAgICAgdmFyIGNoID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjaCA9IHRleHRbaV07XHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAneycpIHN0YXJ0ID0gaTtcclxuICAgICAgICAgICAgaWYgKGNoID09ICd9Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RhcnQgPSBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVuZCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgcmV0dXJuIG5hbWUudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjYW5Qcm9jZXNzTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoID0gbmFtZVtpXTtcclxuICAgICAgICAgICAgLy9UT0RPXHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAnICcgfHwgY2ggPT0gJy0nIHx8IGNoID09ICcmJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzIiwiaW1wb3J0IHtCYXNlLCBTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSAnLi9qc29ub2JqZWN0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBhbnksIHB1YmxpYyBlcnJvcjogU3VydmV5RXJyb3IgPSBudWxsKSB7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlIHtcclxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRFcnJvclRleHQobmFtZTogc3RyaW5nKSA6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMudGV4dCkgcmV0dXJuIHRoaXMudGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0RXJyb3JUZXh0KG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0b3JPd25lciB7XHJcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+O1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZztcclxufVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUnVubmVyIHtcclxuICAgIHB1YmxpYyBydW4ob3duZXI6IElWYWxpZGF0b3JPd25lcik6IFN1cnZleUVycm9yIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG93bmVyLnZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvclJlc3VsdCA9IG93bmVyLnZhbGlkYXRvcnNbaV0udmFsaWRhdGUob3duZXIudmFsdWUsIG93bmVyLmdldFZhbGlkYXRvclRpdGxlKCkpO1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yUmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3JSZXN1bHQuZXJyb3IpIHJldHVybiB2YWxpZGF0b3JSZXN1bHQuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yUmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3duZXIudmFsdWUgPSB2YWxpZGF0b3JSZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBtaW5WYWx1ZTogbnVtYmVyID0gbnVsbCwgcHVibGljIG1heFZhbHVlOiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcIm51bWVyaWN2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICghdmFsdWUgfHwgIXRoaXMuaXNOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBSZXF1cmVOdW1lcmljRXJyb3IoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgVmFsaWRhdG9yUmVzdWx0KHBhcnNlRmxvYXQodmFsdWUpKTtcclxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAmJiB0aGlzLm1pblZhbHVlID4gcmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvciA9IG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heFZhbHVlICYmIHRoaXMubWF4VmFsdWUgPCByZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yID0gbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSA/IG51bGwgOiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgdk5hbWUgPSBuYW1lID8gbmFtZSA6IFwidmFsdWVcIjtcclxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAmJiB0aGlzLm1heFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY01pbk1heFwiKVtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWluVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY01pblwiKVtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljTWF4XCIpW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1heFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtYmVyKHZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgJiYgaXNGaW5pdGUodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbWluTGVuZ3RoOiBudW1iZXIgPSAwLCBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInRleHR2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoIDwgdGhpcy5taW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB0aGlzLm1heExlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidGV4dE1pbk1heExlbmd0aFwiKVtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCwgdGhpcy5tYXhMZW5ndGgpO1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDApIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidGV4dE1pbkxlbmd0aFwiKVtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0ZXh0TWF4TGVuZ3RoXCIpW1wiZm9ybWF0XCJdKHRoaXMubWF4TGVuZ3RoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFuc3dlckNvdW50VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBtaW5Db3VudDogbnVtYmVyID0gbnVsbCwgcHVibGljIG1heENvdW50OiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5jb25zdHJ1Y3RvciAhPSBBcnJheSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGNvdW50ID0gdmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkNvdW50ICYmIGNvdW50IDwgdGhpcy5taW5Db3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQoc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1pblNlbGVjdEVycm9yXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluQ291bnQpKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXhDb3VudCAmJiBjb3VudCA+IHRoaXMubWF4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXhTZWxlY3RFcnJvclwiKVtcImZvcm1hdFwiXSh0aGlzLm1heENvdW50KSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlZ2V4VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWdleDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJyZWdleHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlZ2V4IHx8ICF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCh0aGlzLnJlZ2V4KTtcclxuICAgICAgICBpZiAocmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgcHJpdmF0ZSByZSA9IC9eKChbXjw+KClcXFtcXF1cXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiZW1haWx2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnJlLnRlc3QodmFsdWUpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdCh2YWx1ZSwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImludmFsaWRFbWFpbFwiKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInN1cnZleXZhbGlkYXRvclwiLCBbXCJ0ZXh0XCJdKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm51bWVyaWN2YWxpZGF0b3JcIiwgW1wibWluVmFsdWU6bnVtYmVyXCIsIFwibWF4VmFsdWU6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTnVtZXJpY1ZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRleHR2YWxpZGF0b3JcIiwgW1wibWluTGVuZ3RoOm51bWJlclwiLCBcIm1heExlbmd0aDpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBUZXh0VmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIiwgW1wibWluQ291bnQ6bnVtYmVyXCIsIFwibWF4Q291bnQ6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQW5zd2VyQ291bnRWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyZWdleHZhbGlkYXRvclwiLCBbXCJyZWdleFwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlZ2V4VmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiZW1haWx2YWxpZGF0b3JcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbWFpbFZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdmFsaWRhdG9yLnRzIiwiaW1wb3J0IHtDb25kaXRpb24sIENvbmRpdGlvbk5vZGV9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyIHtcclxuICAgIHByaXZhdGUgdGV4dDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByb290OiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uTm9kZXM6IEFycmF5PENvbmRpdGlvbk5vZGU+O1xyXG4gICAgcHJpdmF0ZSBub2RlOiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBhdDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBsZW5ndGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwYXJzZSh0ZXh0OiBzdHJpbmcsIHJvb3Q6IENvbmRpdGlvbk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XHJcbiAgICAgICAgdGhpcy5yb290LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hdCA9IDA7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLnRleHQubGVuZ3RoO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnBhcnNlVGV4dCgpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9TdHJpbmcocm9vdDogQ29uZGl0aW9uTm9kZSk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlVG9TdHJpbmcocm9vdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHRvU3RyaW5nQ29yZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAodmFsdWVbXCJjaGlsZHJlblwiXSkgcmV0dXJuIHRoaXMubm9kZVRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICBpZiAodmFsdWVbXCJsZWZ0XCJdKSByZXR1cm4gdGhpcy5jb25kaXRpb25Ub1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vZGVUb1N0cmluZyhub2RlOiBDb25kaXRpb25Ob2RlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobm9kZS5pc0VtcHR5KSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgcmVzID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVUZXh0ID0gdGhpcy50b1N0cmluZ0NvcmUobm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykgcmVzICs9ICcgJyArIG5vZGUuY29ubmVjdGl2ZSArICcgJztcclxuICAgICAgICAgICAgICAgIHJlcyArPSBub2RlVGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSAhPSB0aGlzLnJvb3QgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJlcyA9ICcoJyArIHJlcyArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBDb25kaXRpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uLnJpZ2h0IHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7XHJcbiAgICAgICAgaWYgKGxlZnQgJiYgIXRoaXMuaXNOdW1lcmljKGxlZnQpKSBsZWZ0ID0gXCInXCIgKyBsZWZ0ICsgXCInXCI7XHJcbiAgICAgICAgdmFyIHJlcyA9IGxlZnQgKyAnICcgKyB0aGlzLm9wZXJhdGlvblRvU3RyaW5nKGNvbmRpdGlvbi5vcGVyYXRvcik7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb1JpZ2h0T3BlcmF0aW9uKGNvbmRpdGlvbi5vcGVyYXRvcikpIHJldHVybiByZXM7XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xyXG4gICAgICAgIGlmIChyaWdodCAmJiAhdGhpcy5pc051bWVyaWMocmlnaHQpKSByaWdodCA9IFwiJ1wiICsgcmlnaHQgKyBcIidcIjtcclxuICAgICAgICByZXR1cm4gcmVzICsgJyAnICsgcmlnaHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wZXJhdGlvblRvU3RyaW5nKG9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChvcCA9PSBcImVxdWFsXCIpIHJldHVybiBcIj1cIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJub3RlcXVhbFwiKSByZXR1cm4gXCIhPVwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJcIikgcmV0dXJuIFwiPlwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImxlc3NcIikgcmV0dXJuIFwiPFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJvcmVxdWFsXCIpIHJldHVybiBcIj49XCI7XHJcbiAgICAgICAgaWYgKG9wID09IFwibGVzc29yZXF1YWxcIikgcmV0dXJuIFwiPD1cIjtcclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtZXJpYyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBhcnNlVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTm9kZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKHRoaXMubm9kZSk7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMucmVhZENvbmRpdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gcmVzICYmIHRoaXMuYXQgPj0gdGhpcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRDb25kaXRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlYWRDb25kaXRpb24oKTtcclxuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIHJlcztcclxuICAgICAgICB2YXIgY29ubmVjdGl2ZSA9IHRoaXMucmVhZENvbm5lY3RpdmUoKTtcclxuICAgICAgICBpZiAoY29ubmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENvbm5lY3RpdmUoY29ubmVjdGl2ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRDb25kaXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29uZGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBleHBSZXMgPSB0aGlzLnJlYWRFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgaWYgKGV4cFJlcyA8IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZihleHBSZXMgPT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIGxlZnQgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWxlZnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRPcGVyYXRvcigpO1xyXG4gICAgICAgIGlmICghb3ApIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgYyA9IG5ldyBDb25kaXRpb24oKTtcclxuICAgICAgICBjLmxlZnQgPSBsZWZ0OyBjLm9wZXJhdG9yID0gb3A7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTm9SaWdodE9wZXJhdGlvbihvcCkpIHtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmICghcmlnaHQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgYy5yaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENvbmRpdGlvbihjKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZEV4cHJlc3Npb24oKTogbnVtYmVyIHtcclxuICAgICAgICB0aGlzLnNraXAoKTtcclxuICAgICAgICBpZiAodGhpcy5hdCA+PSB0aGlzLmxlbmd0aCB8fCB0aGlzLmNoICE9ICcoJykgcmV0dXJuIDA7XHJcbiAgICAgICAgdGhpcy5hdCsrO1xyXG4gICAgICAgIHRoaXMucHVzaEV4cHJlc3Npb24oKTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5yZWFkQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5za2lwKCk7XHJcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuY2ggPT0gPHN0cmluZz4nKSc7XHJcbiAgICAgICAgICAgIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgdGhpcy5wb3BFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBjaCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmF0KTsgfVxyXG4gICAgcHJpdmF0ZSBza2lwKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGggJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSB0aGlzLmF0Kys7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU3BhY2UoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1xcbicgfHwgYyA9PSAnXFx0JyB8fCBjID09ICdcXHInO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1F1b3RlcyhjOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYyA9PSBcIidcIiB8fCBjID09ICdcIidcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNPcGVyYXRvckNoYXIoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJz4nIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz0nIHx8IGMgPT0gJyEnO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0JyYWNrZXRzKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjID09ICcoJyB8fCBjID09ICcpJztcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZFN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgIHRoaXMuc2tpcCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0ID49IHRoaXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmF0O1xyXG4gICAgICAgIHZhciBoYXNRdW90ZXMgPSB0aGlzLmlzUXVvdGVzKHRoaXMuY2gpO1xyXG4gICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICB2YXIgaXNGaXJzdE9wQ2ggPSB0aGlzLmlzT3BlcmF0b3JDaGFyKHRoaXMuY2gpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFoYXNRdW90ZXMgJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNRdW90ZXModGhpcy5jaCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaGFzUXVvdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdE9wQ2ggIT0gdGhpcy5pc09wZXJhdG9yQ2hhcih0aGlzLmNoKSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0JyYWNrZXRzKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmF0IDw9IHN0YXJ0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy50ZXh0LnN1YnN0cihzdGFydCwgdGhpcy5hdCAtIHN0YXJ0KTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMSAmJiB0aGlzLmlzUXVvdGVzKHJlc1swXSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSByZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUXVvdGVzKHJlc1tyZXMubGVuZ3RoIC0gMV0pKSBsZW4tLTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5zdWJzdHIoMSwgbGVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc05vUmlnaHRPcGVyYXRpb24ob3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBvcCA9PSBcImVtcHR5XCIgfHwgb3AgPT0gXCJub3RlbXB0eVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkT3BlcmF0b3IoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIW9wKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBvcCA9IG9wLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKG9wID09ICc+Jykgb3AgPSBcImdyZWF0ZXJcIjtcclxuICAgICAgICBpZiAob3AgPT0gJzwnKSBvcCA9IFwibGVzc1wiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPj0nIHx8IG9wID09ICc9PicpIG9wID0gXCJncmVhdGVyb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPD0nIHx8IG9wID09ICc9PCcpIG9wID0gXCJsZXNzb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPScgfHwgb3AgPT0gJz09Jykgb3AgPSBcImVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICc8PicgfHwgb3AgPT0gJyE9Jykgb3AgPSBcIm5vdGVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdjb250YWluJykgb3AgPSBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdub3Rjb250YWluJykgb3AgPSBcIm5vdGNvbnRhaW5zXCI7XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29ubmVjdGl2ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBjb24gPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWNvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uID0gY29uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGNvbiA9PSBcIiZcIiB8fCBjb24gPT0gXCImJlwiKSBjb24gPSBcImFuZFwiO1xyXG4gICAgICAgIGlmIChjb24gPT0gXCJ8XCIgfHwgY29uID09IFwifHxcIikgY29uID0gXCJvclwiO1xyXG4gICAgICAgIGlmIChjb24gIT0gXCJhbmRcIiAmJiBjb24gIT0gXCJvclwiKSBjb24gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBjb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHB1c2hFeHByZXNzaW9uKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBvcEV4cHJlc3Npb24oKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wb3AoKTtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlc1t0aGlzLmV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkQ29uZGl0aW9uKGM6IENvbmRpdGlvbikge1xyXG4gICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKGMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRDb25uZWN0aXZlKGNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0aXZlID0gY29uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY29ubmVjdGl2ZSAhPSBjb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDb24gPSB0aGlzLm5vZGUuY29ubmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDaGlsZHJlbiA9IHRoaXMubm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3RpdmUgPSBjb247XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTm9kZSA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNvbm5lY3RpdmUgPSBvbGRDb247XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChvbGROb2RlKTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwiZXhwb3J0IGNsYXNzIGR4U3VydmV5U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlcnZpY2VVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly9keHN1cnZleWFwaS5henVyZXdlYnNpdGVzLm5ldC9hcGkvU3VydmV5XCI7XHJcbiAgICAvL3B1YmxpYyBzdGF0aWMgc2VydmljZVVybDogc3RyaW5nID0gXCJodHRwOi8vbG9jYWxob3N0OjUwNDg4L2FwaS9TdXJ2ZXlcIjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXkoc3VydmV5SWQ6IHN0cmluZywgb25Mb2FkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy9nZXRTdXJ2ZXk/c3VydmV5SWQ9JyArIHN1cnZleUlkKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0KHBvc3RJZDogc3RyaW5nLCByZXN1bHQ6IEpTT04sIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpPT4gdm9pZCwgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdQT1NUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL3Bvc3QvJyk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7IHBvc3RJZDogcG9zdElkLCBzdXJ2ZXlSZXN1bHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgfTtcclxuICAgICAgICBpZiAoY2xpZW50SWQpIGRhdGFbJ2NsaWVudElkJ10gPSBjbGllbnRJZDtcclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkKSBkYXRhWydpc1BhcnRpYWxDb21wbGV0ZWQnXSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGRhdGFTdHJpbmdpZnk6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XHJcbiAgICAgICAgICAgIG9uU2VuZFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKGRhdGFTdHJpbmdpZnkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNlbmRGaWxlKHBvc3RJZDogc3RyaW5nLCBmaWxlOiBGaWxlLCBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kRmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy91cGxvYWQvJywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJwb3N0SWRcIiwgcG9zdElkKTtcclxuICAgICAgICB4aHIuc2VuZChmb3JtRGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgb25HZXRSZXN1bHQ6IChzdWNjZXNzOiBib29sZWFuLCBkYXRhOiBhbnksIGRhdGFMaXN0OiBBcnJheTxhbnk+LCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmbmFtZT0nICsgbmFtZTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL2dldFJlc3VsdD8nICsgZGF0YSk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LlF1ZXN0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0geyBuYW1lOiBrZXksIHZhbHVlOiByZXN1bHQuUXVlc3Rpb25SZXN1bHRba2V5XSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25HZXRSZXN1bHQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgbGlzdCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNDb21wbGV0ZWQocmVzdWx0SWQ6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZywgb25Jc0NvbXBsZXRlZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmY2xpZW50SWQ9JyArIGNsaWVudElkO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArICcvaXNDb21wbGV0ZWQ/JyArIGRhdGEpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvbklzQ29tcGxldGVkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElQYWdlLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5LCBJRWxlbWVudCwgSVF1ZXN0aW9uLCBIYXNoVGFibGUsIFN1cnZleUVsZW1lbnQsIFN1cnZleVBhZ2VJZH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7Q29uZGl0aW9uUnVubmVyfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbH0gZnJvbSBcIi4vcGFuZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElQYWdlIHtcclxuICAgIHByaXZhdGUgbnVtVmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eTogc3RyaW5nID0gXCJpbmhlcml0XCI7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicGFnZVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG51bSgpIHsgcmV0dXJuIHRoaXMubnVtVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgbnVtKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5udW1WYWx1ZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubnVtVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9uTnVtQ2hhbmdlZCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24uaGFzSW5wdXQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpXS5mb2N1cygpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb25zW2ldLnZpc2libGUgfHwgdGhpcy5xdWVzdGlvbnNbaV0uY3VycmVudEVycm9yQ291bnQgPT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2ldLmZvY3VzKHRydWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AoU3VydmV5UGFnZUlkKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbk51bUNoYW5nZWQodmFsdWU6IG51bWJlcikge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMudmlzaWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInBhZ2VcIiwgW3sgbmFtZTogXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIiwgZGVmYXVsdDogXCJpbmhlcml0XCIsIGNob2ljZXM6IFtcImloZXJpdFwiLCBcInNob3dcIiwgXCJoaWRlXCJdIH1dLCBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQYWdlTW9kZWwoKTsgfSwgXCJwYW5lbFwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGFnZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElQYWdlLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5LCBJU3VydmV5RGF0YSwgSUVsZW1lbnQsIElRdWVzdGlvbiwgSGFzaFRhYmxlLCBTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlQYWdlSWR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUm93TW9kZWwge1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW47XHJcbiAgICB2aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gcGFuZWwuZGF0YSAmJiBwYW5lbC5kYXRhLmlzRGVzaWduTW9kZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBlbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+ID0gW107XHJcbiAgICAvL1RPRE8gcmVtb3ZlIGFmdGVyIHVwZGF0aW5nIHJlYWN0IGFuZCB2dWVcclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PElFbGVtZW50PiB7IHJldHVybiB0aGlzLmVsZW1lbnRzO30gXHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdXBkYXRlVmlzaWJsZSgpIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmNhbGNWaXNpYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEVsZW1lbnQocTogSUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2gocSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKSB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0V2lkdGgoKSB7XHJcbiAgICAgICAgdmFyIHZpc0NvdW50ID0gdGhpcy5nZXRWaXNpYmxlQ291bnQoKTtcclxuICAgICAgICBpZiAodmlzQ291bnQgPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHEgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgcS5yZW5kZXJXaWR0aCA9IHEud2lkdGggPyBxLndpZHRoIDogTWF0aC5mbG9vcigxMDAgLyB2aXNDb3VudCkgKyAnJSc7XHJcbiAgICAgICAgICAgICAgICBxLnJpZ2h0SW5kZW50ID0gY291bnRlciA8IHZpc0NvdW50IC0gMSA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZpc2libGVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciByZXMgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHJlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjYWxjVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUNvdW50KCkgPiAwOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsQmFzZSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJQ29uZGl0aW9uUnVubmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBwYW5lbENvdW50ZXIgPSAxMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYW5lbElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwic3BfXCIgKyBQYW5lbE1vZGVsQmFzZS5wYW5lbENvdW50ZXIrKztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRhdGFWYWx1ZTogSVN1cnZleSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcclxuICAgIHByaXZhdGUgZWxlbWVudHNWYWx1ZTogQXJyYXk8SUVsZW1lbnQ+ID0gbmV3IEFycmF5PElFbGVtZW50PigpO1xyXG4gICAgcHJpdmF0ZSBpc1F1ZXN0aW9uc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uc1ZhbHVlOiBBcnJheTxRdWVzdGlvbkJhc2U+ID0gbmV3IEFycmF5PFF1ZXN0aW9uQmFzZT4oKTtcclxuICAgIHB1YmxpYyBwYXJlbnQ6IFBhbmVsTW9kZWxCYXNlID0gbnVsbDtcclxuICAgIHB1YmxpYyB2aXNpYmxlSWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICByb3dzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHB1YmxpYyB2aXNpYmxlSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IFBhbmVsTW9kZWxCYXNlLmdldFBhbmVsSWQoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHNWYWx1ZS5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKTogbnVtYmVyIHsgcmV0dXJuIHNlbGYuZG9PblB1c2hFbGVtZW50KHRoaXMsIHZhbHVlKTsgfTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzVmFsdWUuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IFF1ZXN0aW9uQmFzZVtdKTogUXVlc3Rpb25CYXNlW10ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5kb1NwbGljZUVsZW1lbnRzKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogSVN1cnZleSB7IHJldHVybiB0aGlzLmRhdGFWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBJU3VydmV5KSB7XHJcbiAgICAgICAgaWYodGhpcy5kYXRhVmFsdWUgPT09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kYXRhVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXREYXRhKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGUudGV4dCA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/ICg8SUxvY2FsaXphYmxlT3duZXI+PGFueT50aGlzLmRhdGEpLmdldExvY2FsZSgpIDogXCJcIjsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbkJhc2U+IHsgXHJcbiAgICAgICAgaWYoIXRoaXMuaXNRdWVzdGlvbnNSZWFkeSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmKGVsLmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXMgPSAoPFBhbmVsTW9kZWw+ZWwpLnF1ZXN0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgcXMubGVuZ3RoOyBqICsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaChxc1tqXSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZS5wdXNoKDxRdWVzdGlvbkJhc2U+ZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpIHtcclxuICAgICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLnBhcmVudCkgdGhpcy5wYXJlbnQubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7IHJldHVybiB0aGlzLmVsZW1lbnRzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBjb250YWluc0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsOiBhbnkgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZihlbCA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgaWYoKDxQYW5lbE1vZGVsQmFzZT5lbCkuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIGZvY3VzZU9uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBmaXJzdEVycm9yUXVlc3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHZhciB2aXNpYmxlUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5hZGRRdWVzdGlvbnNUb0xpc3QodmlzaWJsZVF1ZXN0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHZpc2libGVRdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VPbkZpcnN0RXJyb3IgJiYgZmlyc3RFcnJvclF1ZXN0aW9uID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdEVycm9yUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcnN0RXJyb3JRdWVzdGlvbikgZmlyc3RFcnJvclF1ZXN0aW9uLmZvY3VzKHRydWUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUXVlc3Rpb25zVG9MaXN0KGxpc3Q6IEFycmF5PElRdWVzdGlvbj4sIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihlbC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAoPFBhbmVsTW9kZWw+ZWwpLmFkZFF1ZXN0aW9uc1RvTGlzdChsaXN0LCB2aXNpYmxlT25seSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IFxyXG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKDxJUXVlc3Rpb24+ZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PFF1ZXN0aW9uUm93TW9kZWw+IHtcclxuICAgICAgICBpZighdGhpcy5yb3dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXMgPSB0aGlzLmJ1aWxkUm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCkgeyByZXR1cm4gKCF0aGlzLmRhdGEpIHx8IHRoaXMuZGF0YS5jdXJyZW50UGFnZSA9PSB0aGlzLnJvb3Q7IH1cclxuICAgIHByb3RlY3RlZCBnZXQgcm9vdCgpOiBQYW5lbE1vZGVsQmFzZSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsQmFzZT50aGlzO1xyXG4gICAgICAgIHdoaWxlKHJlcy5wYXJlbnQpIHJlcyA9IHJlcy5wYXJlbnQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7IHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTsgfVxyXG4gICAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJvd3NDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgaXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzTG9hZGluZ0Zyb21Kc29uOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25Sb3dzQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnJvd1ZhbHVlcyA9IG51bGw7XHJcbiAgICAgICAgaWYodGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB0aGlzLnJvd3NDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0IGlzRGVzaWduTW9kZSgpIHsgcmV0dXJuIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuaXNEZXNpZ25Nb2RlOyB9XHJcbiAgICBwcml2YXRlIGRvT25QdXNoRWxlbWVudChsaXN0OiBBcnJheTxJRWxlbWVudD4sIHZhbHVlOiBJRWxlbWVudCkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGxpc3QsIHZhbHVlKTtcclxuICAgICAgICB0aGlzLm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xyXG4gICAgICAgIHRoaXMub25BZGRFbGVtZW50KHZhbHVlLCBsaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9TcGxpY2VFbGVtZW50cyhsaXN0OiBBcnJheTxJRWxlbWVudD4sIHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IElFbGVtZW50W10pIHtcclxuICAgICAgICBpZighc3RhcnQpIHN0YXJ0ID0gMDtcclxuICAgICAgICBpZighZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcclxuICAgICAgICB2YXIgZGVsZXRlZFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkZWxldGVDb3VudDsgaSArKykge1xyXG4gICAgICAgICAgICBpZihpICsgc3RhcnQgPj0gbGlzdC5sZW5ndGgpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBkZWxldGVkUXVlc3Rpb25zLnB1c2gobGlzdFtpICsgc3RhcnRdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChsaXN0LCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcclxuICAgICAgICBpZighaXRlbXMpIGl0ZW1zID0gW107XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRRdWVzdGlvbnMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50KGRlbGV0ZWRRdWVzdGlvbnNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFkZEVsZW1lbnQoaXRlbXNbaV0sIHN0YXJ0ICsgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uQWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmKGVsZW1lbnQuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICB2YXIgcCA9IDxQYW5lbE1vZGVsPmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHAuZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICAgICAgcC5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkJhc2U+ZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHEuc2V0RGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnF1ZXN0aW9uQWRkZWQocSwgaW5kZXgsIHRoaXMsIHRoaXMucm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGVsZW1lbnQucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50KTsgfVxyXG4gICAgICAgIGVsZW1lbnQuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50KTsgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcclxuICAgICAgICBpZighZWxlbWVudC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkgdGhpcy5kYXRhLnF1ZXN0aW9uUmVtb3ZlZCg8UXVlc3Rpb25CYXNlPmVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkgdGhpcy5kYXRhLnBhbmVsUmVtb3ZlZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvd1ZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRWxlbWVudFN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50OiBhbnkpICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd1ZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChyb3cuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGJ1aWxkUm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvblJvd01vZGVsPigpO1xyXG4gICAgICAgIHZhciBsYXN0Um93VmlzaWJsZUluZGV4ID0gLTE7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICB2YXIgaXNOZXdSb3cgPSBpID09IDAgfHwgZWwuc3RhcnRXaXRoTmV3TGluZTtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IGlzTmV3Um93ID8gdGhpcy5jcmVhdGVSb3coKSA6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGlmKGlzTmV3Um93KSByZXN1bHQucHVzaChyb3cpO1xyXG4gICAgICAgICAgICByb3cuYWRkRWxlbWVudChlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtpXS51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkgeyBcclxuICAgICAgICB2YXIgc3RyID0gdGhpcy50aXRsZTtcclxuICAgICAgICBpZighc3RyICYmIHRoaXMuaXNQYW5lbCAmJiB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSAhPSBudWxsID8gdGhpcy5kYXRhLnByb2Nlc3NUZXh0KHN0cikgOiBzdHI7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xyXG5cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4geyAgcmV0dXJuICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzRGVzaWduTW9kZSkgfHwgdGhpcy5nZXRJc1BhZ2VWaXNpYmxlKG51bGwpOyB9XHJcbiAgICBwdWJsaWMgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXSA9PSBleGNlcHRpb25RdWVzdGlvbikgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXS52aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIgPSAtMSkge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UsIGluZGV4OiBudW1iZXIgPSAtMSkge1xyXG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChxdWVzdGlvbiwgaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFBhbmVsKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZEVsZW1lbnQocGFuZWwsIGluZGV4KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGROZXdRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb25CYXNlIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb247XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbChuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFBhbmVsKHBhbmVsKTtcclxuICAgICAgICByZXR1cm4gcGFuZWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZihlbC5pc1BhbmVsICYmICg8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZWwpKS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmVRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55Pikge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvblJ1bm5lcikgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcclxuICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLm9uTG9jYWxlQ2hhbmdlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vL2V4cG9ydCBjbGFzcyBcclxuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElFbGVtZW50IHtcclxuICAgIHByaXZhdGUgcmVuZGVyV2lkdGhWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByaWdodEluZGVudFZhbHVlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgd2lkdGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgaW5uZXJJbmRlbnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgc3RhcnRXaXRoTmV3TGluZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicGFuZWxcIjsgfVxyXG4gICAgcHVibGljIHNldERhdGEobmV3VmFsdWU6IElTdXJ2ZXlEYXRhKSB7IFxyXG4gICAgICAgIHRoaXMuZGF0YSA9IDxJU3VydmV5Pm5ld1ZhbHVlOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuaW5uZXJJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5pbm5lckluZGVudFZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbm5lckluZGVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spIHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmVuZGVyV2lkdGgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVuZGVyV2lkdGhWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yZW5kZXJXaWR0aCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVuZGVyV2lkdGhWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN0YXJ0V2l0aE5ld0xpbmUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzdGFydFdpdGhOZXdMaW5lKHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmlnaHRJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMucmlnaHRJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByaWdodEluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yaWdodEluZGVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmlnaHRJbmRlbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZih0aGlzLnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spIHRoaXMucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicGFuZWxcIiwgW1wibmFtZVwiLCAgeyBuYW1lOiBcImVsZW1lbnRzXCIsIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIiwgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxyXG4gICAgeyBuYW1lOiBcInZpc2libGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIFwidmlzaWJsZUlmOmV4cHJlc3Npb25cIiwgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgIHtuYW1lOiBcImlubmVySW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM119XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFBhbmVsTW9kZWwoKTsgfSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wYW5lbC50cyIsImltcG9ydCB7QmFzZSwgSVF1ZXN0aW9uLCBFdmVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcclxuICAgIHB1YmxpYyBodG1sVGVtcGxhdGU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyB3aWRnZXRKc29uOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmh0bWxUZW1wbGF0ZSA9IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlID8gd2lkZ2V0SnNvbi5odG1sVGVtcGxhdGUgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGVsOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKSB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB3aWxsVW5tb3VudChxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudCkgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNGaXQocXVlc3Rpb246IElRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldEpzb24uaXNGaXQpIHJldHVybiB0aGlzLndpZGdldEpzb24uaXNGaXQocXVlc3Rpb24pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldENvbGxlY3Rpb24ge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XHJcbiAgICBwcml2YXRlIHdpZGdldHNWYWx1ZXM6IEFycmF5PFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0PiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBvbkN1c3RvbVdpZGdldEFkZGVkOiBFdmVudDwoY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldCkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksIGFueT4oKTtcclxuICAgICAgICBcclxuICAgIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4geyByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzOyB9XHJcbiAgICBwdWJsaWMgYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldEpzb246IGFueSkge1xyXG4gICAgICAgIHZhciBuYW1lID0gd2lkZ2V0SnNvbi5uYW1lO1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICBuYW1lID0gXCJ3aWRnZXRfXCIgKyB0aGlzLndpZGdldHMubGVuZ3RoICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcclxuICAgICAgICB0aGlzLndpZGdldHNWYWx1ZXMucHVzaChjdXN0b21XaWRnZXQpO1xyXG4gICAgICAgIHRoaXMub25DdXN0b21XaWRnZXRBZGRlZC5maXJlKGN1c3RvbVdpZGdldCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7IHRoaXMud2lkZ2V0c1ZhbHVlcyA9IFtdOyB9XHJcblxyXG4gICAgcHVibGljIGdldEN1c3RvbVdpZGdldChxdWVzdGlvbjogSVF1ZXN0aW9uKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53aWRnZXRzVmFsdWVzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXRzVmFsdWVzW2ldLmlzRml0KHF1ZXN0aW9uKSkgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcbmltcG9ydCB7U3VydmV5TmF2aWdhdGlvbkJhc2V9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVByZXZDbGljayA9IHRoaXMuaGFuZGxlUHJldkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2sgPSB0aGlzLmhhbmRsZU5leHRDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVDbGljayA9IHRoaXMuaGFuZGxlQ29tcGxldGVDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlUHJldkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkucHJldlBhZ2UoKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU5leHRDbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm5leHRQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVDb21wbGV0ZUNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVMYXN0UGFnZSgpO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHByZXZCdXR0b24gPSAhdGhpcy5zdXJ2ZXkuaXNGaXJzdFBhZ2UgPyB0aGlzLnJlbmRlckJ1dHRvbih0aGlzLmhhbmRsZVByZXZDbGljaywgdGhpcy5zdXJ2ZXkucGFnZVByZXZUZXh0LCB0aGlzLmNzcy5uYXZpZ2F0aW9uLnByZXYpIDogbnVsbDtcclxuICAgICAgICB2YXIgbmV4dEJ1dHRvbiA9ICF0aGlzLnN1cnZleS5pc0xhc3RQYWdlID8gdGhpcy5yZW5kZXJCdXR0b24odGhpcy5oYW5kbGVOZXh0Q2xpY2ssIHRoaXMuc3VydmV5LnBhZ2VOZXh0VGV4dCwgdGhpcy5jc3MubmF2aWdhdGlvbi5uZXh0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGNvbXBsZXRlQnV0dG9uID0gdGhpcy5zdXJ2ZXkuaXNMYXN0UGFnZSAmJiB0aGlzLnN1cnZleS5pc0VkaXRNb2RlID8gdGhpcy5yZW5kZXJCdXR0b24odGhpcy5oYW5kbGVDb21wbGV0ZUNsaWNrLCB0aGlzLnN1cnZleS5jb21wbGV0ZVRleHQsIHRoaXMuY3NzLm5hdmlnYXRpb24uY29tcGxldGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuZm9vdGVyfT5cclxuICAgICAgICAgICAgICAgIHtwcmV2QnV0dG9ufVxyXG4gICAgICAgICAgICAgICAge25leHRCdXR0b259XHJcbiAgICAgICAgICAgICAgICB7Y29tcGxldGVCdXR0b259XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbihjbGljazogYW55LCB0ZXh0OiBzdHJpbmcsIGJ0bkNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luUmlnaHQ6IFwiNXB4XCIgfTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbiArIChidG5DbGFzc05hbWUgPyAnICcgKyBidG5DbGFzc05hbWUgOiBcIlwiKTtcclxuICAgICAgICByZXR1cm4gPGlucHV0IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBzdHlsZT17c3R5bGV9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtjbGlja30gdmFsdWU9e3RleHR9IC8+O1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbi50c3giLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuaW1wb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9uQmFzZX0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIGlzVG9wOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmlzVG9wID0gcHJvcHMuaXNUb3A7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuaXNUb3AgPSBuZXh0UHJvcHMuaXNUb3A7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnN1cnZleS5nZXRQcm9ncmVzcygpOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0OyB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7IHdpZHRoOiBcIjYwJVwiIH0gOiB7IHdpZHRoOiBcIjYwJVwiLCBtYXJnaW5Ub3A6IFwiMTBweFwiIH07XHJcbiAgICAgICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7IHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIgfTtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT17cHJvZ3Jlc3NTdHlsZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn0gcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57dGhpcy5wcm9ncmVzc1RleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2Pik7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5fSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93IGV4dGVuZHMgU3VydmV5IHtcclxuICAgIHByaXZhdGUgdGl0bGU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkV4cGFuZGVkID0gdGhpcy5oYW5kbGVPbkV4cGFuZGVkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZCA9ICF0aGlzLnN0YXRlLmV4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmhpZGRlbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XHJcbiAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnN0YXRlLmV4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgcG9zaXRpb246IFwiZml4ZWRcIiwgYm90dG9tOiBcIjNweFwiLCByaWdodDogXCIxMHB4XCIgfTtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLndpbmRvdy5yb290fSBzdHlsZT17c3R5bGV9PlxyXG4gICAgICAgICAgICB7aGVhZGVyfVxyXG4gICAgICAgICAgICB7Ym9keX1cclxuICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHN0eWxlQSA9IHsgd2lkdGg6IFwiMTAwJVwiIH07XHJcbiAgICAgICAgdmFyIHN0eWxlVGl0bGUgPSB7IHBhZGRpbmdSaWdodDogXCIxMHB4XCIgfTtcclxuICAgICAgICB2YXIgZ2x5cGhDbGFzc05hbWUgPSB0aGlzLnN0YXRlLmV4cGFuZGVkID8gdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25Db2xsYXBzZWQgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xyXG4gICAgICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmhlYWRlci5yb290fT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+e3RoaXMudGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnbHlwaENsYXNzTmFtZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckJvZHkoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmJvZHl9PlxyXG4gICAgICAgIHt0aGlzLnJlbmRlclN1cnZleSgpIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci51cGRhdGVTdXJ2ZXkobmV3UHJvcHMpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBuZXdQcm9wcy50aXRsZSA/IG5ld1Byb3BzLnRpdGxlIDogdGhpcy5zdXJ2ZXkudGl0bGU7XHJcbiAgICAgICAgdmFyIGhhc0V4cGFuZGVkID0gbmV3UHJvcHNbXCJleHBhbmRlZFwiXSA/IG5ld1Byb3BzLmV4cGFuZGVkIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZXhwYW5kZWQ6IGhhc0V4cGFuZGVkLCBoaWRkZW46IGZhbHNlIH07XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKGZ1bmN0aW9uIChzOiBTdXJ2ZXlNb2RlbCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3cudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9ufSBmcm9tICcuL3JlYWN0cXVlc3Rpb24nXHJcbmltcG9ydCB7UGFnZU1vZGVsfSBmcm9tIFwiLi4vcGFnZVwiO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcbmltcG9ydCB7SVN1cnZleUNyZWF0b3J9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcclxuaW1wb3J0IHtRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsfSBmcm9tIFwiLi4vcGFuZWxcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuLi9xdWVzdGlvbmJhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgICBwcml2YXRlIHBhZ2U6IFBhZ2VNb2RlbDtcclxuICAgIHByaXZhdGUgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcclxuICAgIHByaXZhdGUgY3JlYXRvcjogSVN1cnZleUNyZWF0b3I7XHJcbiAgICBwcm90ZWN0ZWQgY3NzOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMucGFnZSA9IHByb3BzLnBhZ2U7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBwcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnBhZ2UgPSBuZXh0UHJvcHMucGFnZTtcclxuICAgICAgICB0aGlzLnN1cnZleSA9IG5leHRQcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBuZXh0UHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5yZWZzW1wicm9vdFwiXTtcclxuICAgICAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFnZShlbCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gbnVsbCB8fCB0aGlzLnN1cnZleSA9PSBudWxsIHx8IHRoaXMuY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnJlbmRlclRpdGxlKCk7XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgcXVlc3Rpb25Sb3dzID0gdGhpcy5wYWdlLnJvd3M7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMuY3JlYXRlUm93KHF1ZXN0aW9uUm93c1tpXSwgaSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHJlZj1cInJvb3RcIj5cclxuICAgICAgICAgICAgICAgIHt0aXRsZX1cclxuICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSb3cocm93OiBRdWVzdGlvblJvd01vZGVsLCBpbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciByb3dOYW1lID0gXCJyb3dcIiArIChpbmRleCArIDEpO1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5Um93IGtleT17cm93TmFtZX0gcm93PXtyb3d9IHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzPXt0aGlzLmNzc30gLz47XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5wYWdlLnRpdGxlIHx8ICF0aGlzLnN1cnZleS5zaG93UGFnZVRpdGxlcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLnBhZ2UucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnZS5udW0gPiAwKSB7XHJcbiAgICAgICAgICAgIHRleHQgPSB0aGlzLnBhZ2UubnVtICsgXCIuIFwiICsgdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8aDQgY2xhc3NOYW1lPXt0aGlzLmNzcy5wYWdlVGl0bGV9Pnt0ZXh0fTwvaDQ+KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgICBwcml2YXRlIHBhbmVsOiBQYW5lbE1vZGVsO1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5wYW5lbCA9IHByb3BzLnBhbmVsO1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gcHJvcHMuc3VydmV5O1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IHByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBwcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbCA9IG5leHRQcm9wcy5wYW5lbDtcclxuICAgICAgICB0aGlzLnN1cnZleSA9IG5leHRQcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBuZXh0UHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5yZWZzW1wicm9vdFwiXTtcclxuICAgICAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFnZShlbCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLnBhbmVsID09IG51bGwgfHwgdGhpcy5zdXJ2ZXkgPT0gbnVsbCB8fCB0aGlzLmNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5yZW5kZXJUaXRsZSgpO1xyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWwucm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByb3dzLnB1c2godGhpcy5jcmVhdGVSb3cocXVlc3Rpb25Sb3dzW2ldLCBpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgXCJtYXJnaW5MZWZ0XCI6IHRoaXMucGFuZWwuaW5uZXJJbmRlbnQgKiB0aGlzLmNzcy5xdWVzdGlvbi5pbmRlbnQgKyAncHgnIH07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiByZWY9XCJyb290XCI+XHJcbiAgICAgICAgICAgICAgICB7dGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSb3cocm93OiBRdWVzdGlvblJvd01vZGVsLCBpbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciByb3dOYW1lID0gXCJyb3dcIiArIChpbmRleCArIDEpO1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5Um93IGtleT17cm93TmFtZX0gcm93PXtyb3d9IHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzPXt0aGlzLmNzc30gLz47XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5wYW5lbC50aXRsZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLnBhbmVsLnByb2Nlc3NlZFRpdGxlO1xyXG4gICAgICAgIHJldHVybiAoPGg0IGNsYXNzTmFtZT17dGhpcy5jc3MucGFnZVRpdGxlfT57dGV4dH08L2g0Pik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcm93OiBRdWVzdGlvblJvd01vZGVsO1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BzKTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhwcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yb3cgPSBwcm9wcy5yb3c7XHJcbiAgICAgICAgaWYgKHRoaXMucm93KSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5yb3cudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5zZXRTdGF0ZSh7IHZpc2libGU6IHNlbGYucm93LnZpc2libGUgfSk7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBwcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMucm93ID09IG51bGwgfHwgdGhpcy5zdXJ2ZXkgPT0gbnVsbCB8fCB0aGlzLmNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucm93LnZpc2libGUpIHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3cuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucm93LmVsZW1lbnRzW2ldIGFzIFF1ZXN0aW9uQmFzZTtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHRoaXMuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb24pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLnJvdy52aXNpYmxlID8gIHt9IDogeyBkaXNwbGF5OiBcIm5vbmVcIiB9O1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb3d9IHN0eWxlPXtzdHlsZX0+XHJcbiAgICAgICAgICAgICAgICB7cXVlc3Rpb25zfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxTdXJ2ZXlQYW5lbCBrZXk9e3F1ZXN0aW9uLm5hbWV9IHBhbmVsPXtxdWVzdGlvbn0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBzdXJ2ZXk9e3RoaXMuc3VydmV5fSBjc3M9e3RoaXMuY3NzfSAvPjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gPFN1cnZleVF1ZXN0aW9uIGtleT17cXVlc3Rpb24ubmFtZX0gcXVlc3Rpb249e3F1ZXN0aW9ufSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGNzcz17dGhpcy5jc3N9IC8+O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RwYWdlLnRzeCIsIi8vIG1vZGVsXHJcbmV4cG9ydCAqIGZyb20gXCIuL2NodW5rcy9tb2RlbFwiO1xyXG5cclxuLy8gbG9jYWxpemF0aW9uXHJcbmltcG9ydCAnLi9jaHVua3MvbG9jYWxpemF0aW9uJztcclxuXHJcbi8vIGhlbHBlcnNcclxuZXhwb3J0ICogZnJvbSAgJy4vY2h1bmtzL2hlbHBlcnMnO1xyXG5cclxuLy8gY3NzIHN0YW5kYXJkXHJcbmV4cG9ydCB7ZGVmYXVsdFN0YW5kYXJkQ3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xyXG4vLyBjc3MgYm9vdHN0cmFwXHJcbmV4cG9ydCB7ZGVmYXVsdEJvb3RzdHJhcENzc30gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwXCI7XHJcblxyXG4vLyByZWFjdFxyXG5leHBvcnQge1N1cnZleX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5XCI7XHJcbmV4cG9ydCB7UmVhY3RTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjsgLy8gVE9ETyBuZWVkIHRvIHJlbW92ZSBzb21lZGF5XHJcbmV4cG9ydCB7UmVhY3RTdXJ2ZXlNb2RlbCBhcyBNb2RlbH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjtcclxuZXhwb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9uQmFzZX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcclxuZXhwb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9ufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uXCI7XHJcbmV4cG9ydCB7U3VydmV5UGFnZSwgU3VydmV5Um93fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RwYWdlXCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uRXJyb3JzfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xyXG5leHBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmVsZW1lbnRcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtLCBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnR9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uY29tbWVudFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uQ2hlY2tib3gsIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmNoZWNrYm94XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25Ecm9wZG93bn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25kcm9wZG93blwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24sIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25Sb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4ZHJvcGRvd25cIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbk1hdHJpeCwgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25IdG1sfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmh0bWxcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkZpbGV9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uZmlsZVwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dEl0ZW19IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubXVsdGlwbGV0ZXh0XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbnJhZGlvZ3JvdXBcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvblRleHR9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9udGV4dFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUm93fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGR5bmFtaWNcIjtcclxuZXhwb3J0IHtTdXJ2ZXlQcm9ncmVzc30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvblJhdGluZ30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25yYXRpbmdcIjtcclxuZXhwb3J0IHtTdXJ2ZXlXaW5kb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVdpbmRvd1wiO1xyXG5leHBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjsgLy8gVE9ETyBuZWVkIHRvIHJlbW92ZSBzb21lZGF5XHJcbmV4cG9ydCB7UmVhY3RRdWVzdGlvbkZhY3RvcnkgYXMgUXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXHJcbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFN1cnZleVF1ZXN0aW9uRGF0ZX0gZnJvbSBcIi4uL3BsdWdpbnMvcmVhY3QvcmVhY3RxdWVzdGlvbmRhdGVcIjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9yZWFjdC50cyIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWFpbi5zY3NzXG4vLyBtb2R1bGUgaWQgPSAzOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIhZnVuY3Rpb24oZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgJ29iamVjdCcgPT0gdHlwZW9mIGV4cG9ydHMgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIG1vZHVsZSA/IGZhY3RvcnkoZXhwb3J0cykgOiAnZnVuY3Rpb24nID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbICdleHBvcnRzJyBdLCBmYWN0b3J5KSA6IGZhY3RvcnkoZ2xvYmFsLnByZWFjdCA9IGdsb2JhbC5wcmVhY3QgfHwge30pO1xufSh0aGlzLCBmdW5jdGlvbihleHBvcnRzKSB7XG4gICAgZnVuY3Rpb24gVk5vZGUobm9kZU5hbWUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLmtleSA9IGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGgobm9kZU5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuLCBsYXN0U2ltcGxlLCBjaGlsZCwgc2ltcGxlLCBpO1xuICAgICAgICBmb3IgKGkgPSBhcmd1bWVudHMubGVuZ3RoOyBpLS0gPiAyOyApIHN0YWNrLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHN0YWNrLnB1c2goYXR0cmlidXRlcy5jaGlsZHJlbik7XG4gICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSBpZiAoKGNoaWxkID0gc3RhY2sucG9wKCkpIGluc3RhbmNlb2YgQXJyYXkpIGZvciAoaSA9IGNoaWxkLmxlbmd0aDsgaS0tOyApIHN0YWNrLnB1c2goY2hpbGRbaV0pOyBlbHNlIGlmIChudWxsICE9IGNoaWxkICYmIGNoaWxkICE9PSAhMCAmJiBjaGlsZCAhPT0gITEpIHtcbiAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PSB0eXBlb2YgY2hpbGQpIGNoaWxkID0gU3RyaW5nKGNoaWxkKTtcbiAgICAgICAgICAgIHNpbXBsZSA9ICdzdHJpbmcnID09IHR5cGVvZiBjaGlsZDtcbiAgICAgICAgICAgIGlmIChzaW1wbGUgJiYgbGFzdFNpbXBsZSkgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gKz0gY2hpbGQ7IGVsc2Uge1xuICAgICAgICAgICAgICAgIChjaGlsZHJlbiB8fCAoY2hpbGRyZW4gPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIGxhc3RTaW1wbGUgPSBzaW1wbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHAgPSBuZXcgVk5vZGUobm9kZU5hbWUsIGF0dHJpYnV0ZXMgfHwgdm9pZCAwLCBjaGlsZHJlbiB8fCBFTVBUWV9DSElMRFJFTik7XG4gICAgICAgIGlmIChvcHRpb25zLnZub2RlKSBvcHRpb25zLnZub2RlKHApO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0ZW5kKG9iaiwgcHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzKSBmb3IgKHZhciBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIG9iaik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbHZlKG9iaiwga2V5KSB7XG4gICAgICAgIGZvciAodmFyIHAgPSBrZXkuc3BsaXQoJy4nKSwgaSA9IDA7IGkgPCBwLmxlbmd0aCAmJiBvYmo7IGkrKykgb2JqID0gb2JqW3BbaV1dO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJyA9PSB0eXBlb2Ygb2JqO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnID09IHR5cGVvZiBvYmo7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc2hUb0NsYXNzTmFtZShjKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJztcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBjKSBpZiAoY1twcm9wXSkge1xuICAgICAgICAgICAgaWYgKHN0cikgc3RyICs9ICcgJztcbiAgICAgICAgICAgIHN0ciArPSBwcm9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudCh2bm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGgodm5vZGUubm9kZU5hbWUsIGV4dGVuZChjbG9uZSh2bm9kZS5hdHRyaWJ1dGVzKSwgcHJvcHMpLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IHZub2RlLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTGlua2VkU3RhdGUoY29tcG9uZW50LCBrZXksIGV2ZW50UGF0aCkge1xuICAgICAgICB2YXIgcGF0aCA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIHQgPSBlICYmIGUudGFyZ2V0IHx8IHRoaXMsIHN0YXRlID0ge30sIG9iaiA9IHN0YXRlLCB2ID0gaXNTdHJpbmcoZXZlbnRQYXRoKSA/IGRlbHZlKGUsIGV2ZW50UGF0aCkgOiB0Lm5vZGVOYW1lID8gdC50eXBlLm1hdGNoKC9eY2hlfHJhZC8pID8gdC5jaGVja2VkIDogdC52YWx1ZSA6IGUsIGkgPSAwO1xuICAgICAgICAgICAgZm9yICg7aSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSBvYmogPSBvYmpbcGF0aFtpXV0gfHwgKG9ialtwYXRoW2ldXSA9ICFpICYmIGNvbXBvbmVudC5zdGF0ZVtwYXRoW2ldXSB8fCB7fSk7XG4gICAgICAgICAgICBvYmpbcGF0aFtpXV0gPSB2O1xuICAgICAgICAgICAgY29tcG9uZW50LnNldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlcihjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQuX2RpcnR5ICYmIChjb21wb25lbnQuX2RpcnR5ID0gITApICYmIDEgPT0gaXRlbXMucHVzaChjb21wb25lbnQpKSAob3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZyB8fCBkZWZlcikocmVyZW5kZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlcigpIHtcbiAgICAgICAgdmFyIHAsIGxpc3QgPSBpdGVtcztcbiAgICAgICAgaXRlbXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHAgPSBsaXN0LnBvcCgpKSBpZiAocC5fZGlydHkpIHJlbmRlckNvbXBvbmVudChwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbmFsQ29tcG9uZW50KHZub2RlKSB7XG4gICAgICAgIHZhciBub2RlTmFtZSA9IHZub2RlICYmIHZub2RlLm5vZGVOYW1lO1xuICAgICAgICByZXR1cm4gbm9kZU5hbWUgJiYgaXNGdW5jdGlvbihub2RlTmFtZSkgJiYgIShub2RlTmFtZS5wcm90b3R5cGUgJiYgbm9kZU5hbWUucHJvdG90eXBlLnJlbmRlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25hbENvbXBvbmVudCh2bm9kZSwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdm5vZGUubm9kZU5hbWUoZ2V0Tm9kZVByb3BzKHZub2RlKSwgY29udGV4dCB8fCBFTVBUWSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2FtZU5vZGVUeXBlKG5vZGUsIHZub2RlKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh2bm9kZSkpIHJldHVybiBub2RlIGluc3RhbmNlb2YgVGV4dDtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZub2RlLm5vZGVOYW1lKSkgcmV0dXJuICFub2RlLl9jb21wb25lbnRDb25zdHJ1Y3RvciAmJiBpc05hbWVkTm9kZShub2RlLCB2bm9kZS5ub2RlTmFtZSk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZub2RlLm5vZGVOYW1lKSkgcmV0dXJuIChub2RlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA/IG5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZSA6ICEwKSB8fCBpc0Z1bmN0aW9uYWxDb21wb25lbnQodm5vZGUpOyBlbHNlIDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNOYW1lZE5vZGUobm9kZSwgbm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID09PSBub2RlTmFtZSB8fCB0b0xvd2VyQ2FzZShub2RlLm5vZGVOYW1lKSA9PT0gdG9Mb3dlckNhc2Uobm9kZU5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROb2RlUHJvcHModm5vZGUpIHtcbiAgICAgICAgdmFyIHByb3BzID0gY2xvbmUodm5vZGUuYXR0cmlidXRlcyk7XG4gICAgICAgIHByb3BzLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB2bm9kZS5ub2RlTmFtZS5kZWZhdWx0UHJvcHM7XG4gICAgICAgIGlmIChkZWZhdWx0UHJvcHMpIGZvciAodmFyIGkgaW4gZGVmYXVsdFByb3BzKSBpZiAodm9pZCAwID09PSBwcm9wc1tpXSkgcHJvcHNbaV0gPSBkZWZhdWx0UHJvcHNbaV07XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG4gICAgICAgIHZhciBwID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocCkgcC5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0QWNjZXNzb3Iobm9kZSwgbmFtZSwgb2xkLCB2YWx1ZSwgaXNTdmcpIHtcbiAgICAgICAgaWYgKCdjbGFzc05hbWUnID09PSBuYW1lKSBuYW1lID0gJ2NsYXNzJztcbiAgICAgICAgaWYgKCdjbGFzcycgPT09IG5hbWUgJiYgdmFsdWUgJiYgJ29iamVjdCcgPT0gdHlwZW9mIHZhbHVlKSB2YWx1ZSA9IGhhc2hUb0NsYXNzTmFtZSh2YWx1ZSk7XG4gICAgICAgIGlmICgna2V5JyA9PT0gbmFtZSkgOyBlbHNlIGlmICgnY2xhc3MnID09PSBuYW1lICYmICFpc1N2Zykgbm9kZS5jbGFzc05hbWUgPSB2YWx1ZSB8fCAnJzsgZWxzZSBpZiAoJ3N0eWxlJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNTdHJpbmcob2xkKSkgbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgfHwgJyc7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgJ29iamVjdCcgPT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZyhvbGQpKSBmb3IgKHZhciBpIGluIG9sZCkgaWYgKCEoaSBpbiB2YWx1ZSkpIG5vZGUuc3R5bGVbaV0gPSAnJztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHZhbHVlKSBub2RlLnN0eWxlW2ldID0gJ251bWJlcicgPT0gdHlwZW9mIHZhbHVlW2ldICYmICFOT05fRElNRU5TSU9OX1BST1BTW2ldID8gdmFsdWVbaV0gKyAncHgnIDogdmFsdWVbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSBub2RlLmlubmVySFRNTCA9IHZhbHVlLl9faHRtbCB8fCAnJztcbiAgICAgICAgfSBlbHNlIGlmICgnbycgPT0gbmFtZVswXSAmJiAnbicgPT0gbmFtZVsxXSkge1xuICAgICAgICAgICAgdmFyIGwgPSBub2RlLl9saXN0ZW5lcnMgfHwgKG5vZGUuX2xpc3RlbmVycyA9IHt9KTtcbiAgICAgICAgICAgIG5hbWUgPSB0b0xvd2VyQ2FzZShuYW1lLnN1YnN0cmluZygyKSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWxbbmFtZV0pIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBldmVudFByb3h5LCAhIU5PTl9CVUJCTElOR19FVkVOVFNbbmFtZV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsW25hbWVdKSBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZXZlbnRQcm94eSwgISFOT05fQlVCQkxJTkdfRVZFTlRTW25hbWVdKTtcbiAgICAgICAgICAgIGxbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgnbGlzdCcgIT09IG5hbWUgJiYgJ3R5cGUnICE9PSBuYW1lICYmICFpc1N2ZyAmJiBuYW1lIGluIG5vZGUpIHtcbiAgICAgICAgICAgIHNldFByb3BlcnR5KG5vZGUsIG5hbWUsIG51bGwgPT0gdmFsdWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChudWxsID09IHZhbHVlIHx8IHZhbHVlID09PSAhMSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbnMgPSBpc1N2ZyAmJiBuYW1lLm1hdGNoKC9eeGxpbmtcXDo/KC4rKS8pO1xuICAgICAgICAgICAgaWYgKG51bGwgPT0gdmFsdWUgfHwgdmFsdWUgPT09ICExKSBpZiAobnMpIG5vZGUucmVtb3ZlQXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0b0xvd2VyQ2FzZShuc1sxXSkpOyBlbHNlIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyBlbHNlIGlmICgnb2JqZWN0JyAhPSB0eXBlb2YgdmFsdWUgJiYgIWlzRnVuY3Rpb24odmFsdWUpKSBpZiAobnMpIG5vZGUuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0b0xvd2VyQ2FzZShuc1sxXSksIHZhbHVlKTsgZWxzZSBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gICAgZnVuY3Rpb24gZXZlbnRQcm94eShlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9saXN0ZW5lcnNbZS50eXBlXShvcHRpb25zLmV2ZW50ICYmIG9wdGlvbnMuZXZlbnQoZSkgfHwgZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbGxlY3ROb2RlKG5vZGUpIHtcbiAgICAgICAgcmVtb3ZlTm9kZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICBub2RlLl9jb21wb25lbnQgPSBub2RlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9IG51bGw7XG4gICAgICAgICAgICB2YXIgX25hbWUgPSBub2RlLm5vcm1hbGl6ZWROb2RlTmFtZSB8fCB0b0xvd2VyQ2FzZShub2RlLm5vZGVOYW1lKTtcbiAgICAgICAgICAgIChub2Rlc1tfbmFtZV0gfHwgKG5vZGVzW19uYW1lXSA9IFtdKSkucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVOb2RlKG5vZGVOYW1lLCBpc1N2Zykge1xuICAgICAgICB2YXIgbmFtZSA9IHRvTG93ZXJDYXNlKG5vZGVOYW1lKSwgbm9kZSA9IG5vZGVzW25hbWVdICYmIG5vZGVzW25hbWVdLnBvcCgpIHx8IChpc1N2ZyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBub2RlTmFtZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKSk7XG4gICAgICAgIG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID0gbmFtZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoTW91bnRzKCkge1xuICAgICAgICB2YXIgYztcbiAgICAgICAgd2hpbGUgKGMgPSBtb3VudHMucG9wKCkpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyTW91bnQpIG9wdGlvbnMuYWZ0ZXJNb3VudChjKTtcbiAgICAgICAgICAgIGlmIChjLmNvbXBvbmVudERpZE1vdW50KSBjLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZihkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCwgcGFyZW50LCBjb21wb25lbnRSb290KSB7XG4gICAgICAgIGlmICghZGlmZkxldmVsKyspIHtcbiAgICAgICAgICAgIGlzU3ZnTW9kZSA9IHBhcmVudCAmJiAndW5kZWZpbmVkJyAhPSB0eXBlb2YgcGFyZW50Lm93bmVyU1ZHRWxlbWVudDtcbiAgICAgICAgICAgIGh5ZHJhdGluZyA9IGRvbSAmJiAhKEFUVFJfS0VZIGluIGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJldCA9IGlkaWZmKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsKTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiByZXQucGFyZW50Tm9kZSAhPT0gcGFyZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQocmV0KTtcbiAgICAgICAgaWYgKCEtLWRpZmZMZXZlbCkge1xuICAgICAgICAgICAgaHlkcmF0aW5nID0gITE7XG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudFJvb3QpIGZsdXNoTW91bnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaWRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpIHtcbiAgICAgICAgdmFyIHJlZiA9IHZub2RlICYmIHZub2RlLmF0dHJpYnV0ZXMgJiYgdm5vZGUuYXR0cmlidXRlcy5yZWY7XG4gICAgICAgIHdoaWxlIChpc0Z1bmN0aW9uYWxDb21wb25lbnQodm5vZGUpKSB2bm9kZSA9IGJ1aWxkRnVuY3Rpb25hbENvbXBvbmVudCh2bm9kZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChudWxsID09IHZub2RlKSB2bm9kZSA9ICcnO1xuICAgICAgICBpZiAoaXNTdHJpbmcodm5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoZG9tICYmIGRvbSBpbnN0YW5jZW9mIFRleHQgJiYgZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9tLm5vZGVWYWx1ZSAhPSB2bm9kZSkgZG9tLm5vZGVWYWx1ZSA9IHZub2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9tKSByZWNvbGxlY3ROb2RlVHJlZShkb20pO1xuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb207XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odm5vZGUubm9kZU5hbWUpKSByZXR1cm4gYnVpbGRDb21wb25lbnRGcm9tVk5vZGUoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpO1xuICAgICAgICB2YXIgb3V0ID0gZG9tLCBub2RlTmFtZSA9IFN0cmluZyh2bm9kZS5ub2RlTmFtZSksIHByZXZTdmdNb2RlID0gaXNTdmdNb2RlLCB2Y2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgaXNTdmdNb2RlID0gJ3N2ZycgPT09IG5vZGVOYW1lID8gITAgOiAnZm9yZWlnbk9iamVjdCcgPT09IG5vZGVOYW1lID8gITEgOiBpc1N2Z01vZGU7XG4gICAgICAgIGlmICghZG9tKSBvdXQgPSBjcmVhdGVOb2RlKG5vZGVOYW1lLCBpc1N2Z01vZGUpOyBlbHNlIGlmICghaXNOYW1lZE5vZGUoZG9tLCBub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIG91dCA9IGNyZWF0ZU5vZGUobm9kZU5hbWUsIGlzU3ZnTW9kZSk7XG4gICAgICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIG91dC5hcHBlbmRDaGlsZChkb20uZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICBpZiAoZG9tLnBhcmVudE5vZGUpIGRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChvdXQsIGRvbSk7XG4gICAgICAgICAgICByZWNvbGxlY3ROb2RlVHJlZShkb20pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmYyA9IG91dC5maXJzdENoaWxkLCBwcm9wcyA9IG91dFtBVFRSX0tFWV07XG4gICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgIG91dFtBVFRSX0tFWV0gPSBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IG91dC5hdHRyaWJ1dGVzLCBpID0gYS5sZW5ndGg7IGktLTsgKSBwcm9wc1thW2ldLm5hbWVdID0gYVtpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWh5ZHJhdGluZyAmJiB2Y2hpbGRyZW4gJiYgMSA9PT0gdmNoaWxkcmVuLmxlbmd0aCAmJiAnc3RyaW5nJyA9PSB0eXBlb2YgdmNoaWxkcmVuWzBdICYmIGZjICYmIGZjIGluc3RhbmNlb2YgVGV4dCAmJiAhZmMubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgIGlmIChmYy5ub2RlVmFsdWUgIT0gdmNoaWxkcmVuWzBdKSBmYy5ub2RlVmFsdWUgPSB2Y2hpbGRyZW5bMF07XG4gICAgICAgIH0gZWxzZSBpZiAodmNoaWxkcmVuICYmIHZjaGlsZHJlbi5sZW5ndGggfHwgZmMpIGlubmVyRGlmZk5vZGUob3V0LCB2Y2hpbGRyZW4sIGNvbnRleHQsIG1vdW50QWxsLCAhIXByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKTtcbiAgICAgICAgZGlmZkF0dHJpYnV0ZXMob3V0LCB2bm9kZS5hdHRyaWJ1dGVzLCBwcm9wcyk7XG4gICAgICAgIGlmIChyZWYpIChwcm9wcy5yZWYgPSByZWYpKG91dCk7XG4gICAgICAgIGlzU3ZnTW9kZSA9IHByZXZTdmdNb2RlO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbm5lckRpZmZOb2RlKGRvbSwgdmNoaWxkcmVuLCBjb250ZXh0LCBtb3VudEFsbCwgYWJzb3JiKSB7XG4gICAgICAgIHZhciBqLCBjLCB2Y2hpbGQsIGNoaWxkLCBvcmlnaW5hbENoaWxkcmVuID0gZG9tLmNoaWxkTm9kZXMsIGNoaWxkcmVuID0gW10sIGtleWVkID0ge30sIGtleWVkTGVuID0gMCwgbWluID0gMCwgbGVuID0gb3JpZ2luYWxDaGlsZHJlbi5sZW5ndGgsIGNoaWxkcmVuTGVuID0gMCwgdmxlbiA9IHZjaGlsZHJlbiAmJiB2Y2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBpZiAobGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgX2NoaWxkID0gb3JpZ2luYWxDaGlsZHJlbltpXSwgcHJvcHMgPSBfY2hpbGRbQVRUUl9LRVldLCBrZXkgPSB2bGVuID8gKGMgPSBfY2hpbGQuX2NvbXBvbmVudCkgPyBjLl9fa2V5IDogcHJvcHMgPyBwcm9wcy5rZXkgOiBudWxsIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChudWxsICE9IGtleSkge1xuICAgICAgICAgICAgICAgIGtleWVkTGVuKys7XG4gICAgICAgICAgICAgICAga2V5ZWRba2V5XSA9IF9jaGlsZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHlkcmF0aW5nIHx8IGFic29yYiB8fCBwcm9wcyB8fCBfY2hpbGQgaW5zdGFuY2VvZiBUZXh0KSBjaGlsZHJlbltjaGlsZHJlbkxlbisrXSA9IF9jaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmxlbikgZm9yICh2YXIgaSA9IDA7IGkgPCB2bGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZjaGlsZCA9IHZjaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNoaWxkID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBrZXkgPSB2Y2hpbGQua2V5O1xuICAgICAgICAgICAgaWYgKG51bGwgIT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleWVkTGVuICYmIGtleSBpbiBrZXllZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGtleWVkW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGtleWVkW2tleV0gPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIGtleWVkTGVuLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2hpbGQgJiYgbWluIDwgY2hpbGRyZW5MZW4pIGZvciAoaiA9IG1pbjsgaiA8IGNoaWxkcmVuTGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICAgICAgaWYgKGMgJiYgaXNTYW1lTm9kZVR5cGUoYywgdmNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2pdID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PT0gY2hpbGRyZW5MZW4gLSAxKSBjaGlsZHJlbkxlbi0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PT0gbWluKSBtaW4rKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQgPSBpZGlmZihjaGlsZCwgdmNoaWxkLCBjb250ZXh0LCBtb3VudEFsbCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQgIT09IGRvbSkgaWYgKGkgPj0gbGVuKSBkb20uYXBwZW5kQ2hpbGQoY2hpbGQpOyBlbHNlIGlmIChjaGlsZCAhPT0gb3JpZ2luYWxDaGlsZHJlbltpXSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PT0gb3JpZ2luYWxDaGlsZHJlbltpICsgMV0pIHJlbW92ZU5vZGUob3JpZ2luYWxDaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgZG9tLmluc2VydEJlZm9yZShjaGlsZCwgb3JpZ2luYWxDaGlsZHJlbltpXSB8fCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ZWRMZW4pIGZvciAodmFyIGkgaW4ga2V5ZWQpIGlmIChrZXllZFtpXSkgcmVjb2xsZWN0Tm9kZVRyZWUoa2V5ZWRbaV0pO1xuICAgICAgICB3aGlsZSAobWluIDw9IGNoaWxkcmVuTGVuKSB7XG4gICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW2NoaWxkcmVuTGVuLS1dO1xuICAgICAgICAgICAgaWYgKGNoaWxkKSByZWNvbGxlY3ROb2RlVHJlZShjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb2xsZWN0Tm9kZVRyZWUobm9kZSwgdW5tb3VudE9ubHkpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IG5vZGUuX2NvbXBvbmVudDtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkgdW5tb3VudENvbXBvbmVudChjb21wb25lbnQsICF1bm1vdW50T25seSk7IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vZGVbQVRUUl9LRVldICYmIG5vZGVbQVRUUl9LRVldLnJlZikgbm9kZVtBVFRSX0tFWV0ucmVmKG51bGwpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50T25seSkgY29sbGVjdE5vZGUobm9kZSk7XG4gICAgICAgICAgICB2YXIgYztcbiAgICAgICAgICAgIHdoaWxlIChjID0gbm9kZS5sYXN0Q2hpbGQpIHJlY29sbGVjdE5vZGVUcmVlKGMsIHVubW91bnRPbmx5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmQXR0cmlidXRlcyhkb20sIGF0dHJzLCBvbGQpIHtcbiAgICAgICAgdmFyIG5hbWU7XG4gICAgICAgIGZvciAobmFtZSBpbiBvbGQpIGlmICghKGF0dHJzICYmIG5hbWUgaW4gYXR0cnMpICYmIG51bGwgIT0gb2xkW25hbWVdKSBzZXRBY2Nlc3Nvcihkb20sIG5hbWUsIG9sZFtuYW1lXSwgb2xkW25hbWVdID0gdm9pZCAwLCBpc1N2Z01vZGUpO1xuICAgICAgICBpZiAoYXR0cnMpIGZvciAobmFtZSBpbiBhdHRycykgaWYgKCEoJ2NoaWxkcmVuJyA9PT0gbmFtZSB8fCAnaW5uZXJIVE1MJyA9PT0gbmFtZSB8fCBuYW1lIGluIG9sZCAmJiBhdHRyc1tuYW1lXSA9PT0gKCd2YWx1ZScgPT09IG5hbWUgfHwgJ2NoZWNrZWQnID09PSBuYW1lID8gZG9tW25hbWVdIDogb2xkW25hbWVdKSkpIHNldEFjY2Vzc29yKGRvbSwgbmFtZSwgb2xkW25hbWVdLCBvbGRbbmFtZV0gPSBhdHRyc1tuYW1lXSwgaXNTdmdNb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sbGVjdENvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IubmFtZSwgbGlzdCA9IGNvbXBvbmVudHNbbmFtZV07XG4gICAgICAgIGlmIChsaXN0KSBsaXN0LnB1c2goY29tcG9uZW50KTsgZWxzZSBjb21wb25lbnRzW25hbWVdID0gWyBjb21wb25lbnQgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50KEN0b3IsIHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBpbnN0ID0gbmV3IEN0b3IocHJvcHMsIGNvbnRleHQpLCBsaXN0ID0gY29tcG9uZW50c1tDdG9yLm5hbWVdO1xuICAgICAgICBDb21wb25lbnQuY2FsbChpbnN0LCBwcm9wcywgY29udGV4dCk7XG4gICAgICAgIGlmIChsaXN0KSBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGg7IGktLTsgKSBpZiAobGlzdFtpXS5jb25zdHJ1Y3RvciA9PT0gQ3Rvcikge1xuICAgICAgICAgICAgaW5zdC5uZXh0QmFzZSA9IGxpc3RbaV0ubmV4dEJhc2U7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDb21wb25lbnRQcm9wcyhjb21wb25lbnQsIHByb3BzLCBvcHRzLCBjb250ZXh0LCBtb3VudEFsbCkge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5fZGlzYWJsZSkge1xuICAgICAgICAgICAgY29tcG9uZW50Ll9kaXNhYmxlID0gITA7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9fcmVmID0gcHJvcHMucmVmKSBkZWxldGUgcHJvcHMucmVmO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5fX2tleSA9IHByb3BzLmtleSkgZGVsZXRlIHByb3BzLmtleTtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50LmJhc2UgfHwgbW91bnRBbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxNb3VudCkgY29tcG9uZW50LmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykgY29tcG9uZW50LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMsIGNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dCAhPT0gY29tcG9uZW50LmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudC5wcmV2Q29udGV4dCkgY29tcG9uZW50LnByZXZDb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQucHJldlByb3BzKSBjb21wb25lbnQucHJldlByb3BzID0gY29tcG9uZW50LnByb3BzO1xuICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcHJvcHM7XG4gICAgICAgICAgICBjb21wb25lbnQuX2Rpc2FibGUgPSAhMTtcbiAgICAgICAgICAgIGlmICgwICE9PSBvcHRzKSBpZiAoMSA9PT0gb3B0cyB8fCBvcHRpb25zLnN5bmNDb21wb25lbnRVcGRhdGVzICE9PSAhMSB8fCAhY29tcG9uZW50LmJhc2UpIHJlbmRlckNvbXBvbmVudChjb21wb25lbnQsIDEsIG1vdW50QWxsKTsgZWxzZSBlbnF1ZXVlUmVuZGVyKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYoY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJDb21wb25lbnQoY29tcG9uZW50LCBvcHRzLCBtb3VudEFsbCwgaXNDaGlsZCkge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5fZGlzYWJsZSkge1xuICAgICAgICAgICAgdmFyIHNraXAsIHJlbmRlcmVkLCBpbnN0LCBjYmFzZSwgcHJvcHMgPSBjb21wb25lbnQucHJvcHMsIHN0YXRlID0gY29tcG9uZW50LnN0YXRlLCBjb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQsIHByZXZpb3VzUHJvcHMgPSBjb21wb25lbnQucHJldlByb3BzIHx8IHByb3BzLCBwcmV2aW91c1N0YXRlID0gY29tcG9uZW50LnByZXZTdGF0ZSB8fCBzdGF0ZSwgcHJldmlvdXNDb250ZXh0ID0gY29tcG9uZW50LnByZXZDb250ZXh0IHx8IGNvbnRleHQsIGlzVXBkYXRlID0gY29tcG9uZW50LmJhc2UsIG5leHRCYXNlID0gY29tcG9uZW50Lm5leHRCYXNlLCBpbml0aWFsQmFzZSA9IGlzVXBkYXRlIHx8IG5leHRCYXNlLCBpbml0aWFsQ2hpbGRDb21wb25lbnQgPSBjb21wb25lbnQuX2NvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChpc1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyA9IHByZXZpb3VzUHJvcHM7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnN0YXRlID0gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuY29udGV4dCA9IHByZXZpb3VzQ29udGV4dDtcbiAgICAgICAgICAgICAgICBpZiAoMiAhPT0gb3B0cyAmJiBjb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlICYmIGNvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGUocHJvcHMsIHN0YXRlLCBjb250ZXh0KSA9PT0gITEpIHNraXAgPSAhMDsgZWxzZSBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGUpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlKHByb3BzLCBzdGF0ZSwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcHJvcHM7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50LnByZXZQcm9wcyA9IGNvbXBvbmVudC5wcmV2U3RhdGUgPSBjb21wb25lbnQucHJldkNvbnRleHQgPSBjb21wb25lbnQubmV4dEJhc2UgPSBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50Ll9kaXJ0eSA9ICExO1xuICAgICAgICAgICAgaWYgKCFza2lwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5yZW5kZXIpIHJlbmRlcmVkID0gY29tcG9uZW50LnJlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KSBjb250ZXh0ID0gZXh0ZW5kKGNsb25lKGNvbnRleHQpLCBjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KCkpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpc0Z1bmN0aW9uYWxDb21wb25lbnQocmVuZGVyZWQpKSByZW5kZXJlZCA9IGJ1aWxkRnVuY3Rpb25hbENvbXBvbmVudChyZW5kZXJlZCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgdmFyIHRvVW5tb3VudCwgYmFzZSwgY2hpbGRDb21wb25lbnQgPSByZW5kZXJlZCAmJiByZW5kZXJlZC5ub2RlTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjaGlsZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkUHJvcHMgPSBnZXROb2RlUHJvcHMocmVuZGVyZWQpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0ID0gaW5pdGlhbENoaWxkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdCAmJiBpbnN0LmNvbnN0cnVjdG9yID09PSBjaGlsZENvbXBvbmVudCAmJiBjaGlsZFByb3BzLmtleSA9PSBpbnN0Ll9fa2V5KSBzZXRDb21wb25lbnRQcm9wcyhpbnN0LCBjaGlsZFByb3BzLCAxLCBjb250ZXh0KTsgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1VubW91bnQgPSBpbnN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCA9IGNyZWF0ZUNvbXBvbmVudChjaGlsZENvbXBvbmVudCwgY2hpbGRQcm9wcywgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0Lm5leHRCYXNlID0gaW5zdC5uZXh0QmFzZSB8fCBuZXh0QmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuX3BhcmVudENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fY29tcG9uZW50ID0gaW5zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbXBvbmVudFByb3BzKGluc3QsIGNoaWxkUHJvcHMsIDAsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQ29tcG9uZW50KGluc3QsIDEsIG1vdW50QWxsLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGluc3QuYmFzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYmFzZSA9IGluaXRpYWxCYXNlO1xuICAgICAgICAgICAgICAgICAgICB0b1VubW91bnQgPSBpbml0aWFsQ2hpbGRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b1VubW91bnQpIGNiYXNlID0gY29tcG9uZW50Ll9jb21wb25lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbEJhc2UgfHwgMSA9PT0gb3B0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNiYXNlKSBjYmFzZS5fY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBkaWZmKGNiYXNlLCByZW5kZXJlZCwgY29udGV4dCwgbW91bnRBbGwgfHwgIWlzVXBkYXRlLCBpbml0aWFsQmFzZSAmJiBpbml0aWFsQmFzZS5wYXJlbnROb2RlLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGluaXRpYWxCYXNlICYmIGJhc2UgIT09IGluaXRpYWxCYXNlICYmIGluc3QgIT09IGluaXRpYWxDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVBhcmVudCA9IGluaXRpYWxCYXNlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFyZW50ICYmIGJhc2UgIT09IGJhc2VQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXJlbnQucmVwbGFjZUNoaWxkKGJhc2UsIGluaXRpYWxCYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9Vbm1vdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEJhc2UuX2NvbXBvbmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2xsZWN0Tm9kZVRyZWUoaW5pdGlhbEJhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0b1VubW91bnQpIHVubW91bnRDb21wb25lbnQodG9Vbm1vdW50LCBiYXNlICE9PSBpbml0aWFsQmFzZSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgIGlmIChiYXNlICYmICFpc0NoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRSZWYgPSBjb21wb25lbnQsIHQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0ID0gdC5fcGFyZW50Q29tcG9uZW50KSAoY29tcG9uZW50UmVmID0gdCkuYmFzZSA9IGJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UuX2NvbXBvbmVudCA9IGNvbXBvbmVudFJlZjtcbiAgICAgICAgICAgICAgICAgICAgYmFzZS5fY29tcG9uZW50Q29uc3RydWN0b3IgPSBjb21wb25lbnRSZWYuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1VwZGF0ZSB8fCBtb3VudEFsbCkgbW91bnRzLnVuc2hpZnQoY29tcG9uZW50KTsgZWxzZSBpZiAoIXNraXApIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZSkgY29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZShwcmV2aW91c1Byb3BzLCBwcmV2aW91c1N0YXRlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyVXBkYXRlKSBvcHRpb25zLmFmdGVyVXBkYXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZm4sIGNiID0gY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3M7XG4gICAgICAgICAgICBpZiAoY2IpIHdoaWxlIChmbiA9IGNiLnBvcCgpKSBmbi5jYWxsKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAoIWRpZmZMZXZlbCAmJiAhaXNDaGlsZCkgZmx1c2hNb3VudHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZENvbXBvbmVudEZyb21WTm9kZShkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCkge1xuICAgICAgICB2YXIgYyA9IGRvbSAmJiBkb20uX2NvbXBvbmVudCwgb3JpZ2luYWxDb21wb25lbnQgPSBjLCBvbGREb20gPSBkb20sIGlzRGlyZWN0T3duZXIgPSBjICYmIGRvbS5fY29tcG9uZW50Q29uc3RydWN0b3IgPT09IHZub2RlLm5vZGVOYW1lLCBpc093bmVyID0gaXNEaXJlY3RPd25lciwgcHJvcHMgPSBnZXROb2RlUHJvcHModm5vZGUpO1xuICAgICAgICB3aGlsZSAoYyAmJiAhaXNPd25lciAmJiAoYyA9IGMuX3BhcmVudENvbXBvbmVudCkpIGlzT3duZXIgPSBjLmNvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZTtcbiAgICAgICAgaWYgKGMgJiYgaXNPd25lciAmJiAoIW1vdW50QWxsIHx8IGMuX2NvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAzLCBjb250ZXh0LCBtb3VudEFsbCk7XG4gICAgICAgICAgICBkb20gPSBjLmJhc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxDb21wb25lbnQgJiYgIWlzRGlyZWN0T3duZXIpIHtcbiAgICAgICAgICAgICAgICB1bm1vdW50Q29tcG9uZW50KG9yaWdpbmFsQ29tcG9uZW50LCAhMCk7XG4gICAgICAgICAgICAgICAgZG9tID0gb2xkRG9tID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGMgPSBjcmVhdGVDb21wb25lbnQodm5vZGUubm9kZU5hbWUsIHByb3BzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChkb20gJiYgIWMubmV4dEJhc2UpIHtcbiAgICAgICAgICAgICAgICBjLm5leHRCYXNlID0gZG9tO1xuICAgICAgICAgICAgICAgIG9sZERvbSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDb21wb25lbnRQcm9wcyhjLCBwcm9wcywgMSwgY29udGV4dCwgbW91bnRBbGwpO1xuICAgICAgICAgICAgZG9tID0gYy5iYXNlO1xuICAgICAgICAgICAgaWYgKG9sZERvbSAmJiBkb20gIT09IG9sZERvbSkge1xuICAgICAgICAgICAgICAgIG9sZERvbS5fY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZWNvbGxlY3ROb2RlVHJlZShvbGREb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb207XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVubW91bnRDb21wb25lbnQoY29tcG9uZW50LCByZW1vdmUpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlVW5tb3VudCkgb3B0aW9ucy5iZWZvcmVVbm1vdW50KGNvbXBvbmVudCk7XG4gICAgICAgIHZhciBiYXNlID0gY29tcG9uZW50LmJhc2U7XG4gICAgICAgIGNvbXBvbmVudC5fZGlzYWJsZSA9ICEwO1xuICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxVbm1vdW50KSBjb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgICAgY29tcG9uZW50LmJhc2UgPSBudWxsO1xuICAgICAgICB2YXIgaW5uZXIgPSBjb21wb25lbnQuX2NvbXBvbmVudDtcbiAgICAgICAgaWYgKGlubmVyKSB1bm1vdW50Q29tcG9uZW50KGlubmVyLCByZW1vdmUpOyBlbHNlIGlmIChiYXNlKSB7XG4gICAgICAgICAgICBpZiAoYmFzZVtBVFRSX0tFWV0gJiYgYmFzZVtBVFRSX0tFWV0ucmVmKSBiYXNlW0FUVFJfS0VZXS5yZWYobnVsbCk7XG4gICAgICAgICAgICBjb21wb25lbnQubmV4dEJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoYmFzZSk7XG4gICAgICAgICAgICAgICAgY29sbGVjdENvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGM7XG4gICAgICAgICAgICB3aGlsZSAoYyA9IGJhc2UubGFzdENoaWxkKSByZWNvbGxlY3ROb2RlVHJlZShjLCAhcmVtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYobnVsbCk7XG4gICAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkVW5tb3VudCkgY29tcG9uZW50LmNvbXBvbmVudERpZFVubW91bnQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gITA7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlKSB0aGlzLnN0YXRlID0ge307XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcih2bm9kZSwgcGFyZW50LCBtZXJnZSkge1xuICAgICAgICByZXR1cm4gZGlmZihtZXJnZSwgdm5vZGUsIHt9LCAhMSwgcGFyZW50KTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgRU1QVFlfQ0hJTERSRU4gPSBbXTtcbiAgICB2YXIgbGNDYWNoZSA9IHt9O1xuICAgIHZhciB0b0xvd2VyQ2FzZSA9IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGxjQ2FjaGVbc10gfHwgKGxjQ2FjaGVbc10gPSBzLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG4gICAgdmFyIHJlc29sdmVkID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdmFyIGRlZmVyID0gcmVzb2x2ZWQgPyBmdW5jdGlvbihmKSB7XG4gICAgICAgIHJlc29sdmVkLnRoZW4oZik7XG4gICAgfSA6IHNldFRpbWVvdXQ7XG4gICAgdmFyIEVNUFRZID0ge307XG4gICAgdmFyIEFUVFJfS0VZID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbC5mb3IoJ3ByZWFjdGF0dHInKSA6ICdfX3ByZWFjdGF0dHJfJztcbiAgICB2YXIgTk9OX0RJTUVOU0lPTl9QUk9QUyA9IHtcbiAgICAgICAgYm94RmxleDogMSxcbiAgICAgICAgYm94RmxleEdyb3VwOiAxLFxuICAgICAgICBjb2x1bW5Db3VudDogMSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IDEsXG4gICAgICAgIGZsZXg6IDEsXG4gICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICBmbGV4UG9zaXRpdmU6IDEsXG4gICAgICAgIGZsZXhTaHJpbms6IDEsXG4gICAgICAgIGZsZXhOZWdhdGl2ZTogMSxcbiAgICAgICAgZm9udFdlaWdodDogMSxcbiAgICAgICAgbGluZUNsYW1wOiAxLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgb3JwaGFuczogMSxcbiAgICAgICAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgICAgICAgd2lkb3dzOiAxLFxuICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgIHpvb206IDFcbiAgICB9O1xuICAgIHZhciBOT05fQlVCQkxJTkdfRVZFTlRTID0ge1xuICAgICAgICBibHVyOiAxLFxuICAgICAgICBlcnJvcjogMSxcbiAgICAgICAgZm9jdXM6IDEsXG4gICAgICAgIGxvYWQ6IDEsXG4gICAgICAgIHJlc2l6ZTogMSxcbiAgICAgICAgc2Nyb2xsOiAxXG4gICAgfTtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgbm9kZXMgPSB7fTtcbiAgICB2YXIgbW91bnRzID0gW107XG4gICAgdmFyIGRpZmZMZXZlbCA9IDA7XG4gICAgdmFyIGlzU3ZnTW9kZSA9ICExO1xuICAgIHZhciBoeWRyYXRpbmcgPSAhMTtcbiAgICB2YXIgY29tcG9uZW50cyA9IHt9O1xuICAgIGV4dGVuZChDb21wb25lbnQucHJvdG90eXBlLCB7XG4gICAgICAgIGxpbmtTdGF0ZTogZnVuY3Rpb24oa2V5LCBldmVudFBhdGgpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5fbGlua2VkU3RhdGVzIHx8ICh0aGlzLl9saW5rZWRTdGF0ZXMgPSB7fSk7XG4gICAgICAgICAgICByZXR1cm4gY1trZXkgKyBldmVudFBhdGhdIHx8IChjW2tleSArIGV2ZW50UGF0aF0gPSBjcmVhdGVMaW5rZWRTdGF0ZSh0aGlzLCBrZXksIGV2ZW50UGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTdGF0ZTogZnVuY3Rpb24oc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJldlN0YXRlKSB0aGlzLnByZXZTdGF0ZSA9IGNsb25lKHMpO1xuICAgICAgICAgICAgZXh0ZW5kKHMsIGlzRnVuY3Rpb24oc3RhdGUpID8gc3RhdGUocywgdGhpcy5wcm9wcykgOiBzdGF0ZSk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spICh0aGlzLl9yZW5kZXJDYWxsYmFja3MgPSB0aGlzLl9yZW5kZXJDYWxsYmFja3MgfHwgW10pLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgZW5xdWV1ZVJlbmRlcih0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmVuZGVyQ29tcG9uZW50KHRoaXMsIDIpO1xuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge31cbiAgICB9KTtcbiAgICBleHBvcnRzLmggPSBoO1xuICAgIGV4cG9ydHMuY2xvbmVFbGVtZW50ID0gY2xvbmVFbGVtZW50O1xuICAgIGV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuICAgIGV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuICAgIGV4cG9ydHMucmVyZW5kZXIgPSByZXJlbmRlcjtcbiAgICBleHBvcnRzLm9wdGlvbnMgPSBvcHRpb25zO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QuanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3ByZWFjdC9kaXN0L3ByZWFjdC5qc1xuLy8gbW9kdWxlIGlkID0gMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ1Byb3BUeXBlcycsIFsnZXhwb3J0cycsICdtb2R1bGUnXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZmFjdG9yeShleHBvcnRzLCBtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QuZXhwb3J0cywgbW9kKTtcbiAgICBnbG9iYWwuUHJvcFR5cGVzID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzLCBtb2R1bGUpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2ZvciddKCdyZWFjdC5lbGVtZW50JykgfHwgMHhlYWM3O1xuXG4gIHZhciBSZWFjdEVsZW1lbnQgPSB7fTtcblxuICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICB2YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xuXG4gIHZhciBlbXB0eUZ1bmN0aW9uID0ge1xuICAgIHRoYXRSZXR1cm5zOiBmdW5jdGlvbiB0aGF0UmV0dXJucyh3aGF0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gd2hhdDtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlclxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignUmVxdWlyZWQgJyArIGxvY2F0aW9uTmFtZSArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCB3YXMgbm90IHNwZWNpZmllZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMobnVsbCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb25OYW1lICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nKTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IGV4cGVjdGVkVmFsdWVzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcyk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBwcm9wVmFsdWUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uTmFtZSArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb25OYW1lICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uTmFtZSArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlcztcbn0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcHJvcHR5cGVzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQge3N1cnZleUNzc30gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcclxuXHJcbmV4cG9ydCB2YXIgZGVmYXVsdEJvb3RzdHJhcENzcyA9IHtcclxuICAgIHJvb3Q6IFwiXCIsXHJcbiAgICBoZWFkZXI6IFwicGFuZWwtaGVhZGluZ1wiLFxyXG4gICAgYm9keTogXCJwYW5lbC1ib2R5XCIsXHJcbiAgICBmb290ZXI6IFwicGFuZWwtZm9vdGVyXCIsXHJcbiAgICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLCBuYXZpZ2F0aW9uOiB7IGNvbXBsZXRlOiBcIlwiLCBwcmV2OiBcIlwiLCBuZXh0OiBcIlwiIH0sXHJcbiAgICBwcm9ncmVzczogXCJwcm9ncmVzcyBjZW50ZXItYmxvY2tcIiwgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXHJcbiAgICBwYWdlVGl0bGU6IFwiXCIsXHJcbiAgICByb3c6IFwiXCIsXHJcbiAgICBxdWVzdGlvbjogeyByb290OiBcIlwiLCB0aXRsZTogXCJcIiwgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIiwgaW5kZW50OiAyMCB9LFxyXG4gICAgZXJyb3I6IHsgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIiwgaWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ25cIiwgaXRlbTogXCJcIiB9LFxyXG5cclxuICAgIGNoZWNrYm94OiB7IHJvb3Q6IFwiZm9ybS1pbmxpbmVcIiwgaXRlbTogXCJjaGVja2JveFwiLCBvdGhlcjogXCJcIiB9LFxyXG4gICAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcclxuICAgIGRyb3Bkb3duOiB7IHJvb3Q6IFwiXCIsIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sXCIgfSxcclxuICAgIG1hdHJpeDogeyByb290OiBcInRhYmxlXCIgfSxcclxuICAgIG1hdHJpeGRyb3Bkb3duOiB7IHJvb3Q6IFwidGFibGVcIiB9LFxyXG4gICAgbWF0cml4ZHluYW1pYzogeyByb290OiBcInRhYmxlXCIsIGJ1dHRvbjogXCJidXR0b25cIiB9LFxyXG4gICAgbXVsdGlwbGV0ZXh0OiB7IHJvb3Q6IFwidGFibGVcIiwgaXRlbVRpdGxlOiBcIlwiLCBpdGVtVmFsdWU6IFwiZm9ybS1jb250cm9sXCIgfSxcclxuICAgIHJhZGlvZ3JvdXA6IHsgcm9vdDogXCJmb3JtLWlubGluZVwiLCBpdGVtOiBcInJhZGlvXCIsIGxhYmVsOiBcIlwiLCBvdGhlcjogXCJcIiB9LFxyXG4gICAgcmF0aW5nOiB7IHJvb3Q6IFwiYnRuLWdyb3VwXCIsIGl0ZW06IFwiYnRuIGJ0bi1kZWZhdWx0XCIgfSxcclxuICAgIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXHJcbiAgICB3aW5kb3c6IHtcclxuICAgICAgICByb290OiBcIm1vZGFsLWNvbnRlbnRcIiwgYm9keTogXCJtb2RhbC1ib2R5XCIsXHJcbiAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgIHJvb3Q6IFwibW9kYWwtaGVhZGVyIHBhbmVsLXRpdGxlXCIsIHRpdGxlOiBcInB1bGwtbGVmdFwiLCBidXR0b246IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHRcIixcclxuICAgICAgICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tdXBcIiwgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuc3VydmV5Q3NzW1wiYm9vdHN0cmFwXCJdID0gZGVmYXVsdEJvb3RzdHJhcENzcztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXAudHMiLCJpbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9jemVjaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2RhbmlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2R1dGNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZmlubmlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2ZyZW5jaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2dlcm1hbic7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2dyZWVrJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vcG9saXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vcm9tYW5pYW4nO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9ydXNzaWFuJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vc3dlZGlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3R1cmtpc2gnO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMiLCIvLyBzdHlsZXNcclxuaW1wb3J0IFwiLi4vLi4vbWFpbi5zY3NzXCI7XHJcblxyXG5leHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcclxuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBBbnN3ZXJDb3VudFZhbGlkYXRvciwgRW1haWxWYWxpZGF0b3IsIE51bWVyaWNWYWxpZGF0b3IsIFJlZ2V4VmFsaWRhdG9yLFxyXG4gICAgU3VydmV5VmFsaWRhdG9yLCBUZXh0VmFsaWRhdG9yLCBWYWxpZGF0b3JSZXN1bHQsIFZhbGlkYXRvclJ1bm5lclxyXG59IGZyb20gXCIuLi8uLi92YWxpZGF0b3JcIjtcclxuZXhwb3J0IHtCYXNlLCBFdmVudCwgU3VydmV5RXJyb3IsIElTdXJ2ZXl9IGZyb20gXCIuLi8uLi9iYXNlXCI7XHJcbmV4cG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi4vLi4vaXRlbXZhbHVlXCI7XHJcbmV4cG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi4vLi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuZXhwb3J0IHtDaG9pY2VzUmVzdGZ1bGx9IGZyb20gXCIuLi8uLi9jaG9pY2VzUmVzdGZ1bGxcIjtcclxuZXhwb3J0IHtDb25kaXRpb24sIENvbmRpdGlvbk5vZGUsIENvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvbnNcIjtcclxuZXhwb3J0IHtDb25kaXRpb25zUGFyc2VyfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uc1BhcnNlclwiO1xyXG5leHBvcnQge1Byb2Nlc3NWYWx1ZX0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xyXG5leHBvcnQge0N1c3RvbUVycm9yLCBFeGNlZWRTaXplRXJyb3IsIFJlcXVyZU51bWVyaWNFcnJvcn0gZnJvbSBcIi4uLy4uL2Vycm9yXCI7XHJcbmV4cG9ydCB7XHJcbiAgICBKc29uRXJyb3IsIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsIEpzb25NZXRhZGF0YSwgSnNvbk1ldGFkYXRhQ2xhc3MsXHJcbiAgICBKc29uTWlzc2luZ1R5cGVFcnJvciwgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlLCBKc29uT2JqZWN0LCBKc29uT2JqZWN0UHJvcGVydHksXHJcbiAgICBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yLCBKc29uVW5rbm93blByb3BlcnR5RXJyb3JcclxufSBmcm9tIFwiLi4vLi4vanNvbm9iamVjdFwiO1xyXG5leHBvcnQge1xyXG4gICAgTWF0cml4RHJvcGRvd25DZWxsLCBNYXRyaXhEcm9wZG93bkNvbHVtbiwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXHJcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXHJcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5leHBvcnQge01hdHJpeERyb3Bkb3duUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmV4cG9ydCB7TWF0cml4RHluYW1pY1Jvd01vZGVsLCBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcclxuZXhwb3J0IHtNYXRyaXhSb3dNb2RlbCwgUXVlc3Rpb25NYXRyaXhNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeFwiO1xyXG5leHBvcnQge011bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xyXG5leHBvcnQge1BhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlLCBRdWVzdGlvblJvd01vZGVsfSBmcm9tIFwiLi4vLi4vcGFuZWxcIjtcclxuZXhwb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuLi8uLi9wYWdlXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi8uLi9xdWVzdGlvblwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uYmFzZVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ2hlY2tib3hCYXNlLCBRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NvbW1lbnRcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkRyb3Bkb3duTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9kcm9wZG93blwiO1xyXG5leHBvcnQge1F1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3Rvcnl9IGZyb20gXCIuLi8uLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkZpbGVNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2ZpbGVcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkh0bWxNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2h0bWxcIjtcclxuZXhwb3J0IHtRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcclxuZXhwb3J0IHtRdWVzdGlvblJhdGluZ01vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcmF0aW5nXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25UZXh0TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl90ZXh0XCI7XHJcbmV4cG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi8uLi9zdXJ2ZXlcIjtcclxuZXhwb3J0IHtcclxuICAgIFN1cnZleVRyaWdnZXIsIFN1cnZleVRyaWdnZXJDb21wbGV0ZSwgU3VydmV5VHJpZ2dlclNldFZhbHVlLCBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSxcclxuICAgIFRyaWdnZXJcclxufSBmcm9tIFwiLi4vLi4vdHJpZ2dlclwiO1xyXG5leHBvcnQge1N1cnZleVdpbmRvd01vZGVsfSBmcm9tIFwiLi4vLi4vc3VydmV5V2luZG93XCI7XHJcbmV4cG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4uLy4uL3RleHRQcmVQcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCB7ZHhTdXJ2ZXlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XHJcbmV4cG9ydCB7c3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzfSBmcm9tIFwiLi4vLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ3VzdG9tV2lkZ2V0LCBDdXN0b21XaWRnZXRDb2xsZWN0aW9ufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XHJcblxyXG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxyXG4vL2V4cG9ydCB7ZGVmYXVsdCBhcyBRdWVzdGlvbkRhdGVNb2RlbH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvcXVlc3Rpb25fZGF0ZVwiO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9tb2RlbC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBjemVjaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiUMWZZWRjaG96w61cIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJEYWzFocOtXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiSG90b3ZvXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkppbsOhIG9kcG92xJvEjyAobmFwacWhdGUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiUHLFr3prdW11IG5lb2JzYWh1amUgxb7DoWRuw6kgb3TDoXpreS5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSba3VqZW1lIHphIHZ5cGxuxJtuw60gcHLFr3prdW11IVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJQcm9iw61ow6EgbmHEjcOtdMOhbsOtIHByxa96a3VtdS4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVnliZXIuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIG90w6F6a3UuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSB2xaFlY2hueSBvdMOhemt5LlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlYgdG9tdG8gcG9saSBsemUgemFkYXQgcG91emUgxI3DrXNsYS5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB6bmFrxa8uXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBtw6luxJsgbmXFviB7MH0gem5ha8WvLlwiLFxyXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJaYWRlanRlIHByb3PDrW0gdsOtY2UgbmXFviB7MH0gYSBtw6luxJsgbmXFviB7MX0gem5ha8WvLlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJWeXBsxYh0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSDFmcOhZGvFry5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlZ5YmVydGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gdmFyaWFudHkuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJOZXZ5YsOtcmVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSB2YXJpYW50LlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfSBhIG1lbsWhw60gbmVibyByb3ZubyB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgdsSbdMWhw60gbmVibyByb3ZubyB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgbWVuxaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlphZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlBvxb5hZGF2ZWsgdnLDoXRpbCBjaHlidSAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUG/FvmFkYXZlayBuZXZyw6F0aWwgZGF0YSBuZWJvIGNlc3RhIGplIG5lcGxhdG7DoVwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpa29zdCBzb3Vib3J1IGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJaYWRlanRlIHByb3PDrW0gamlub3UgaG9kbm90dS5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiVsOhxaEgc291Ym9yIHNlIG5haHLDoXbDoS4gWmt1c3RlIHRvIHByb3PDrW0gemEgbsSba29saWsgc2VrdW5kLlwiLFxyXG4gICAgYWRkUm93OiBcIlDFmWlkYXQgxZnDoWRla1wiLFxyXG4gICAgcmVtb3ZlUm93OiBcIk9kc3RyYW5pdFwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImN6XCJdID0gY3plY2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZGFuaXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWdlXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiVmlkZXJlXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRsOmcmRpZ1wiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGFmIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRGVyIGVyIGluZ2VuIHN5bmxpZ2Ugc3DDuHJnc23DpWwuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIk1hbmdlIHRhayBmb3IgZGluIGJlc3ZhcmVsc2UhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlNww7hyZ2Vza2VtYWV0IGhlbnRlcyBmcmEgc2VydmVyZW4uLi5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiVmFsZ2ZyaXQgc3Zhci4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVsOmbGcuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsZXQuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiQW5naXYgZXQgdGFsLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJBbmdpdiBtaW5kc3QgezB9IHRlZ24uXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBtaW5kc3QgIHswfSBzdmFybXVsaWdoZWQoZXIpLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgZsOmcnJlIHswfSBzdmFybXVsaWdoZWRlcihlcikuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX0gb2cgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIkFuZ2l2IHZlbmxpZ3N0IGVuIGd5bGRpZyBlLW1haWwgYWRyZXNzZS5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRmlsc3TDuHJyZWxzZW4gbcOlIGlra2Ugb3ZlcnN0aWdlIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJBbmdpdiBlbiB2w6ZyZGkgZm9yIGRpdCB2YWxnZnJpZSBzdmFyLlwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRhXCJdID0gZGFuaXNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCIvL0NyZWF0ZWQgb24gYmVoYWxmIGh0dHBzOi8vZ2l0aHViLmNvbS9GcmFuazEzXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBkdXRjaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiVm9yaWdlXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiVm9sZ2VuZGVcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJBZnNsdWl0ZW5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQW5kZXJlXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSB2YW4gezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJFciBpcyBnZWVuIHppY2h0YmFyZSBwYWdpbmEgb2YgdnJhYWcgaW4gZGV6ZSB2cmFnZW5saWpzdFwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJCZWRhbmt0IG9tIGRlemUgdnJhZ2VubGlqc3QgaW4gdGUgdnVsbGVuXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkRlIHZyYWdlbmxpanN0IGlzIGFhbiBoZXQgbGFkZW4uLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIktpZXMuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiR2VsaWV2ZSBlZW4gYW50d29vcmQgaW4gdGUgdnVsbGVuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiSGV0IGFudHdvb3JkIG1vZXQgZWVuIGdldGFsIHppam5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiR2VsaWV2ZSBtaW5zdGVuIHswfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiR2VsaWV2ZSBtaW5pbXVtIHswfSBhbnR3b29yZGVuIHRlIHNlbGVjdGVyZW4uXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJHZWxpZXZlIG5pZXQgbWVlciBkYW4gezB9IGFudHdvb3JkZW4gdGUgc2VsZWN0ZXJlbi5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfSBlbiBrbGVpbmVyIG9mIGdlbGlqayBhYW4gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIkdlbGlldmUgZWVuIGdlbGRpZyBlLW1haWxhZHJlcyBpbiB0ZSB2dWxsZW4uXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkRlIGdyb290dGUgdmFuIGhldCBiZXN0YW5kIG1hZyBuaWV0IGdyb3RlciB6aWpuIGRhbiB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiR2VsaWV2ZSBoZXQgdmVsZCAnQW5kZXJlJyBpbiB0ZSB2dWxsZW5cIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJubFwiXSA9IGR1dGNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBmaW5uaXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJFZGVsbGluZW5cIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJTZXVyYWF2YVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIlZhbG1pc1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJNdXUgKGt1dmFpbGUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2l2dSB7MH0vezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJUw6Rzc8OkIGt5c2VseXNzw6QgZWkgb2xlIHlodMOka8Okw6RuIG7DpGt5dmlsbMOkIG9sZXZhYSBzaXZ1YSB0YWkga3lzeW15c3TDpC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS2lpdG9zIGt5c2VseXluIHZhc3RhYW1pc2VzdGEhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkt5c2VsecOkIGxhZGF0YWFuIHBhbHZlbGltZWx0YS4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVmFsaXRzZS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJWYXN0YWEga3lzeW15a3NlZW4sIGtpaXRvcy5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJBcnZvbiB0dWxlZSBvbGxhIG51bWVlcmluZW4uXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk9sZSBoeXbDpCBqYSBzecO2dMOkIHbDpGhpbnTDpMOkbiB7MH0gbWVya2tpw6QuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJPbGUgaHl2w6QgamEgdmFsaXRzZSB2w6RoaW50w6TDpG4gezB9IHZhaWh0b2VodG9hLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiT2xlIGh5dsOkIGphIHZhbGl0c2UgZW5pbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHTDpHl0eXkgb2xsYSBlbmVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7MX0gamEgdsOkaGVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgdMOkeXR5eSBvbGxhIGVuZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyB0w6R5dHl5IG9sbGEgdsOkaGVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJTecO2dMOkIHZhbGlkaSBzw6Roa8O2cG9zdGlvc29pdGUuXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiT2xlIGh5dsOkIGphIHN5w7Z0w6QgXFxcIk11dSAoa3V2YWlsZSlcXFwiXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZmlcIl0gPSBmaW5uaXNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwiLy9DcmVhdGVkIG9uIGJlaGFsZiBodHRwczovL2dpdGh1Yi5jb20vRnJhbmsxM1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZnJlbmNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJQclxcdTAwZTljXFx1MDBlOWRlbnRcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJTdWl2YW50XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiVGVybWluZXJcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQXV0cmUgKHByXFx1MDBlOWNpc2VyKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IHN1ciB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIklsIG4neSBhIG5pIHBhZ2UgdmlzaWJsZSBuaSBxdWVzdGlvbiB2aXNpYmxlIGRhbnMgY2UgcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJNZXJjaSBkJ2F2b2lyIHJcXHUwMGU5cG9uZHUgYXUgcXVlc3Rpb25uYWlyZSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiTGUgcXVlc3Rpb25uYWlyZSBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiQ2hvaXNpc3Nlei4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJMYSByXFx1MDBlOXBvbnNlIFxcdTAwZTAgY2V0dGUgcXVlc3Rpb24gZXN0IG9ibGlnYXRvaXJlLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb3V0ZXMgbGVzIGxpZ25lcyBzb250IG9ibGlnYXRvaXJlc1wiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkxhIHJcXHUwMGU5cG9uc2UgZG9pdCBcXHUwMGVhdHJlIHVuIG5vbWJyZS5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiTWVyY2kgZCdlbnRyZXIgYXUgbW9pbnMgezB9IHN5bWJvbGVzLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc1xcdTAwZTlsZWN0aW9ubmVyIGF1IG1vaW5zIHswfXJcXHUwMGU5cG9uc2VzLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc1xcdTAwZTlsZWN0aW9ubmVyIGF1IHBsdXMgezB9clxcdTAwZTlwb25zZXMuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlZvdHJlIHJcXHUwMGU5cG9uc2UgJ3swfScgZG9pdCBcXHUwMGVhdHJlc3VwXFx1MDBlOXJpZXVyZSBvdSBcXHUwMGU5Z2FsZSBcXHUwMGUwIHsxfSBldCBpbmZcXHUwMGU5cmlldXJlIG91XFx1MDBlOWdhbGUgXFx1MDBlMCB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiVm90cmUgclxcdTAwZTlwb25zZSAnezB9JyBkb2l0IFxcdTAwZWF0cmVzdXBcXHUwMGU5cmlldXJlIG91IFxcdTAwZTlnYWxlIFxcdTAwZTAgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIlZvdHJlIHJcXHUwMGU5cG9uc2UgJ3swfScgZG9pdCBcXHUwMGVhdHJlaW5mXFx1MDBlOXJpZXVyZSBvdSBcXHUwMGU5Z2FsZSBcXHUwMGUwIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIk1lcmNpIGQnZW50cmVyIHVuZSBhZHJlc3NlIG1haWwgdmFsaWRlLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJMYSB0YWlsbGUgZHUgZmljaGllciBuZSBkb2l0IHBhcyBleGNcXHUwMGU5ZGVyIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXJjaSBkZSBwclxcdTAwZTljaXNlciBsZSBjaGFtcCAnQXV0cmUnLlwiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZnJcIl0gPSBmcmVuY2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGdlcm1hblN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiWnVyw7xja1wiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIldlaXRlclwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkZlcnRpZ1wiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNlaXRlIHswfSB2b24gezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJFcyBnaWJ0IGtlaW5lIHNpY2h0YmFyZSBGcmFnZS5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVmllbGVuIERhbmsgZsO8ciBkYXMgQXVzZsO8bGxlbiBkZXMgRnJhZ2Vib2dlbnMhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkRlciBGcmFnZWJvZ2VuIHdpcmQgdm9tIFNlcnZlciBnZWxhZGVuLi4uXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkJlbnV0emVyZGVmaW5pZXJ0ZSBBbnR3b3J0Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJXw6RobGVuLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIkJpdHRlIGFudHdvcnRlbiBTaWUgYXVmIGRpZSBGcmFnZS5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJEZXIgV2VydCBzb2xsdGUgZWluZSBaYWhsIHNlaW4uXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIkJpdHRlIGdlYmVuIFNpZSBtaW5kZXN0ZW5zIHswfSBTeW1ib2xlLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbWluZGVzdGVucyB7MH0gVmFyaWFudGVuLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbmljaHQgbWVociBhbHMgezB9IFZhcmlhbnRlbi5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgc29sbHRlIGdsZWljaCBvZGVyIGdyw7bDn2VyIHNlaW4gYWxzIHsxfSB1bmQgZ2xlaWNoIG9kZXIga2xlaW5lciBhbHMgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHNvbGx0ZSBnbGVpY2ggb2RlciBncsO2w59lciBzZWluIGFscyB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc29sbHRlIGdsZWljaCBvZGVyIGtsZWluZXIgYWxzIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lIGfDvGx0aWdlIEVtYWlsLUFkcmVzc2UgZWluLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEaWUgRGF0ZWlncsO2w59lIHNvbGwgbmljaHQgbWVociBhbHMgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBXZXJ0IGbDvHIgSWhyZSBiZW51dHplcmRlZmluaWVydGUgQW50d29ydCBlaW4uXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGVcIl0gPSBnZXJtYW5TdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2dlcm1hbi50cyIsIi8vQ3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYWdlbG9zcGFuYWdpb3Rha2lzXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBncmVla1N1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ov1wiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIs6Vz4DPjM68zrXOvc6/XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwizp/Ou86/zrrOu86uz4HPic+DzrdcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwizobOu867zr8gKM+AzrHPgc6xzrrOsc67z44gzrTOuc61z4XOus+BzrnOvc6vz4PPhM61KVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIs6jzrXOu86vzrTOsSB7MH0gzrHPgM+MIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM66zrHOvM6vzrEgzr/Pgc6xz4TOriDPg861zrvOr860zrEgzq4gzr/Pgc6xz4TOriDOtc+Bz47PhM63z4POtyDPg861IM6xz4XPhM+MIM+Ezr8gzrXPgc+Jz4TOt868zrHPhM6/zrvPjM6zzrnOvy5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwizpXPhc+HzrHPgc65z4PPhM6/z43OvM61IM6zzrnOsSDPhM63zr0gz4PPhc68z4DOu86uz4HPic+DzrcgzrHPhc+Ezr/PhSDPhM6/z4UgzrXPgc+Jz4TOt868zrHPhM6/zrvOv86zzq/Ov8+FIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCLOpM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8gz4bOv8+Bz4TPjs69zrXPhM6xzrkgzrHPgM6/IM+Ezr8gzrTOuc6xzrrOv868zrnPg8+Ezq4uLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIs6Vz4DOuc67zq3Ovs+EzrUuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4PPhM63zr0gzrXPgc+Oz4TOt8+DzrcuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOuc+CIM61z4HPic+Ezq7Pg861zrnPgiDPg861IM+MzrvOtc+CIM+EzrnPgiDOs8+BzrHOvM68zq3Pgi5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCLOlyDPhM65zrzOriDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6xz4HOuc64zrzOuc+EzrnOus6uLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4PPjc68zrLOv867zrEuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDOs8+BzrHOvM68zq3Pgi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPjM+Hzrkgz4DOsc+BzrHPgM6szr3PiSDOsc+Azr8gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCLOpM6/ICd7MH0nIM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOr8+Dzr8gzq4gzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezF9IM66zrHOuSDOr8+Dzr8gzq4gzrzOuc66z4HPjM+EzrXPgc6/IM6xz4DOvyDPhM6/IHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzq4gzrnPg86/IM68zrUgz4TOvyB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrnOus+Bz4zPhM61z4HOvyDOriDOr8+Dzr8gzrHPgM6/IM+Ezr8gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwizqDOsc+BzrHOus6xzrvPjiDOtM+Oz4PPhM61IM68zrnOsSDOsc+Azr/OtM61zrrPhM6uIM60zrnOtc+NzrjPhc69z4POtyBlLW1haWwuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDPg8+GzqzOu868zrEgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgzrrOtc69zqwgzrTOtc60zr/OvM6tzr3OsSDOriDOtyDOuc60z4zPhM63z4TOsSAnzrzOv869zr/PgM6sz4TOuS9wYXRoJyDOtc6vzr3Osc65IM61z4PPhs6xzrvOrc68zq3Ovc63XCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIs6kzr8gzrzOrc6zzrXOuM6/z4IgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM+Fz4DOtc+BzrLOrc69zrXOuSDPhM6xIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOt869IM+EzrnOvM6uIM6zzrnOsSDPhM6/IM+AzrXOtM6vzr8gJ86szrvOu86/Jy5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwizqTOvyDOsc+Bz4fOtc6vzr8gz4POsc+CIM6xzr3Otc6yzrHOr869zrXOuS4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtSDOus6xz4DOv865zrEgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIM66zrHOuSDOtM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwuXCIsXHJcbiAgICBhZGRSb3c6IFwizqDPgc6/z4POuM6uzrrOtyDOs8+BzrHOvM68zq7PglwiLFxyXG4gICAgcmVtb3ZlUm93OiBcIs6Rz4bOsc6vz4HOtc+DzrdcIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImdyXCJdID0gZ3JlZWtTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgcG9saXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJXc3RlY3pcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJEYWxlalwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkdvdG93ZVwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJJbm5hIG9kcG93aWVkxbogKHdwaXN6KVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlN0cm9uYSB7MH0geiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIk5pZSBtYSB3aWRvY3pueWNoIHB5dGHFhC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRHppxJlrdWplbXkgemEgd3lwZcWCbmllbmllIGFua2lldHkhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlRyd2Egd2N6eXR5d2FuaWUgYW5raWV0eS4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiV3liaWVyei4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgdG8gcHl0YW5pZS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUHJvc3rEmSBvZHBvd2llZHppZcSHIG5hIHdzenlzdGtpZSBweXRhbmlhLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlcgdHltIHBvbHUgbW/FvG5hIHdwaXNhxIcgdHlsa28gbGljemJ5LlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgY28gbmFqbW5pZWogezB9IHpuYWvDs3cuXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyBtbmllaiBuacW8IHswfSB6bmFrw7N3LlwiLFxyXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgd2nEmWNlaiBuacW8IHswfSBpIG1uaWVqIG5pxbwgezF9IHpuYWvDs3cuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlByb3N6xJkgdXp1cGXFgm5pxIcgcHJ6eW5ham1uaWVqIHswfSB3aWVyc3p5LlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIGNvIG5ham1uaWVqIHswfSBwb3p5Y2ppLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIG5pZSB3acSZY2VqIG5pxbwgezB9IHBvenljamkuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9IG9yYXogbW5pZWpzemEgbHViIHLDs3duYSB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbHViIHLDs3duYSB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJQcm9zesSZIHBvZGHEhyBwcmF3aWTFgm93eSBhZHJlcyBlbWFpbC5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLFu8SFZGFuaWUgendyw7NjacWCbyBixYLEhWQgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIsW7xIVkYW5pZSBuaWUgendyw7NjacWCbyBkYW55Y2ggYWxibyDFm2NpZcW8a2EgamVzdCBuaWVwcmF3aWTFgm93YVwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJSb3ptaWFyIHByemVzxYJhbmVnbyBwbGlrdSBuaWUgbW/FvGUgcHJ6ZWtyYWN6YcSHIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIHBvZGHEhyBpbm7EhSBvZHBvd2llZMW6LlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJUcndhIHByemVub3N6ZW5pZSBUd29qZWdvIHBsaWt1LCBwcm9zesSZIHNwcsOzYm93YcSHIHBvbm93bmllIHphIGtpbGthIHNla3VuZC5cIixcclxuICAgIGFkZFJvdzogXCJEb2RhaiB3aWVyc3pcIixcclxuICAgIHJlbW92ZVJvdzogXCJVc3XFhFwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInBsXCJdID0gcG9saXNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgcm9tYW5pYW5TdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByZWNlZGVudFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlVybcSDdG9yXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyZVwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbHR1bChwcmVjaXphxaNpKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2luYSB7MH0gZGluIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiTnUgc3VudCDDrm50cmVixINyaSBwZW50cnUgYWNlc3QgY2hlc3Rpb25hclwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJWxIMgbXVsxaN1bWltIHBlbnRydSB0aW1wdWwgYWNvcmRhdCFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiQ2hlc3Rpb25hcnVsIHNlIMOubmNhcmPEgy4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiQWxlZ2XFo2kuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiUsSDc3B1bnN1bCBsYSBhY2Vhc3TEgyDDrm50cmViYXJlIGVzdGUgb2JsaWdhdG9yaXUuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvYXRlIHLEg3NwdW5zdXJpbGUgc3VudCBvYmxpZ2F0b3JpaVwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlLEg3NwdW5zdWwgdHJlYnVpZSBzxIMgZmllIG51bWVyaWMuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjaSBtaW5pbSB7MH0gY2FyYWN0ZXJlLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVHJlYnVpZSBzxIMgc2VsZWN0ZXppIG1pbmltIHswfSBvcMWjaXVuaS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGV6aSBtYXhpbSB7MH0gb3DFo2l1bmkuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfSDFn8OuIG1haSBtaWMgc2F1IGVnYWwgY3UgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWljIHNhdSBlZ2FsIGNhIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSBvIGFkcmVzYSBkZSBlbWFpbCB2YWxpZMSDLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEaW1lbnNpdW5lYSBmacWfaWVydWx1aSBudSB0cmVidWllIHPEgyBkZXDEg8WfZWFzY8SDIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUcmVidWllIHPEgyBjb21wbGV0ZXppIGPDom1wdWwgJ0FsdHVsJy5cIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJvXCJdID0gcm9tYW5pYW5TdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcItCd0LDQt9Cw0LRcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCLQlNCw0LvQtdC1XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwi0JPQvtGC0L7QstC+XCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwi0KHRgtGA0LDQvdC40YbQsCB7MH0g0LjQtyB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcItCd0LXRgiDQvdC4INC+0LTQvdC+0LPQviDQstC+0L/RgNC+0YHQsC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0JLQsNGBINC30LAg0LfQsNC/0L7Qu9C90LXQvdC40LUg0LDQvdC60LXRgtGLIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0LPRgNGD0LfQutCwINGBINGB0LXRgNCy0LXRgNCwLi4uXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L7QtSAo0L/QvtC20LDQu9GD0LnRgdGC0LAsINC+0L/QuNGI0LjRgtC1KVwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwi0JLRi9Cx0YDQsNGC0YwuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L3QsCDQstC+0L/RgNC+0YEuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwi0J7RgtCy0LXRgiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0YfQuNGB0LvQvtC8LlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YXQvtGC0Y8g0LHRiyB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INGF0L7RgtGPINCx0YsgezB9INCy0LDRgNC40LDQvdGC0L7Qsi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INC90LUg0LHQvtC70LXQtSB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YDQsNCy0L3Ri9C8INC40LvQuCDQsdC+0LvRjNGI0LUsINGH0LXQvCB7MX0sINC4INGA0LDQstC90YvQvCDQuNC70Lgg0LzQtdC90YzRiNC1LCDRh9C10LwgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0Lwg0LjQu9C4INCx0L7Qu9GM0YjQtSwg0YfQtdC8IHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YDQsNCy0L3Ri9C8INC40LvQuCDQvNC10L3RjNGI0LUsINGH0LXQvCB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQsNC90L3Ri9C1INCyINC/0L7Qu9C1IFxcXCLQlNGA0YPQs9C+0LVcXFwiXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicnVcIl0gPSBydXNzaWFuU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3J1c3NpYW4udHMiLCIvL0NyZWF0ZSBieSBNYXR0aWFzIEFzcGx1bmRcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIkbDtnJlZ8OlZW5kZVwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIk7DpHN0YVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkbDpHJkaWdcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQW5uYXQgKGJlc2tyaXYpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2lkYSB7MH0gYXYgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJEZXQgZmlubnMgaW5nZW4gc3lubGlnIHNpZGEgZWxsZXIgZnLDpWdhIGkgZW5rw6R0ZW4uXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlRhY2sgZsO2ciBhdHQgZHUgZ2Vub21mw7ZydCBlbmvDpHRlbiEhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkVua8OkdGVuIGxhZGRhcy4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVsOkbGouLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ2FuLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6Vnb3JuYSBww6UgYWxsYSByYWRlci5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJWw6RyZGV0IHNrYSB2YXJhIG51bWVyaXNrdC5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiVmFyIHbDpG5saWcgYW5nZSBtaW5zdCB7MH0gdGVja2VuLlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJWYXIgdsOkbmxpZyBmeWxsIGkgbWluc3QgezB9IHJhZGVyLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogw6V0bWluc3RvbmUgezB9IHZhcmlhbnRlci5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIGludGUgZmxlciDDpG4gezB9IHZhcmlhbnRlci5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWVyIMOkbiB7MX0gc2FtdCBsaWthIG1lZCBlbGxlciBtaW5kcmUgw6RuIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtaW5kcmUgw6RuIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlZhciB2w6RubGlnIGFuZ2UgZW4ga29ycmVrdCBlLXBvc3RhZHJlc3MuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiRsO2cmZyw6VnYW4gcmV0dXJuZXJhZGUgZmVsZXQgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkFudGluZ2VuIHJldHVybmVyYWRlIGbDtnJmcsOlZ2FuIGluZ2VuIGRhdGEgZWxsZXIgc8OlIMOkciBlZ2Vuc2thcGVuICdwYXRoJyBpbnRlIGtvcnJla3RcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRmlsc3Rvcmxla2VuIGbDpXIgZWogw7Z2ZXJzdGlnYSB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYW5nZSBkZXQgYW5kcmEgdsOkcmRldC5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiRGluIGZpbCBsYWRkYXMgdXBwLiBWYXIgdsOkbmxpZyB2w6RudGEgbsOlZ3JhIHNla3VuZGVyIG9jaCBmw7Zyc8O2ayBzZWRhbiBpZ2VuLlwiLFxyXG4gICAgYWRkUm93OiBcIkzDpGdnIHRpbGwgcmFkXCIsXHJcbiAgICByZW1vdmVSb3c6IFwiVGEgYm9ydFwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInN2XCJdID0gc3dlZGlzaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9zd2VkaXNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHR1cmtpc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgICAgIHBhZ2VQcmV2VGV4dDogXCJHZXJpXCIsXHJcbiAgICAgICAgcGFnZU5leHRUZXh0OiBcIsSwbGVyaVwiLFxyXG4gICAgICAgIGNvbXBsZXRlVGV4dDogXCJBbmtldGkgVGFtYW1sYVwiLFxyXG4gICAgICAgIG90aGVySXRlbVRleHQ6IFwiRGnEn2VyIChhw6fEsWtsYXnEsW7EsXopXCIsXHJcbiAgICAgICAgcHJvZ3Jlc3NUZXh0OiBcIlNheWZhIHswfSAvIHsxfVwiLFxyXG4gICAgICAgIGVtcHR5U3VydmV5OiBcIkFua2V0dGUgZ8O2csO8bnTDvGxlbmVjZWsgc2F5ZmEgeWEgZGEgc29ydSBtZXZjdXQgZGXEn2lsLlwiLFxyXG4gICAgICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQW5rZXRpbWl6aSB0YW1hbWxhZMSxxJ/EsW7EsXogacOnaW4gdGXFn2Vra8O8ciBlZGVyaXouXCIsXHJcbiAgICAgICAgbG9hZGluZ1N1cnZleTogXCJBbmtldCBzdW51Y3VkYW4gecO8a2xlbml5b3IgLi4uXCIsXHJcbiAgICAgICAgb3B0aW9uc0NhcHRpb246IFwiU2XDp2luaXogLi4uXCIsXHJcbiAgICAgICAgcmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIHNvcnV5YSBjZXZhcCB2ZXJpbml6XCIsXHJcbiAgICAgICAgbnVtZXJpY0Vycm9yOiBcIkdpcmlsZW4gZGXEn2VyIG51bWVyaWsgb2xtYWzEsWTEsXJcIixcclxuICAgICAgICB0ZXh0TWluTGVuZ3RoOiBcIkVuIGF6IHswfSBzZW1ib2wgZ2lyaW5pei5cIixcclxuICAgICAgICBtaW5Sb3dDb3VudEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNhdMSxcsSxIGRvbGR1cnVuLlwiLFxyXG4gICAgICAgIG1pblNlbGVjdEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNlw6dlbmXEn2kgc2XDp2luaXouXCIsXHJcbiAgICAgICAgbWF4U2VsZWN0RXJyb3I6IFwiTMO8dGZlbiB7MH0gYWRldHRlbiBmYXpsYSBzZcOnbWV5aW5pei5cIixcclxuICAgICAgICBudW1lcmljTWluTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxyXG4gICAgICAgIG51bWVyaWNNaW46IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHZleWEgYsO8ecO8ayBvbG1hbMSxZMSxclwiLFxyXG4gICAgICAgIG51bWVyaWNNYXg6IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHlhIGRhIGvDvMOnw7xrIG9sbWFsxLFkxLFyLlwiLFxyXG4gICAgICAgIGludmFsaWRFbWFpbDogXCJMw7x0ZmVuIGdlw6dlcmxpIGJpciBlcG9zdGEgYWRyZXNpIGdpcmluaXouXCIsXHJcbiAgICAgICAgdXJsUmVxdWVzdEVycm9yOiBcIlRhbGViaSDFn3UgaGF0YXnEsSBkw7ZuZMO8ICd7MH0nLiB7MX1cIixcclxuICAgICAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiVGFsZXAgaGVyaGFuZ2kgYmlyIHZlcmkgZMO2bm1lZGkgeWEgZGEgJ3BhdGgnIMO2emVsbGnEn2kgaGF0YWzEsS5cIixcclxuICAgICAgICBleGNlZWRNYXhTaXplOiBcIkRvc3lhIGJveXV0dSB7MH0gZGXEn2VyaW5pIGdlw6dlbWV6LlwiLFxyXG4gICAgICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIGRpxJ9lciBkZcSfZXJsZXJpIGdpcmluaXouXCIsXHJcbiAgICAgICAgdXBsb2FkaW5nRmlsZTogXCJEb3N5YW7EsXogecO8a2xlbml5b3IuIEzDnHRmZW4gYmlya2HDpyBzYW5peWUgYmVrbGV5aW4gdmUgdGVrcmFyIGRlbmV5aW4uXCIsXHJcbiAgICAgICAgYWRkUm93OiBcIlNhdMSxciBFa2xlXCIsXHJcbiAgICAgICAgcmVtb3ZlUm93OiBcIkthbGTEsXJcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0clwiXSA9IHR1cmtpc2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0SGFzT3RoZXIodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHZhbC5pbmRleE9mKHRoaXMub3RoZXJJdGVtLnZhbHVlKSA+PSAwO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdmFsW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhdmFsLmxlbmd0aCkgcmV0dXJuIHZhbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb21tZW50KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJjaGVja2JveFwiO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjaGVja2JveFwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChcIlwiKTsgfSwgXCJjaGVja2JveGJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25DaGVja2JveE1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fY2hlY2tib3gudHMiLCJpbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tbWVudE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgcHVibGljIHJvd3M6IG51bWJlciA9IDQ7XHJcbiAgICBwdWJsaWMgY29sczogbnVtYmVyID0gNTA7XHJcbiAgICBwcml2YXRlIGxvY1BsYWNlSG9sZGVyVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcclxuICAgIH1cclxuICAgIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNvbW1lbnRcIiwgW3sgbmFtZTogXCJjb2xzOm51bWJlclwiLCBkZWZhdWx0OiA1MCB9LCB7IG5hbWU6IFwicm93czpudW1iZXJcIiwgZGVmYXVsdDogNCB9LCBcclxuICAgIHtuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25Db21tZW50TW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBsb2NPcHRpb25zQ2FwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCkgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID8gdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jT3B0aW9uc0NhcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlO31cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZHJvcGRvd25cIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJkcm9wZG93blwiLCBbeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25Ecm9wZG93bk1vZGVsKFwiXCIpOyB9LCBcInNlbGVjdGJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25Ecm9wZG93bk1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJpbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3IsIEV4Y2VlZFNpemVFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZpbGVNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHByaXZhdGUgc2hvd1ByZXZpZXdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc1VwbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJldmlld1ZhbHVlTG9hZGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBwdWJsaWMgaW1hZ2VIZWlnaHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBpbWFnZVdpZHRoOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RvcmVEYXRhQXNUZXh0OiBib29sZWFuO1xyXG4gICAgcHVibGljIG1heFNpemU6IG51bWJlcjtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaG93UHJldmlldygpIHsgcmV0dXJuIHRoaXMuc2hvd1ByZXZpZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93UHJldmlldyh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnNob3dQcmV2aWV3VmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmICF0aGlzLnN1cnZleS51cGxvYWRGaWxlKHRoaXMubmFtZSwgZmlsZSwgdGhpcy5zdG9yZURhdGFBc1RleHQsIGZ1bmN0aW9uIChzdGF0dXM6IHN0cmluZykgeyBzZWxmLmlzVXBsb2FkaW5nID0gc3RhdHVzID09IFwidXBsb2FkaW5nXCI7ICB9KSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsZVZhbHVlKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHByZXZpZXdWYWx1ZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIHNldEZpbGVWYWx1ZShmaWxlOiBGaWxlKSB7XHJcbiAgICAgICAgaWYgKCFGaWxlUmVhZGVyKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3dQcmV2aWV3ICYmICF0aGlzLnN0b3JlRGF0YUFzVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrRmlsZUZvckVycm9ycyhmaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zaG93UHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5wcmV2aWV3VmFsdWUgPSBzZWxmLmlzRmlsZUltYWdlKGZpbGUpID8gZmlsZVJlYWRlci5yZXN1bHQgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5wcmV2aWV3VmFsdWVMb2FkZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RvcmVEYXRhQXNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gZmlsZVJlYWRlci5yZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVwbG9hZGluZ0ZpbGVcIikpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrRmlsZUZvckVycm9ycyhmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGVycm9yTGVuZ3RoID0gdGhpcy5lcnJvcnMgPyB0aGlzLmVycm9ycy5sZW5ndGggOiAwO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEV4Y2VlZFNpemVFcnJvcih0aGlzLm1heFNpemUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yTGVuZ3RoICE9IHRoaXMuZXJyb3JzLmxlbmd0aCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzRmlsZUltYWdlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUudHlwZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzdHIgPSBmaWxlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoXCJpbWFnZVwiKSA9PSAwO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJmaWxlXCIsIFtcInNob3dQcmV2aWV3OmJvb2xlYW5cIiwgXCJpbWFnZUhlaWdodFwiLCBcImltYWdlV2lkdGhcIiwgXCJzdG9yZURhdGFBc1RleHQ6Ym9vbGVhblwiLCBcIm1heFNpemU6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsImltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgICBwcml2YXRlIGxvY0h0bWxWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NIdG1sVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImh0bWxcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NIdG1sLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgaHRtbCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jSHRtbC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0h0bWxWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRIdG1sKCkgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbCh0aGlzLmh0bWwpIDogdGhpcy5odG1sOyB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImh0bWxcIiwgW3tuYW1lOlwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uYmFzZVwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9odG1sLnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gJy4vc3VydmV5U3RyaW5ncyc7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERhdGEge1xyXG4gICAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3dNb2RlbCBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBJTWF0cml4RGF0YTtcclxuICAgIHByb3RlY3RlZCByb3dWYWx1ZTogYW55OyBcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogYW55LCBwdWJsaWMgdGV4dDogc3RyaW5nLCBwdWJsaWMgZnVsbE5hbWU6IHN0cmluZywgZGF0YTogSU1hdHJpeERhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMucm93VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93VmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhKSB0aGlzLmRhdGEub25NYXRyaXhSb3dDaGFuZ2VkKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIGltcGxlbWVudHMgSU1hdHJpeERhdGEge1xyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIHJvd3NWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZWRWaXNpYmxlUm93czogQXJyYXk8TWF0cml4Um93TW9kZWw+O1xyXG4gICAgcHVibGljIGlzQWxsUm93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLnJvd3NWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1Jvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1ZhbHVlLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBzZXQgY29sdW1ucyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMuY29sdW1uc1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMucm93c1ZhbHVlOyB9XHJcbiAgICBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucm93c1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhSb3dNb2RlbD4oKTtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLnJvd3NbaV0udmFsdWUsIHRoaXMucm93c1tpXS50ZXh0LCB0aGlzLm5hbWUgKyAnXycgKyB0aGlzLnJvd3NbaV0udmFsdWUudG9TdHJpbmcoKSwgdmFsW3RoaXMucm93c1tpXS52YWx1ZV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhudWxsLCBcIlwiLCB0aGlzLm5hbWUsIHZhbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7IH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0Vycm9ySW5Sb3dzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlcXVpcmVkSW5BbGxSb3dzRXJyb3JcIikpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FsbFJvd1JlcXVpcmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBoYXNWYWx1ZXNJbkFsbFJvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgaWYgKCFyb3dzKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IHJvd3NbaV0udmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgZnVsbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeFJvd01vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeFJvd01vZGVsKG5hbWUsIHRleHQsIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZyB8fCAhKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSB2YWwgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbMF0udmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByb3dWYWwgPSB2YWxbcm93Lm5hbWVdID8gdmFsW3Jvdy5uYW1lXSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnZhbHVlID0gcm93VmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RGF0YVxyXG4gICAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKHJvdy52YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdWYWx1ZVtyb3cubmFtZV0gPSByb3cudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm1hdHJpeFwiLCBbeyBuYW1lOiBcImNvbHVtbnM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jb2x1bW5zKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jb2x1bW5zID0gdmFsdWU7IH19LFxyXG4gICAgeyBuYW1lOiBcInJvd3M6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yb3dzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yb3dzID0gdmFsdWU7IH0gfSxcclxuICAgIFwiaXNBbGxSb3dSZXF1aXJlZDpib29sZWFuXCJdLCAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpOyBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7IHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsImltcG9ydCB7UXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcclxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgSU1hdHJpeERyb3Bkb3duRGF0YVxyXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBhbnksIHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiB0aGlzLm5hbWU7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgcHJpdmF0ZSByb3dzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMucm93c1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93blwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yb3dzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucm93c1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvd3MgfHwgdGhpcy5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLnJvd3NbaV0udmFsdWUsIHRoaXMucm93c1tpXS50ZXh0LCB2YWxbdGhpcy5yb3dzW2ldLnZhbHVlXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Sb3dNb2RlbChuYW1lLCB0ZXh0LCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhkcm9wZG93blwiLCBbeyBuYW1lOiBcInJvd3M6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yb3dzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yb3dzID0gdmFsdWU7IH19XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwoXCJcIik7IH0sIFwibWF0cml4ZHJvcGRvd25iYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkcm9wZG93blwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJpbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXHJcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgSU1hdHJpeERyb3Bkb3duRGF0YVxyXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHluYW1pY1Jvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBcInJvd1wiICsgdGhpcy5pbmRleDsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGltcGxlbWVudHMgSU1hdHJpeERyb3Bkb3duRGF0YSB7XHJcbiAgICBzdGF0aWMgTWF4Um93Q291bnQgPSAxMDA7XHJcbiAgICBwcml2YXRlIHJvd0NvdW50ZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSByb3dDb3VudFZhbHVlOiBudW1iZXIgPSAyO1xyXG4gICAgcHJpdmF0ZSBsb2NBZGRSb3dUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NSZW1vdmVSb3dUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHVibGljIG1pblJvd0NvdW50ID0gMDtcclxuICAgIHB1YmxpYyByb3dDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY0FkZFJvd1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1JlbW92ZVJvd1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHluYW1pY1wiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dDb3VudCgpIHsgcmV0dXJuIHRoaXMucm93Q291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLk1heFJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gdmFsKSB7XHJcbiAgICAgICAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgcVZhbC5zcGxpY2UodmFsKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHFWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucm93Q291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFJvdygpIHtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3cobnVsbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvd0NvdW50Kys7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKHZhbCwgbnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm93Q291bnQtLTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgYWRkUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jQWRkUm93VGV4dC50ZXh0ID8gdGhpcy5sb2NBZGRSb3dUZXh0LnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYWRkUm93XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGFkZFJvd1RleHQodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0FkZFJvd1RleHQudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0FkZFJvd1RleHQoKSB7IHJldHVybiB0aGlzLmxvY0FkZFJvd1RleHRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCByZW1vdmVSb3dUZXh0KCkgeyByZXR1cm4gdGhpcy5sb2NSZW1vdmVSb3dUZXh0LnRleHQgPyB0aGlzLmxvY1JlbW92ZVJvd1RleHQudGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVtb3ZlUm93VGV4dCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUmVtb3ZlUm93VGV4dC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUmVtb3ZlUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jUmVtb3ZlUm93VGV4dFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7ICAgcmV0dXJuIGZhbHNlOyAgfVxyXG4gICAgcHVibGljIGdldCBjYWNoZWRWaXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzICYmIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IHRoaXMucm93Q291bnQpIHJldHVybiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3JJblJvd3MoKSkge1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5taW5Sb3dDb3VudCkpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDw9IDAgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNldFJvd0NvdW50ID0gMDtcclxuICAgICAgICBmb3IgKHZhciByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IHJvd0luZGV4KyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Nbcm93SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIXJvdy5pc0VtcHR5KSBzZXRSb3dDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2V0Um93Q291bnQgPCB0aGlzLm1pblJvd0NvdW50O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4oKTtcclxuICAgICAgICBpZiAodGhpcy5yb3dDb3VudCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIGkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KHZhbHVlOiBhbnkpOiBNYXRyaXhEeW5hbWljUm93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHluYW1pY1Jvd01vZGVsKHRoaXMucm93Q291bnRlciArKywgdGhpcywgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlVmFsdWVDaGFuZ2VkKHZhbDogYW55KSB7XHJcbiAgICAgICAgdmFyIG5ld1Jvd0NvdW50ID0gdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggOiAwO1xyXG4gICAgICAgIGlmIChuZXdSb3dDb3VudCA8PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlID0gbmV3Um93Q291bnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKGN1clZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjdXJWYWx1ZTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIHIgPSBbXTtcclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IHRoaXMucm93Q291bnQpIHJlc3VsdC5zcGxpY2UodGhpcy5yb3dDb3VudCAtIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSByZXN1bHQubGVuZ3RoOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShuZXdWYWx1ZTogYW55LCByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYW55IHtcclxuICAgICAgICB2YXIgaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV3VmFsdWVbaV0pLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0VtcHR5ID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCBxdWVzdGlvblZhbHVlLmxlbmd0aCA/IHF1ZXN0aW9uVmFsdWVbaW5kZXhdIDogbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRSb3dWYWx1ZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBxdWVzdGlvblZhbHVlOiBhbnksIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSb3dWYWx1ZUJ5SW5kZXgocXVlc3Rpb25WYWx1ZSwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5pbmRleE9mKHJvdykpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHluYW1pY1wiLCBbeyBuYW1lOiBcInJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAyIH0sIHsgbmFtZTogXCJtaW5Sb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJhZGRSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NBZGRSb3dUZXh0XCIgfSwgeyBuYW1lOiBcInJlbW92ZVJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlbW92ZVJvd1RleHRcIiB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTsgfSwgXCJtYXRyaXhkcm9wZG93bmJhc2VcIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7U3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lcn0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtBbnN3ZXJSZXF1aXJlZEVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEge1xyXG4gICAgZ2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xyXG4gICAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTtcclxuICAgIGdldElzUmVxdWlyZWRUZXh0KCk6IHN0cmluZztcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVZhbGlkYXRvck93bmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGRhdGE6IElNdWx0aXBsZVRleHREYXRhO1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiA9IG5ldyBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0aXRlbVwiO1xyXG4gICAgfVxyXG4gICAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnRpdGxlO1xyXG4gICAgICAgIGlmKHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmRhdGEpIHJlcyA9IHRoaXMuZGF0YS5nZXRJc1JlcXVpcmVkVGV4dCgpICsgJyAnICsgcmVzO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5uYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIH1cclxuICAgIC8vSVZhbGlkYXRvck93bmVyXHJcbiAgICBwdWJsaWMgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGU7IH1cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhIHtcclxuICAgIHByaXZhdGUgY29sQ291bnRWYWx1ZTogbnVtYmVyID0gMTtcclxuICAgIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGl0ZW1TaXplOiBudW1iZXIgPSAyNTtcclxuICAgIHByaXZhdGUgaXRlbXNWYWx1ZXM6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4gPSBuZXcgQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPigpO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtdWx0aXBsZXRleHRcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiB7IHJldHVybiB0aGlzLml0ZW1zVmFsdWVzOyB9XHJcbiAgICBwdWJsaWMgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVRleHRJdGVtKG5hbWUsIHRpdGxlKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldEl0ZW1zT3ZlcnJpZGRlbk1ldGhvZHMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZXMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXREYXRhKHNlbGYpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcy5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTXVsdGlwbGVUZXh0SXRlbU1vZGVsW10pOiBNdWx0aXBsZVRleHRJdGVtTW9kZWxbXSB7XHJcbiAgICAgICAgICAgIGlmKCFzdGFydCkgc3RhcnQgPSAwO1xyXG4gICAgICAgICAgICBpZighZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChzZWxmLml0ZW1zVmFsdWVzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgICAgIGlmKCFpdGVtcykgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbaV0uc2V0RGF0YShzZWxmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pdGVtc1tpXS52YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29sQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29sQ291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcclxuICAgICAgICB2YXIgcm93cyA9IFtdO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ucHVzaChpdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3dzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMub25JdGVtVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChuYW1lLCB0aXRsZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25JdGVtVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgKHRoaXMuaXRlbXNbaV0ubmFtZSBpbiB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbVZhbHVlID0gdGhpcy52YWx1ZVt0aGlzLml0ZW1zW2ldLm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcnVuVmFsaWRhdG9ycygpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgdmFyIGVycm9yID0gc3VwZXIucnVuVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGlmIChlcnJvciAhPSBudWxsKSByZXR1cm4gZXJyb3I7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFZhbGlkYXRvclJ1bm5lcigpLnJ1bih0aGlzLml0ZW1zW2ldKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjayk7XHJcbiAgICAgICAgaWYoIXJlcykgcmVzID0gdGhpcy5oYXNFcnJvckluSXRlbXMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc0Vycm9ySW5JdGVtcyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZihpdGVtLmlzUmVxdWlyZWQgJiYgIWl0ZW0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IoKSk7XHJcbiAgICAgICAgICAgICAgICBpZihmaXJlQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lNdWx0aXBsZVRleHREYXRhXHJcbiAgICBnZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlW25hbWVdO1xyXG4gICAgfVxyXG4gICAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdWYWx1ZVtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBnZXRJc1JlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dCA6IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtdWx0aXBsZXRleHRpdGVtXCIsIFtcIm5hbWVcIiwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSwgXHJcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSwgeyBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLCBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiIH1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibXVsdGlwbGV0ZXh0XCIsIFt7IG5hbWU6IFwiIWl0ZW1zOnRleHRpdGVtc1wiLCBjbGFzc05hbWU6IFwibXVsdGlwbGV0ZXh0aXRlbVwiIH0sXHJcbiAgICAgICAgeyBuYW1lOiBcIml0ZW1TaXplOm51bWJlclwiLCBkZWZhdWx0OiAyNSB9LCB7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFsxLCAyLCAzLCA0XSB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTsgcS5hZGRJdGVtKFwidGV4dDFcIik7IHEuYWRkSXRlbShcInRleHQyXCIpOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwicmFkaW9ncm91cFwiO1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0cnVlOyB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyYWRpb2dyb3VwXCIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwoXCJcIik7IH0sIFwiY2hlY2tib3hiYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxO30pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwiaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBzdGF0aWMgZGVmYXVsdFJhdGVWYWx1ZXM6IEl0ZW1WYWx1ZVtdID0gW107XHJcbiAgICBwcml2YXRlIHJhdGVzOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHJpdmF0ZSBsb2NNaW5SYXRlRGVzY3JpcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICByYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLnJhdGVzID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIGdldCByYXRlVmFsdWVzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yYXRlczsgfVxyXG4gICAgc2V0IHJhdGVWYWx1ZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLnJhdGVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIGdldCB2aXNpYmxlUmF0ZVZhbHVlcygpOiBJdGVtVmFsdWVbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5yYXRlVmFsdWVzO1xyXG4gICAgICAgIHJldHVybiBRdWVzdGlvblJhdGluZ01vZGVsLmRlZmF1bHRSYXRlVmFsdWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJyYXRpbmdcIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1pblJhdGVEZXNjcmlwdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb24udGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IG1pblJhdGVEZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY01pblJhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7cmV0dXJuIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWU7fTtcclxuICAgIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvbi50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb24udGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZTt9O1xyXG59XHJcbkl0ZW1WYWx1ZS5zZXREYXRhKFF1ZXN0aW9uUmF0aW5nTW9kZWwuZGVmYXVsdFJhdGVWYWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSk7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyYXRpbmdcIiwgW1wiaGFzQ29tbWVudDpib29sZWFuXCIsIHsgbmFtZTogXCJyYXRlVmFsdWVzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmoucmF0ZVZhbHVlcyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmoucmF0ZVZhbHVlcyA9IHZhbHVlOyB9fSxcclxuICAgIHtuYW1lOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwibWluaW51bVJhdGVEZXNjcmlwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCJ9LCBcclxuICAgIHtuYW1lOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwibWF4aW11bVJhdGVEZXNjcmlwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWF4UmF0ZURlc2NyaXB0aW9uXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3JhdGluZy50cyIsImltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwdWJsaWMgc2l6ZTogbnVtYmVyID0gMjU7XHJcbiAgICBwdWJsaWMgaW5wdXRUeXBlOiBzdHJpbmcgPSBcInRleHRcIjtcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCI7XHJcbiAgICB9XHJcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4geyAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09IFwiXCI7IH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge3JldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZVR5cGUobmV3VmFsdWUpO1xyXG4gICAgICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT0gXCJudW1iZXJcIiB8fCB0aGlzLmlucHV0VHlwZSA9PSBcInJhbmdlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNOdW1iZXIobmV3VmFsdWUpID8gcGFyc2VGbG9hdChuZXdWYWx1ZSkgOiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtYmVyKHZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgJiYgaXNGaW5pdGUodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidGV4dFwiLCBbeyBuYW1lOiBcImlucHV0VHlwZVwiLCBkZWZhdWx0OiBcInRleHRcIiwgY2hvaWNlczogW1wiY29sb3JcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiLCBcImVtYWlsXCIsIFwibW9udGhcIiwgXCJudW1iZXJcIiwgXCJwYXNzd29yZFwiLCBcInJhbmdlXCIsIFwidGVsXCIsIFwidGV4dFwiLCBcInRpbWVcIiwgXCJ1cmxcIiwgXCJ3ZWVrXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwic2l6ZTpudW1iZXJcIiwgZGVmYXVsdDogMjUgfSwge25hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGNob2ljZXNDaGFuZ2VkOiAwIH07XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uY2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCA9IHNlbGYuc3RhdGUuY2hvaWNlc0NoYW5nZWQgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbDsgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmdldEl0ZW1zKCkgfVxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcIml0ZW1cIiArIGk7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSwgaSA9PSAwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogYW55LCBpc0ZpcnN0OiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0ga2V5PXtrZXl9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMuY3NzfSByb290Q3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0gaXRlbT17aXRlbX0gdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX0gaXNGaXJzdD17aXNGaXJzdH0gLz47XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uOiBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XHJcbiAgICBwcm90ZWN0ZWQgaXRlbTogSXRlbVZhbHVlO1xyXG4gICAgcHJvdGVjdGVkIHRleHRTdHlsZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGlzRmlyc3Q6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5pdGVtID0gcHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcHJvcHMucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy50ZXh0U3R5bGUgPSBwcm9wcy50ZXh0U3R5bGU7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gcHJvcHMuaXNGaXJzdDtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLml0ZW0gPSBuZXh0UHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLnRleHRTdHlsZSA9IG5leHRQcm9wcy50ZXh0U3R5bGU7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLmlzRmlyc3QgPSBuZXh0UHJvcHMuaXNGaXJzdDtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbmRleCA9IG5ld1ZhbHVlLmluZGV4T2YodGhpcy5pdGVtLnZhbHVlKTtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLml0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW0gfHwgIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID4gMCA/ICgxMDAgLyB0aGlzLnF1ZXN0aW9uLmNvbENvdW50KSArIFwiJVwiIDogXCJcIjtcclxuICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyBcIjVweFwiIDogXCIwcHhcIjtcclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB7IG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodCB9O1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGgpIHtcclxuICAgICAgICAgICAgZGl2U3R5bGVbXCJ3aWR0aFwiXSA9IGl0ZW1XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9ICh0aGlzLnF1ZXN0aW9uLnZhbHVlICYmIHRoaXMucXVlc3Rpb24udmFsdWUuaW5kZXhPZih0aGlzLml0ZW0udmFsdWUpID4gLTEpIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBvdGhlckl0ZW0gPSAodGhpcy5pdGVtLnZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSAmJiBpc0NoZWNrZWQpID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChpc0NoZWNrZWQsIGRpdlN0eWxlLCBvdGhlckl0ZW0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7IHJldHVybiB7IG1hcmdpblJpZ2h0OiBcIjNweFwiIH07IH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJDaGVja2JveChpc0NoZWNrZWQ6IGJvb2xlYW4sIGRpdlN0eWxlOiBhbnksIG90aGVySXRlbTogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pc0ZpcnN0ID8gdGhpcy5xdWVzdGlvbi5pbnB1dElkIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtfSBzdHlsZT17ZGl2U3R5bGV9PlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtfT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWR9IHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9IGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNoZWNrZWQ9e2lzQ2hlY2tlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RoaXMuaXRlbS50ZXh0fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAge290aGVySXRlbX1cclxuICAgICAgICAgICAgPC9kaXY+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mub3RoZXJ9PjxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9ICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9Lz48L2Rpdj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY2hlY2tib3gudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25Ecm9wZG93bk1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uY29tbWVudFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge2Jyb3dzZXIsIGNvbXBhcmVWZXJzaW9uc30gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSwgY2hvaWNlc0NoYW5nZWQ6IDAgfTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmNob2ljZXNDaGFuZ2VkID0gc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT09IHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbDtcclxuICAgICAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoKTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgIHtzZWxlY3R9XHJcbiAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdCgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSkgIHJldHVybiAoPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRyb2x9Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2Pik7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9uID0gPG9wdGlvbiBrZXk9e2tleX0gdmFsdWU9e2l0ZW0udmFsdWV9PntpdGVtLnRleHR9PC9vcHRpb24+O1xyXG4gICAgICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvbkNoYW5nZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGJyb3dzZXIubXNpZSB8fCAoYnJvd3Nlci5maXJlZm94ICYmIGNvbXBhcmVWZXJzaW9ucyhicm93c2VyLnZlcnNpb24sICc1MScpIDwgMCkpIHtcclxuICAgICAgICAgICAgb25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c2VsZWN0IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5jc3MuY29udHJvbH0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gb25JbnB1dD17dGhpcy5oYW5kbGVPbkNoYW5nZX0+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj5cclxuICAgICAgICAgICAge29wdGlvbnN9XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luVG9wOiBcIjNweFwiIH07XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3N0eWxlfT48U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0vPjwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmRyb3Bkb3duLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmlsZU1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fZmlsZVwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRmlsZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyBmaWxlTG9hZGVkOiAwIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25GaWxlTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25GaWxlTW9kZWw7IH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50OyBcclxuICAgICAgICBpZiAoIXdpbmRvd1tcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcclxuICAgICAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5sb2FkRmlsZShzcmMuZmlsZXNbMF0pO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlTG9hZGVkOiB0aGlzLnN0YXRlLmZpbGVMb2FkZWQgKyAxIH0pO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBpbWcgPSB0aGlzLnJlbmRlckltYWdlKCk7XHJcbiAgICAgICAgdmFyIGZpbGVJbnB1dCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzcGxheU1vZGUpIHtcclxuICAgICAgICAgICAgZmlsZUlucHV0ID0gPGlucHV0IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IHR5cGU9XCJmaWxlXCIgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9Lz47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICB7ZmlsZUlucHV0fVxyXG4gICAgICAgICAgICAgICAge2ltZ31cclxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckltYWdlKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gKDxkaXY+ICA8aW1nIHNyYz17dGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWV9IGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH0gd2lkdGg9e3RoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aH0gLz48L2Rpdj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xyXG59KTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25maWxlLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uSHRtbE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25faHRtbFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSHRtbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25IdG1sTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25IdG1sTW9kZWw7IH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLmh0bWwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5wcm9jZXNzZWRIdG1sIH07XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+ICk7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25IdG1sLCBwcm9wcyk7XHJcbn0pO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmh0bWwudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhcIjtcclxuaW1wb3J0IHtNYXRyaXhSb3dNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4TW9kZWw7IH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgZmlyc3RUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0aD48L3RoPiA6IG51bGw7XHJcbiAgICAgICAgdmFyIGhlYWRlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24uY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5xdWVzdGlvbi5jb2x1bW5zW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCg8dGgga2V5PXtrZXl9Pntjb2x1bW4udGV4dH08L3RoPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwicm93XCIgKyBpO1xyXG4gICAgICAgICAgICByb3dzLnB1c2goPFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLmNzc30gcm9vdENzcz17dGhpcy5yb290Q3NzfSBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9IHJvdz17cm93fSBpc0ZpcnN0PXtpID09IDB9IC8+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Zmlyc3RUSH1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhNb2RlbDtcclxuICAgIHByaXZhdGUgcm93OiBNYXRyaXhSb3dNb2RlbDtcclxuICAgIHByaXZhdGUgaXNGaXJzdDogYm9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMucm93ID0gcHJvcHMucm93O1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IHByb3BzLmlzRmlyc3Q7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5yb3cudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLnJvdyA9IG5leHRQcm9wcy5yb3c7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gbmV4dFByb3BzLmlzRmlyc3Q7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3cpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBmaXJzdFREID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkPnt0aGlzLnJvdy50ZXh0fTwvdGQ+IDogbnVsbDtcclxuICAgICAgICB2YXIgdGRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24uY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwidmFsdWVcIiArIGk7XHJcbiAgICAgICAgICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dElkID0gdGhpcy5pc0ZpcnN0ICYmIGkgPT0gMCA/IHRoaXMucXVlc3Rpb24uaW5wdXRJZCA6IG51bGw7XHJcbiAgICAgICAgICAgIHZhciB0ZCA9IDx0ZCBrZXk9e2tleX0+PGlucHV0IGlkPXtpbnB1dElkfSB0eXBlPVwicmFkaW9cIiBuYW1lPXt0aGlzLnJvdy5mdWxsTmFtZX0gdmFsdWU9e2NvbHVtbi52YWx1ZX0gZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX0gY2hlY2tlZD17aXNDaGVja2VkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0vPjwvdGQ+O1xyXG4gICAgICAgICAgICB0ZHMucHVzaCh0ZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPHRyPntmaXJzdFREfXt0ZHN9PC90cj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXgudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmltcG9ydCB7SVN1cnZleUNyZWF0b3IsIFN1cnZleVF1ZXN0aW9uRXJyb3JzfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25Sb3dNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25DZWxsfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbDsgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBoZWFkZXJzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24uY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xyXG4gICAgICAgICAgICB2YXIgbWluV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmdldENvbHVtbldpZHRoKGNvbHVtbik7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW5TdHlsZSA9IG1pbldpZHRoID8geyBtaW5XaWR0aDogbWluV2lkdGggfSA6IHt9O1xyXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goPHRoIGtleT17a2V5fSBzdHlsZT17Y29sdW1uU3R5bGV9Pnt0aGlzLnF1ZXN0aW9uLmdldENvbHVtblRpdGxlKGNvbHVtbikgfTwvdGg+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xyXG4gICAgICAgICAgICByb3dzLnB1c2goPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25Sb3cgcm93PXtyb3d9IGNzcz17dGhpcy5jc3N9IHJvb3RDc3M9e3RoaXMucm9vdENzc30gaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8geyBvdmVyZmxvd1g6ICdzY3JvbGwnfSA6IHt9O1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgIHN0eWxlPXtkaXZTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93blJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlIHtcclxuICAgIHByaXZhdGUgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93ID0gbmV4dFByb3BzLnJvdztcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvdykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLnJvdy5jZWxsc1tpXTtcclxuICAgICAgICAgICAgdmFyIGVycm9ycyA9IDxTdXJ2ZXlRdWVzdGlvbkVycm9ycyBxdWVzdGlvbj17Y2VsbC5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gLz5cclxuICAgICAgICAgICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNlbGwpO1xyXG4gICAgICAgICAgICB0ZHMucHVzaCg8dGQga2V5PXtcInJvd1wiICsgaX0+e2Vycm9yc317c2VsZWN0fTwvdGQ+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8dHI+PHRkPnt0aGlzLnJvdy50ZXh0fTwvdGQ+e3Rkc308L3RyPik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChjZWxsLnF1ZXN0aW9uKTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGRyb3Bkb3duLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmVsZW1lbnRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FcnJvcnN9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcclxuaW1wb3J0IHtNYXRyaXhEeW5hbWljUm93TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25DZWxsfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhuZXh0UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHJvd0NvdW50ZXI6IDAgfTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJvd0NvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnJvd0NvdW50ZXIgPSBzZWxmLnN0YXRlLnJvd0NvdW50ZXIgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPblJvd0FkZENsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5hZGRSb3coKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaGVhZGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLmNvbHVtbnNbaV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcImNvbHVtblwiICsgaTtcclxuICAgICAgICAgICAgdmFyIG1pbldpZHRoID0gdGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5XaWR0aChjb2x1bW4pO1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uU3R5bGUgPSBtaW5XaWR0aCA/IHsgbWluV2lkdGg6IG1pbldpZHRoIH0gOiB7fTtcclxuICAgICAgICAgICAgaGVhZGVycy5wdXNoKDx0aCBrZXk9e2tleX0gc3R5bGU9e2NvbHVtblN0eWxlfT57dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5UaXRsZShjb2x1bW4pIH08L3RoPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgcm93cy5wdXNoKDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSb3cgcm93PXtyb3d9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBpbmRleD17aX0gY3NzPXt0aGlzLmNzc30gcm9vdENzcz17dGhpcy5yb290Q3NzfSBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gLz4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwgPyB7IG92ZXJmbG93WDogJ3Njcm9sbCcgfSA6IHt9O1xyXG4gICAgICAgIHZhciBidG5EZWxldGVURCA9ICF0aGlzLmlzRGlzcGxheU1vZGUgPyA8dGg+PC90aD4gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICBzdHlsZT17ZGl2U3R5bGV9PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2J0bkRlbGV0ZVREfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8aW5wdXQgY2xhc3NOYW1lPXt0aGlzLmNzcy5idXR0b259IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2t9IHZhbHVlPXt0aGlzLnF1ZXN0aW9uLmFkZFJvd1RleHR9IC8+O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUm93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSByb3c6IE1hdHJpeER5bmFtaWNSb3dNb2RlbDtcclxuICAgIHByaXZhdGUgcXVlc3Rpb246IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xyXG4gICAgcHJpdmF0ZSBpbmRleDogbnVtYmVyO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93ID0gbmV4dFByb3BzLnJvdztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbmV4dFByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBuZXh0UHJvcHMuaW5kZXg7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPblJvd1JlbW92ZUNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3codGhpcy5pbmRleCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3cpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB0ZHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxsID0gdGhpcy5yb3cuY2VsbHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlcnJvcnMgPSA8U3VydmV5UXVlc3Rpb25FcnJvcnMgcXVlc3Rpb249e2NlbGwucXVlc3Rpb259IGNzcz17dGhpcy5yb290Q3NzfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+O1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJRdWVzdGlvbihjZWxsKTtcclxuICAgICAgICAgICAgdGRzLnB1c2goPHRkIGtleT17XCJyb3dcIiArIGl9PntlcnJvcnN9e3NlbGVjdH08L3RkPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0Rpc3BsYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciByZW1vdmVCdXR0b24gPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xyXG4gICAgICAgICAgICB0ZHMucHVzaCg8dGQga2V5PXtcInJvd1wiICsgdGhpcy5yb3cuY2VsbHMubGVuZ3RoICsgMX0+e3JlbW92ZUJ1dHRvbn08L3RkPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPHRyPnt0ZHN9PC90cj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChjZWxsLnF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8aW5wdXQgY2xhc3NOYW1lPXt0aGlzLmNzcy5idXR0b259IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9IHZhbHVlPXt0aGlzLnF1ZXN0aW9uLnJlbW92ZVJvd1RleHR9IC8+O1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGR5bmFtaWMudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtNdWx0aXBsZVRleHRJdGVtTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsOyB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KFwiaXRlbVwiICsgaSwgdGFibGVSb3dzW2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUm93KGtleTogc3RyaW5nLCBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPikge1xyXG4gICAgICAgIHZhciB0ZHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIHRkcy5wdXNoKDx0ZCBrZXk9e1wibGFiZWxcIiArIGl9PjxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3MuaXRlbVRpdGxlfT57aXRlbS5mdWxsVGl0bGV9PC9zcGFuPjwvdGQ+KTtcclxuICAgICAgICAgICAgdGRzLnB1c2goPHRkIGtleT17XCJ2YWx1ZVwiICsgaX0+e3RoaXMucmVuZGVySXRlbShpdGVtLCBpID09IDApfTwvdGQ+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDx0ciBrZXk9e2tleX0+e3Rkc308L3RyPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJJdGVtKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgaXNGaXJzdDogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgaW5wdXRJZCA9IGlzRmlyc3QgPyB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHRJdGVtIGl0ZW09e2l0ZW19IGNzcz17dGhpcy5jc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0gaW5wdXRJZD17aW5wdXRJZH0gLz47XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZSB7XHJcbiAgICBwcml2YXRlIGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbDtcclxuICAgIHByaXZhdGUgaW5wdXRJZDogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLml0ZW0gPSBwcm9wcy5pdGVtO1xyXG4gICAgICAgIHRoaXMuaW5wdXRJZCA9IHByb3BzLmlucHV0SWQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSB8fCAnJyB9O1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkJsdXIgPSB0aGlzLmhhbmRsZU9uQmx1ci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQmx1cihldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXRlbS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLml0ZW0gPSBuZXh0UHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3R5bGUgPSB7IGZsb2F0OiBcImxlZnRcIiB9O1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpIHJldHVybiAoPGRpdiBpZD17dGhpcy5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzLml0ZW1WYWx1ZX0gc3R5bGU9e3N0eWxlfT57dGhpcy5pdGVtLnZhbHVlfTwvZGl2Pik7XHJcbiAgICAgICAgcmV0dXJuICg8aW5wdXQgaWQ9e3RoaXMuaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtVmFsdWV9IHN0eWxlPXtzdHlsZX0gdHlwZT1cInRleHRcIiB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gcGxhY2Vob2xkZXI9e3RoaXMuaXRlbS5wbGFjZUhvbGRlcn0gb25CbHVyPXt0aGlzLmhhbmRsZU9uQmx1cn0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgbWFpbkNsYXNzTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJcIjsgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tdWx0aXBsZXRleHQudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmNvbW1lbnRcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgY2hvaWNlc0NoYW5nZWQ6IDAgfTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmNob2ljZXNDaGFuZ2VkID0gc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbDsgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRJdGVtcygpIH1cclxuICAgICAgICAgICAgPC9kaXY+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGkgPT0gMCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkgeyByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiIH07IH1cclxuICAgIHByaXZhdGUgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogSXRlbVZhbHVlLCBpc0ZpcnN0OiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID4gMCA/ICgxMDAgLyB0aGlzLnF1ZXN0aW9uLmNvbENvdW50KSArIFwiJVwiIDogXCJcIjtcclxuICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyBcIjVweFwiIDogXCIwcHhcIjtcclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB7IG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodCB9O1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGgpIHtcclxuICAgICAgICAgICAgZGl2U3R5bGVbXCJ3aWR0aFwiXSA9IGl0ZW1XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgICB2YXIgb3RoZXJJdGVtID0gKGlzQ2hlY2tlZCAmJiBpdGVtLnZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSkgPyB0aGlzLnJlbmRlck90aGVyKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclJhZGlvKGtleSwgaXRlbSwgaXNDaGVja2VkLCBkaXZTdHlsZSwgb3RoZXJJdGVtLCBpc0ZpcnN0KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJSYWRpbyhrZXk6IHN0cmluZywgaXRlbTogSXRlbVZhbHVlLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIGRpdlN0eWxlOiBhbnksIG90aGVySXRlbTogSlNYLkVsZW1lbnQsIGlzRmlyc3Q6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlkID0gaXNGaXJzdCA/IHRoaXMucXVlc3Rpb24uaW5wdXRJZCA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMuY3NzLml0ZW19IHN0eWxlPXtkaXZTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5sYWJlbH0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9e2lkfSB0eXBlPVwicmFkaW9cIiBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWUgKyBcIl9cIiArIHRoaXMucXVlc3Rpb25CYXNlLmlkfSBjaGVja2VkPXtpc0NoZWNrZWR9IHZhbHVlPXtpdGVtLnZhbHVlfSBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17dGhpcy50ZXh0U3R5bGV9PntpdGVtLnRleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICB7b3RoZXJJdGVtfVxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlck90aGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5vdGhlcn0+PFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMucm9vdENzc30gaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfS8+PC9kaXY+KTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25yYWRpb2dyb3VwLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYXRpbmdNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmF0aW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYXRpbmdNb2RlbDsgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdmFsdWVzID0gW107XHJcbiAgICAgICAgdmFyIG1pblRleHQgPSB0aGlzLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvbiA/IHRoaXMucXVlc3Rpb24ubWluUmF0ZURlc2NyaXB0aW9uICsgXCIgXCIgOiBcIlwiO1xyXG4gICAgICAgIHZhciBtYXhUZXh0ID0gdGhpcy5xdWVzdGlvbi5tYXhSYXRlRGVzY3JpcHRpb24gPyBcIiBcIiArIHRoaXMucXVlc3Rpb24ubWF4UmF0ZURlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1pblRleHRWYWx1ZSA9IGkgPT0gMCA/IG1pblRleHQgOiBcIlwiO1xyXG4gICAgICAgICAgICB2YXIgbWF4VGV4dFZhbHVlID0gaSA9PSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSYXRlVmFsdWVzLmxlbmd0aCAtIDEgPyBtYXhUZXh0IDogXCJcIjtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5yZW5kZXJJdGVtKFwidmFsdWVcIiArIGksIHRoaXMucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXNbaV0sIG1pblRleHRWYWx1ZSwgbWF4VGV4dFZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5oYXNPdGhlciA/IHRoaXMucmVuZGVyT3RoZXIoKSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAge3ZhbHVlc31cclxuICAgICAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oa2V5OiBzdHJpbmcsIGl0ZW06IEl0ZW1WYWx1ZSwgbWluVGV4dDogc3RyaW5nLCBtYXhUZXh0OiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jc3MuaXRlbTtcclxuICAgICAgICBpZiAoaXNDaGVja2VkKSBjbGFzc05hbWUgKz0gXCIgYWN0aXZlXCI7XHJcbiAgICAgICAgdmFyIG1pbiA9IG1pblRleHQgPyA8c3Bhbj57bWluVGV4dH08L3NwYW4+IDogbnVsbDtcclxuICAgICAgICB2YXIgbWF4ID0gbWF4VGV4dCA/IDxzcGFuPnttYXhUZXh0fTwvc3Bhbj4gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIHN0eWxlPXt7IGRpc3BsYXk6IFwibm9uZVwiIH19IG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX0gdmFsdWU9e2l0ZW0udmFsdWV9IGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgIHttaW59XHJcbiAgICAgICAgICAgIDxzcGFuPntpdGVtLnRleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICB7bWF4fVxyXG4gICAgICAgICAgICA8L2xhYmVsPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mub3RoZXJ9PjxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0vPjwvZGl2Pik7XHJcbiAgICB9XHJcbn1cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nLCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9ucmF0aW5nLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uVGV4dE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fdGV4dFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25CbHVyID0gdGhpcy5oYW5kbGVPbkJsdXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25UZXh0TW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25UZXh0TW9kZWw7IH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkJsdXIoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCAnJyB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKVxyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzc30+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+KVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzfSB0eXBlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZX0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IHNpemU9e3RoaXMucXVlc3Rpb24uc2l6ZX0gcGxhY2Vob2xkZXI9e3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJ9IG9uQmx1cj17dGhpcy5oYW5kbGVPbkJsdXJ9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfSAvPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25UZXh0LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9udGV4dC50c3giLCJpbXBvcnQge0Jhc2V9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93TW9kZWwgZXh0ZW5kcyBCYXNlICB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1cnZleUVsZW1lbnROYW1lID0gXCJ3aW5kb3dTdXJ2ZXlKU1wiO1xyXG4gICAgc3VydmV5VmFsdWU6IFN1cnZleU1vZGVsO1xyXG4gICAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBpc1Nob3dpbmdWYWx1ZTogYm9vbGVhbjtcclxuICAgIGlzRXhwYW5kZWRWYWx1ZTogYm9vbGVhbjtcclxuICAgIHRpdGxlVmFsdWU6IHN0cmluZztcclxuICAgIHRlbXBsYXRlVmFsdWU6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSB0aGlzLmNyZWF0ZVN1cnZleShqc29uT2JqKTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKSA6IHN0cmluZyB7IHJldHVybiBcIndpbmRvd1wiIH1cclxuICAgIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNTaG93aW5nKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1Nob3dpbmdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc0V4cGFuZGVkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGVWYWx1ZSA/IHRoaXMudGl0bGVWYWx1ZSA6IHRoaXMuc3VydmV5LnRpdGxlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy50aXRsZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBleHBhbmQoKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjb2xsYXBzZSgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3VydmV5TW9kZWwoanNvbk9iailcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5V2luZG93LnRzIiwiaW1wb3J0IHtCYXNlLCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xyXG4gICAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcclxuICAgIHN0YXRpYyBnZXQgb3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGlmIChUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgICAgIFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuICF2YWx1ZTsgfSxcclxuICAgICAgICAgICAgbm90ZW1wdHk6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gISghdmFsdWUpOyB9LFxyXG4gICAgICAgICAgICBlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBub3RlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtcImluZGV4T2ZcIl0gJiYgdmFsdWUuaW5kZXhPZihleHBlY3RlZFZhbHVlKSA+IC0xOyB9LFxyXG4gICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiAhdmFsdWUgfHwgIXZhbHVlW1wiaW5kZXhPZlwiXSB8fCB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID09IC0xOyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTsgfSxcclxuICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7IH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcFZhbHVlOiBzdHJpbmcgPSBcImVxdWFsXCI7XHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm9wVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFUcmlnZ2VyLm9wZXJhdG9yc1t2YWx1ZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLm9wVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjaGVjayh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKFRyaWdnZXIub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHZhbHVlLCB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU3VjY2VzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlUcmlnZ2VyT3duZXIge1xyXG4gICAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcclxuICAgIGRvQ29tcGxldGUoKTtcclxuICAgIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBvd25lcjogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldE93bmVyKG93bmVyOiBJU3VydmV5VHJpZ2dlck93bmVyKSB7XHJcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiBmYWxzZTsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclZpc2libGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidmlzaWJsZXRyaWdnZXJcIjsgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1TdWNjZXNzKTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1GYWlsdXJlKTsgfVxyXG4gICAgcHJpdmF0ZSBvblRyaWdnZXIoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMub3duZXIuZ2V0T2JqZWN0cyh0aGlzLnBhZ2VzLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZ1bmMob2JqZWN0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7IGl0ZW0udmlzaWJsZSA9IHRydWU7IH1cclxuICAgIHByb3RlY3RlZCBvbkl0ZW1GYWlsdXJlKGl0ZW06IGFueSkgeyBpdGVtLnZpc2libGUgPSBmYWxzZTsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJjb21wbGV0ZXRyaWdnZXJcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkgeyBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5kb0NvbXBsZXRlKCk7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNldFZhbHVlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XHJcbiAgICBwdWJsaWMgc2V0VG9OYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2V0VmFsdWU6IGFueTtcclxuICAgIHB1YmxpYyBpc1ZhcmlhYmxlOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInNldHZhbHVldHJpZ2dlclwiOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5zZXRWYWx1ZSwgdGhpcy5pc1ZhcmlhYmxlKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRyaWdnZXJcIiwgW1wib3BlcmF0b3JcIiwgXCIhdmFsdWVcIl0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5dHJpZ2dlclwiLCBbXCIhbmFtZVwiXSwgbnVsbCwgXCJ0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidmlzaWJsZXRyaWdnZXJcIiwgW1wicGFnZXNcIiwgXCJxdWVzdGlvbnNcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjb21wbGV0ZXRyaWdnZXJcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUoKTsgfSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2V0dmFsdWV0cmlnZ2VyXCIsIFtcIiFzZXRUb05hbWVcIiwgXCJzZXRWYWx1ZVwiLCBcImlzVmFyaWFibGU6Ym9vbGVhblwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyaWdnZXIudHMiLCJ2YXIgd2Via2l0UmVnRXhwID0gLyh3ZWJraXQpWyBcXC9dKFtcXHcuXSspLyxcclxuICAgIGllUmVnRXhwID0gLyhtc2llKSAoXFxkezEsMn1cXC5cXGQpLyxcclxuICAgIGllMTFSZWdFeHAgPSAvKHRyaWRlbnQpLipydjooXFxkezEsMn1cXC5cXGQpLyxcclxuICAgIG1zRWRnZSA9IC8oZWRnZSlcXC8oKFxcZCspP1tcXHdcXC5dKykvLFxyXG4gICAgbW96aWxsYVJlZ0V4cCA9IC8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspKS87XHJcbnZhciBicm93c2VyRnJvbVVBID0gZnVuY3Rpb24odWEpIHtcclxuICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTtcclxuICAgIHZhciByZXN1bHQ6IHsgbXNpZT86IGJvb2xlYW4sIGZpcmVmb3g/OiBib29sZWFuLCB2ZXJzaW9uPzogc3RyaW5nIH0gPSB7fSxcclxuICAgICAgICBtYXRjaGVzID0gaWVSZWdFeHAuZXhlYyh1YSkgfHwgaWUxMVJlZ0V4cC5leGVjKHVhKSB8fCBtc0VkZ2UuZXhlYyh1YSkgfHwgdWEuaW5kZXhPZihcImNvbXBhdGlibGVcIikgPCAwICYmIG1vemlsbGFSZWdFeHAuZXhlYyh1YSkgfHwgd2Via2l0UmVnRXhwLmV4ZWModWEpIHx8IFtdLFxyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gbWF0Y2hlc1sxXSxcclxuICAgICAgICBicm93c2VyVmVyc2lvbiA9IG1hdGNoZXNbMl07XHJcbiAgICBpZiAoYnJvd3Nlck5hbWUgPT09IFwidHJpZGVudFwiIHx8IGJyb3dzZXJOYW1lID09PSBcImVkZ2VcIikge1xyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gXCJtc2llXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChicm93c2VyTmFtZSA9PT0gXCJtb3ppbGxhXCIpIHtcclxuICAgICAgICBicm93c2VyTmFtZSA9IFwiZmlyZWZveFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgcmVzdWx0W2Jyb3dzZXJOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSBicm93c2VyVmVyc2lvblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG5cclxubGV0IGJyb3dzZXIgPSBicm93c2VyRnJvbVVBKG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGEsIGIpIHtcclxuICAgIHZhciBpLCBkaWZmO1xyXG4gICAgdmFyIHJlZ0V4U3RyaXAwID0gLyhcXC4wKykrJC87XHJcbiAgICB2YXIgc2VnbWVudHNBID0gYS5yZXBsYWNlKHJlZ0V4U3RyaXAwLCAnJykuc3BsaXQoJy4nKTtcclxuICAgIHZhciBzZWdtZW50c0IgPSBiLnJlcGxhY2UocmVnRXhTdHJpcDAsICcnKS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIGwgPSBNYXRoLm1pbihzZWdtZW50c0EubGVuZ3RoLCBzZWdtZW50c0IubGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgZGlmZiA9IHBhcnNlSW50KHNlZ21lbnRzQVtpXSwgMTApIC0gcGFyc2VJbnQoc2VnbWVudHNCW2ldLCAxMCk7XHJcbiAgICAgICAgaWYgKGRpZmYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpZmY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gICAgYnJvd3NlcixcclxuICAgIGNvbXBhcmVWZXJzaW9uc1xyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy50cyIsImV4cG9ydCAqIGZyb20gXCIuL3JlYWN0XCI7XHJcbmV4cG9ydCB7U3VydmV5Tkd9IGZyb20gXCIuLi9hbmd1bGFyL1N1cnZleU5HXCI7XHJcbmV4cG9ydCB7U3VydmV5V2luZG93Tkd9IGZyb20gXCIuLi9hbmd1bGFyL1N1cnZleU5HXCI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvYW5ndWxhci50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/0.12.8/survey.angular.min.js b/0.12.8/survey.angular.min.js new file mode 100644 index 00000000..c3a01313 --- /dev/null +++ b/0.12.8/survey.angular.min.js @@ -0,0 +1,6 @@ +/*! + * surveyjs - Survey JavaScript library v0.12.8 + * Copyright (c) 2015-2017 Devsoft Baltic OÜ - http://surveyjs.org/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Survey",[],t):"object"==typeof exports?exports.Survey=t():e.Survey=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=83)}([function(e,t,n){"use strict";function r(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}n.d(t,"a",function(){return i}),t.b=r,n.d(t,"c",function(){return o});var i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return i});var r={currentLocale:"",locales:{},getString:function(e){var t=this.currentLocale?this.locales[this.currentLocale]:i;return t&&t[e]||(t=i),t[e]},getLocales:function(){var e=[];e.push("");for(var t in this.locales)e.push(t);return e.sort(),e}},i={pagePrevText:"Previous",pageNextText:"Next",completeText:"Complete",otherItemText:"Other (describe)",progressText:"Page {0} of {1}",emptySurvey:"There is no visible page or question in the survey.",completingSurvey:"Thank you for completing the survey!",loadingSurvey:"Survey is loading...",optionsCaption:"Choose...",requiredError:"Please answer the question.",requiredInAllRowsError:"Please answer questions in all rows.",numericError:"The value should be numeric.",textMinLength:"Please enter at least {0} symbols.",textMaxLength:"Please enter less than {0} symbols.",textMinMaxLength:"Please enter more than {0} and less than {1} symbols.",minRowCountError:"Please fill in at least {0} rows.",minSelectError:"Please select at least {0} variants.",maxSelectError:"Please select no more than {0} variants.",numericMinMax:"The '{0}' should be equal or more than {1} and equal or less than {2}",numericMin:"The '{0}' should be equal or more than {1}",numericMax:"The '{0}' should be equal or less than {1}",invalidEmail:"Please enter a valid e-mail address.",urlRequestError:"The request returned error '{0}'. {1}",urlGetChoicesError:"The request returned empty data or the 'path' property is incorrect",exceedMaxSize:"The file size should not exceed {0}.",otherRequiredError:"Please enter the other value.",uploadingFile:"Your file is uploading. Please wait several seconds and try again.",addRow:"Add row",removeRow:"Remove",choices_firstItem:"first item",choices_secondItem:"second item",choices_thirdItem:"third item",matrix_column:"Column",matrix_row:"Row"};r.locales.en=i,String.prototype.format||(String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,function(t,n){return void 0!==e[n]?e[n]:t})})},function(e,t,n){"use strict";var r=n(0);n.d(t,"h",function(){return i}),n.d(t,"e",function(){return o}),n.d(t,"d",function(){return s}),n.d(t,"b",function(){return a}),n.d(t,"j",function(){return u}),n.d(t,"g",function(){return l}),n.d(t,"f",function(){return c}),n.d(t,"c",function(){return h}),n.d(t,"i",function(){return p}),n.d(t,"a",function(){return d});var i=function(){function e(e){this.name=e,this.typeValue=null,this.choicesValue=null,this.choicesfunc=null,this.className=null,this.alternativeName=null,this.classNamePart=null,this.baseClassName=null,this.defaultValue=null,this.readOnly=!1,this.visible=!0,this.isLocalizable=!1,this.serializationProperty=null,this.onGetValue=null}return Object.defineProperty(e.prototype,"type",{get:function(){return this.typeValue?this.typeValue:"string"},set:function(e){this.typeValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasToUseGetValue",{get:function(){return this.onGetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.isDefaultValue=function(e){return this.defaultValue?this.defaultValue==e:!e},e.prototype.getValue=function(e){return this.onGetValue?this.onGetValue(e):this.serializationProperty?e[this.serializationProperty].getJson():e[this.name]},e.prototype.getPropertyValue=function(e){return this.isLocalizable?e[this.serializationProperty].text:this.getValue(e)},Object.defineProperty(e.prototype,"hasToUseSetValue",{get:function(){return this.onSetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.setValue=function(e,t,n){this.onSetValue?this.onSetValue(e,t,n):this.serializationProperty?e[this.serializationProperty].setJson(t):e[this.name]=t},e.prototype.getObjType=function(e){return this.classNamePart?e.replace(this.classNamePart,""):e},e.prototype.getClassName=function(e){return this.classNamePart&&e.indexOf(this.classNamePart)<0?e+this.classNamePart:e},Object.defineProperty(e.prototype,"choices",{get:function(){return null!=this.choicesValue?this.choicesValue:null!=this.choicesfunc?this.choicesfunc():null},enumerable:!0,configurable:!0}),e.prototype.setChoices=function(e,t){this.choicesValue=e,this.choicesfunc=t},e}(),o=function(){function e(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null),this.name=e,this.creator=n,this.parentName=r,this.properties=null,this.requiredProperties=null,this.properties=new Array;for(var i=0;i-1&&(r=n.substring(o+1),n=n.substring(0,o)),n=this.getPropertyName(n);var s=new i(n);if(r&&(s.type=r),"object"==typeof t){if(t.type&&(s.type=t.type),t.default&&(s.defaultValue=t.default),!1===t.visible&&(s.visible=!1),t.isRequired&&this.makePropertyRequired(s.name),t.choices){var a="function"==typeof t.choices?t.choices:null,u="function"!=typeof t.choices?t.choices:null;s.setChoices(u,a)}if(t.onGetValue&&(s.onGetValue=t.onGetValue),t.onSetValue&&(s.onSetValue=t.onSetValue),t.serializationProperty){s.serializationProperty=t.serializationProperty;s.serializationProperty&&0==s.serializationProperty.indexOf("loc")&&(s.isLocalizable=!0)}t.isLocalizable&&(s.isLocalizable=t.isLocalizable),t.className&&(s.className=t.className),t.baseClassName&&(s.baseClassName=t.baseClassName),t.classNamePart&&(s.classNamePart=t.classNamePart),t.alternativeName&&(s.alternativeName=t.alternativeName)}return s}},e.prototype.getPropertyName=function(t){return 0==t.length||t[0]!=e.requiredSymbol?t:(t=t.slice(1),this.makePropertyRequired(t),t)},e.prototype.makePropertyRequired=function(e){this.requiredProperties||(this.requiredProperties=new Array),this.requiredProperties.push(e)},e}();o.requiredSymbol="!",o.typeSymbol=":";var s=function(){function e(){this.classes={},this.childrenClasses={},this.classProperties={},this.classRequiredProperties={}}return e.prototype.addClass=function(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null);var i=new o(e,t,n,r);if(this.classes[e]=i,r){this.childrenClasses[r]||(this.childrenClasses[r]=[]),this.childrenClasses[r].push(i)}return i},e.prototype.overrideClassCreatore=function(e,t){var n=this.findClass(e);n&&(n.creator=t)},e.prototype.getProperties=function(e){var t=this.classProperties[e];return t||(t=new Array,this.fillProperties(e,t),this.classProperties[e]=t),t},e.prototype.findProperty=function(e,t){for(var n=this.getProperties(e),r=0;r=0&&e.requiredProperties.splice(n,1))},e.prototype.emptyClassPropertiesHash=function(e){this.classProperties[e.name]=null;for(var t=this.getChildrenClasses(e.name),n=0;n0&&(r.description+=", "),r.description+=i[o].name;r.description+="."}return r}return r.b(t,e),t}(a),l=function(e){function t(t,n,r){var i=e.call(this,n,r)||this;i.baseClassName=t,i.type=n,i.message=r,i.description="The following types are available: ";for(var o=d.metaData.getChildrenClasses(t,!0),s=0;s0&&(i.description+=", "),i.description+="'"+o[s].name+"'";return i.description+=".",i}return r.b(t,e),t}(a),c=function(e){function t(t,n){var r=e.call(this,n,"missingtypeproperty","The property type is missing in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),h=function(e){function t(t,n){var r=e.call(this,n,"incorrecttypeproperty","The property type is incorrect in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),p=function(e){function t(t,n){var r=e.call(this,"requiredproperty","The property '"+t+"' is required in class '"+n+"'.")||this;return r.propertyName=t,r.className=n,r}return r.b(t,e),t}(a),d=function(){function e(){this.errors=new Array}return Object.defineProperty(e,"metaData",{get:function(){return e.metaDataValue},enumerable:!0,configurable:!0}),e.prototype.toJsonObject=function(e){return this.toJsonObjectCore(e,null)},e.prototype.toObject=function(t,n){if(t){var r=null;if(n.getType&&(r=e.metaData.getProperties(n.getType())),r)for(var i in t)if(i!=e.typePropertyName)if(i!=e.positionPropertyName){var o=this.findProperty(r,i);o?this.valueToObj(t[i],n,i,o):this.addNewError(new u(i.toString(),n.getType()),t)}else n[i]=t[i]}},e.prototype.toJsonObjectCore=function(t,n){if(!t.getType)return t;var r={};null==n||n.className||(r[e.typePropertyName]=n.getObjType(t.getType()));for(var i=e.metaData.getProperties(t.getType()),o=0;o0?i:null}else r=this.toJsonObjectCore(r,n);n.isDefaultValue(r)||(t[n.name]=r)}},e.prototype.valueToObj=function(e,t,n,r){if(null!=e){if(null!=r&&r.hasToUseSetValue)return void r.setValue(t,e,this);if(this.isValueArray(e))return void this.valueToArray(e,t,r.name,r);var i=this.createNewObj(e,r);i.newObj&&(this.toObject(e,i.newObj),e=i.newObj),i.error||(t[r.name]=e)}},e.prototype.isValueArray=function(e){return e&&Array.isArray(e)},e.prototype.createNewObj=function(t,n){var r={newObj:null,error:null},i=t[e.typePropertyName];return!i&&null!=n&&n.className&&(i=n.className),i=n.getClassName(i),r.newObj=i?e.metaData.createClass(i):null,r.error=this.checkNewObjectOnErrors(r.newObj,t,n,i),r},e.prototype.checkNewObjectOnErrors=function(t,n,r,i){var o=null;if(t){var s=e.metaData.getRequiredProperties(i);if(s)for(var a=0;a0&&t[n].splice(0,t[n].length);for(var i=0;i2?i-2:0),s=2;s0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return this.errors.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"requiredText",{get:function(){return null!=this.survey&&this.isRequired?this.survey.requiredText:""},enumerable:!0,configurable:!0}),t.prototype.addError=function(e){this.errors.push(e),this.fireCallback(this.errorsChangedCallback)},t.prototype.checkForErrors=function(e){var t=this.errors?this.errors.length:0;if(this.errors=[],this.onCheckForErrors(this.errors),0==this.errors.length&&this.value){var n=this.runValidators();n&&this.errors.push(n)}if(this.survey&&0==this.errors.length){var n=this.survey.validateQuestion(this.name);n&&this.errors.push(n)}e&&(t!=this.errors.length||t>0)&&this.fireCallback(this.errorsChangedCallback)},t.prototype.onCheckForErrors=function(e){this.hasRequiredError()&&this.errors.push(new u.b)},t.prototype.hasRequiredError=function(){return this.isRequired&&this.isEmpty()},t.prototype.runValidators=function(){return(new l.a).run(this)},t.prototype.setNewValue=function(e){this.setNewValueInData(e),this.onValueChanged()},t.prototype.setNewValueInData=function(e){this.isValueChangedInSurvey||(e=this.valueToData(e),this.setValueCore(e))},t.prototype.getValueCore=function(){return null!=this.data?this.data.getValue(this.name):this.questionValue},t.prototype.setValueCore=function(e){null!=this.data?this.data.setValue(this.name,e):this.questionValue=e},t.prototype.valueFromData=function(e){return e},t.prototype.valueToData=function(e){return e},t.prototype.onValueChanged=function(){},t.prototype.setNewComment=function(e){null!=this.data?this.data.setComment(this.name,e):this.questionComment=e},t.prototype.onSurveyValueChanged=function(e){this.isValueChangedInSurvey=!0,this.value=this.valueFromData(e),this.fireCallback(this.commentChangedCallback),this.isValueChangedInSurvey=!1},t.prototype.getValidatorTitle=function(){return null},t}(o.a);i.a.metaData.addClass("question",[{name:"title:text",serializationProperty:"locTitle"},{name:"commentText",serializationProperty:"locCommentText"},"isRequired:boolean","readOnly:boolean",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"}],null,"questionbase")},function(e,t,n){"use strict";var r=n(7);n.d(t,"a",function(){return i});var i=function(){function e(e,t){void 0===t&&(t=null),this.locTextValue=new r.a(null),t&&(this.locText.text=t),this.value=e}return e.createArray=function(t){var n=[];return e.setupArray(n,t),n},e.setupArray=function(e,t){e.push=function(e){var n=Array.prototype.push.call(this,e);return e.locOwner=t,n},e.splice=function(e,n){for(var r=[],i=2;i-1&&(this.itemValue=n.slice(0,r),this.text=n.slice(r+1))}},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasText",{get:function(){return!!this.locText.text},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.hasText?this.locText.text:this.value?this.value.toString():null},set:function(e){this.locText.text=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(t){if(void 0!==t.value){var n=null;this.isObjItemValue(t)&&(t.itemValue=t.itemValue,this.locText.setJson(t.locText.getJson()),n=e.itemValueProp),this.copyAttributes(t,n)}else this.value=t},e.prototype.isObjItemValue=function(e){return void 0!==e.getType&&"itemvalue"==e.getType()},e.prototype.copyAttributes=function(e,t){for(var n in e)"function"!=typeof e[n]&&(t&&t.indexOf(n)>-1||("text"==n?this.locText.setJson(e[n]):this[n]=e[n]))},e}();i.Separator="|",i.itemValueProp=["text","value","hasText","locOwner","locText"]},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(6);n.d(t,"b",function(){return a}),n.d(t,"a",function(){return u});var a=function(e){function t(t){var n=e.call(this,t)||this;return n.state={value:n.question.value||""},n.handleOnChange=n.handleOnChange.bind(n),n.handleOnBlur=n.handleOnBlur.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.state={value:this.question.value||""}},t.prototype.handleOnChange=function(e){this.setState({value:e.target.value})},t.prototype.handleOnBlur=function(e){this.question.value=e.target.value,this.setState({value:this.question.value||""})},t.prototype.render=function(){return this.question?this.isDisplayMode?i.createElement("div",{id:this.question.inputId,className:this.css},this.question.value):i.createElement("textarea",{id:this.question.inputId,className:this.css,type:"text",value:this.state.value,placeholder:this.question.placeHolder,onBlur:this.handleOnBlur,onChange:this.handleOnChange,cols:this.question.cols,rows:this.question.rows}):null},t}(o.a),u=function(e){function t(t){var n=e.call(this,t)||this;return n.question=t.question,n.comment=n.question.comment,n.state={value:n.comment},n.handleOnChange=n.handleOnChange.bind(n),n.handleOnBlur=n.handleOnBlur.bind(n),n}return r.b(t,e),t.prototype.handleOnChange=function(e){this.comment=e.target.value,this.setState({value:this.comment})},t.prototype.handleOnBlur=function(e){this.question.comment=this.comment},t.prototype.componentWillReceiveProps=function(e){this.question=e.question},t.prototype.render=function(){return this.question?this.isDisplayMode?i.createElement("div",{className:this.css.question.comment},this.comment):i.createElement("input",{type:"text",className:this.css.question.comment,value:this.state.value,onChange:this.handleOnChange,onBlur:this.handleOnBlur}):null},t}(o.b);s.a.Instance.registerQuestion("comment",function(e){return i.createElement(a,e)})},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(10),s=n(11),a=n(1),u=n(9),l=n(17),c=n(7);n.d(t,"b",function(){return h}),n.d(t,"a",function(){return p});var h=function(e){function t(t){var n=e.call(this,t)||this;n.visibleChoicesCache=null,n.otherItemValue=new s.a("other",a.a.getString("otherItemText")),n.choicesFromUrl=null,n.cachedValueForUrlRequestion=null,n.storeOthersAsComment=!0,n.choicesOrderValue="none",n.isSettingComment=!1,n.choicesValues=s.a.createArray(n),n.choicesByUrl=n.createRestfull(),n.locOtherTextValue=new c.a(n),n.locOtherErrorTextValue=new c.a(n);var r=n;return n.choicesByUrl.getResultCallback=function(e){r.onLoadChoicesFromUrl(e)},n}return r.b(t,e),Object.defineProperty(t.prototype,"otherItem",{get:function(){return this.otherItemValue.text=this.otherText?this.otherText:a.a.getString("otherItemText"),this.otherItemValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.getStoreOthersAsComment()?this.getHasOther(this.value):this.getHasOther(this.cachedValue)},enumerable:!0,configurable:!0}),t.prototype.getHasOther=function(e){return e==this.otherItem.value},t.prototype.createRestfull=function(){return new l.a},t.prototype.getComment=function(){return this.getStoreOthersAsComment()?e.prototype.getComment.call(this):this.commentValue},t.prototype.setComment=function(t){this.getStoreOthersAsComment()?e.prototype.setComment.call(this,t):this.isSettingComment||t==this.commentValue||(this.isSettingComment=!0,this.commentValue=t,this.isOtherSelected&&this.setNewValueInData(this.cachedValue),this.isSettingComment=!1)},t.prototype.setNewValue=function(t){t&&(this.cachedValueForUrlRequestion=t),e.prototype.setNewValue.call(this,t)},t.prototype.valueFromData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueFromData.call(this,t):(this.cachedValue=this.valueFromDataCore(t),this.cachedValue)},t.prototype.valueToData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueToData.call(this,t):(this.cachedValue=t,this.valueToDataCore(t))},t.prototype.valueFromDataCore=function(e){return this.hasUnknownValue(e)?e==this.otherItem.value?e:(this.comment=e,this.otherItem.value):e},t.prototype.valueToDataCore=function(e){return e==this.otherItem.value&&this.getComment()&&(e=this.getComment()),e},t.prototype.hasUnknownValue=function(e){if(!e)return!1;for(var t=this.activeChoices,n=0;n0||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback);var n=null;e&&e.length>0&&(n=new Array,s.a.setData(n,e)),this.choicesFromUrl=n,this.onVisibleChoicesChanged(),this.cachedValueForUrlRequestion&&(this.value=this.cachedValueForUrlRequestion)},t.prototype.onVisibleChoicesChanged=function(){this.visibleChoicesCache=null,this.fireCallback(this.choicesChangedCallback)},t.prototype.sortVisibleChoices=function(e){var t=this.choicesOrder.toLowerCase();return"asc"==t?this.sortArray(e,1):"desc"==t?this.sortArray(e,-1):"random"==t?this.randomizeArray(e):e},t.prototype.sortArray=function(e,t){return e.sort(function(e,n){return e.textn.text?1*t:0})},t.prototype.randomizeArray=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e},t.prototype.clearUnusedValues=function(){e.prototype.clearUnusedValues.call(this),this.isOtherSelected||(this.comment=null)},t}(o.a),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.colCountValue=1,n}return r.b(t,e),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<0||e>4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t}(h);i.a.metaData.addClass("selectbase",["hasComment:boolean","hasOther:boolean",{name:"choices:itemvalues",onGetValue:function(e){return s.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"otherText",serializationProperty:"locOtherText"},{name:"otherErrorText",serializationProperty:"locOtherErrorText"},{name:"storeOthersAsComment:boolean",default:!0}],null,"question"),i.a.metaData.addClass("checkboxbase",[{name:"colCount:number",default:1,choices:[0,1,2,3,4]}],null,"selectbase")},function(e,t,n){"use strict";var r=n(28),i=n(18);n.d(t,"b",function(){return o}),n.d(t,"c",function(){return s}),n.d(t,"a",function(){return a});var o=function(){function e(){this.opValue="equal"}return Object.defineProperty(e,"operators",{get:function(){return null!=e.operatorsValue?e.operatorsValue:(e.operatorsValue={empty:function(e,t){return!e},notempty:function(e,t){return!!e},equal:function(e,t){return e==t},notequal:function(e,t){return e!=t},contains:function(e,t){return e&&e.indexOf&&e.indexOf(t)>-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},e.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"operator",{get:function(){return this.opValue},set:function(t){t&&(t=t.toLowerCase(),e.operators[t]&&(this.opValue=t))},enumerable:!0,configurable:!0}),e.prototype.perform=function(t,n){return void 0===t&&(t=null),void 0===n&&(n=null),t||(t=this.left),n||(n=this.right),e.operators[this.operator](this.getPureValue(t),this.getPureValue(n))},e.prototype.getPureValue=function(e){if(!e||"string"!=typeof e)return e;e.length>0&&("'"==e[0]||'"'==e[0])&&(e=e.substr(1));var t=e.length;return t>0&&("'"==e[t-1]||'"'==e[t-1])&&(e=e.substr(0,t-1)),e},e}();o.operatorsValue=null;var s=function(){function e(){this.connectiveValue="and",this.children=[]}return Object.defineProperty(e.prototype,"connective",{get:function(){return this.connectiveValue},set:function(e){e&&(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e||(this.connectiveValue=e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0==this.children.length},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.children=[],this.connective="and"},e}(),a=function(){function e(e){this.root=new s,this.expression=e,this.processValue=new i.a}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,(new r.a).parse(this.expressionValue,this.root))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){return this.values=e,this.runNode(this.root)},e.prototype.runNode=function(e){for(var t="and"==e.connective,n=0;n0?this.questionBase.indent*this.css.question.indent+"px":null,u=this.questionBase.rightIndent>0?this.questionBase.rightIndent*this.css.question.indent+"px":null,l={display:"inline-block",verticalAlign:"top"};return this.questionBase.renderWidth&&(l.width=this.questionBase.renderWidth),a&&(l.marginLeft=a),u&&(l.paddingRight=u),i.createElement("div",{ref:"root",id:this.questionBase.id,className:this.css.question.root,style:l},n,s,e,o,r)},t.prototype.renderQuestion=function(){var e=this.questionBase.customWidget;if(!e)return this.creator.createQuestionElement(this.questionBase);var t=null;if(e.widgetJson.isDefaultRender)return i.createElement("div",{ref:"widget"},this.creator.createQuestionElement(this.questionBase));if(e.widgetJson.render)t=e.widgetJson.render(this.questionBase);else if(e.htmlTemplate){var n={__html:e.htmlTemplate};return i.createElement("div",{ref:"widget",dangerouslySetInnerHTML:n})}return i.createElement("div",{ref:"widget"},t)},t.prototype.renderTitle=function(){var e=this.question.fullTitle;return i.createElement("h5",{className:this.css.question.title},e)},t.prototype.renderComment=function(){return i.createElement("div",null,i.createElement("div",null,this.question.commentText),i.createElement(s.a,{question:this.question,css:this.css}))},t.prototype.renderErrors=function(){return i.createElement(u,{question:this.question,css:this.css,creator:this.creator})},t}(i.Component),u=function(e){function t(t){var n=e.call(this,t)||this;return n.setQuestion(t.question),n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.setQuestion(e.question),this.creator=e.creator,this.css=e.css},t.prototype.setQuestion=function(e){if(this.question=e instanceof o.a?e:null,this.question){var t=this;this.question.errorsChangedCallback=function(){t.state.error=t.state.error+1,t.setState(t.state)}}this.state={error:0}},t.prototype.render=function(){if(!this.question||0==this.question.errors.length)return null;for(var e=[],t=0;t-1?this.path.split(";"):this.path.split(","),0==e.length&&e.push(this.path),e},t.prototype.getValue=function(e){return this.valueName?e[this.valueName]:Object.keys(e).length<1?null:e[Object.keys(e)[0]]},t.prototype.getTitle=function(e){return this.titleName?e[this.titleName]:null},t}(i.c);s.a.metaData.addClass("choicesByUrl",["url","path","valueName","titleName"],function(){return new l})},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.getFirstName=function(e){if(!e)return e;for(var t="",n=0;n0;){if(!i&&"["==e[0]){if(!Array.isArray(r))return n;for(var o=1,s="";o=r.length)return n;r=r[o]}else{i||(e=e.substr(1));var a=this.getFirstName(e);if(!a)return n;if(!r[a])return n;r=r[a],e=e.substr(a.length)}i=!1}return n.value=r,n.hasValue=!0,n},e.prototype.getIntValue=function(e){return"0"==e||(0|e)>0&&e%1==0?Number(e):-1},e}()},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return i});var r={currentType:"",getCss:function(){var e=this.currentType?this[this.currentType]:i;return e||(e=i),e}},i={root:"sv_main",header:"",body:"sv_body",footer:"sv_nav",navigationButton:"",navigation:{complete:"",prev:"",next:""},progress:"sv_progress",progressBar:"",pageTitle:"sv_p_title",row:"sv_row",question:{root:"sv_q",title:"sv_q_title",comment:"",indent:20},error:{root:"sv_q_erbox",icon:"",item:""},checkbox:{root:"sv_qcbc",item:"sv_q_checkbox",other:"sv_q_other"},comment:"",dropdown:{root:"",control:""},matrix:{root:"sv_q_matrix"},matrixdropdown:{root:"sv_q_matrix"},matrixdynamic:{root:"table",button:""},multipletext:{root:"",itemTitle:"",itemValue:""},radiogroup:{root:"sv_qcbc",item:"sv_q_radiogroup",label:"",other:"sv_q_other"},rating:{root:"sv_q_rating",item:"sv_q_rating_item"},text:"",window:{root:"sv_window",body:"sv_window_content",header:{root:"sv_window_title",title:"",button:"",buttonExpanded:"",buttonCollapsed:""}}};r.standard=i},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(10),s=n(4),a=n(11),u=n(1),l=n(13),c=n(17),h=n(5),p=n(7);n.d(t,"b",function(){return d}),n.d(t,"a",function(){return f}),n.d(t,"c",function(){return m}),n.d(t,"d",function(){return g});var d=function(e){function t(t,n){void 0===n&&(n=null);var r=e.call(this)||this;return r.name=t,r.isRequired=!1,r.hasOther=!1,r.minWidth="",r.cellType="default",r.inputType="text",r.choicesOrder="none",r.locOwner=null,r.colCountValue=-1,r.choicesValue=a.a.createArray(r),r.locTitleValue=new p.a(r),r.locOptionsCaptionValue=new p.a(r),r.locPlaceHolderValue=new p.a(r),r.choicesByUrl=new c.a,r}return r.b(t,e),t.prototype.getType=function(){return"matrixdropdowncolumn"},Object.defineProperty(t.prototype,"title",{get:function(){return this.locTitle.text?this.locTitle.text:this.name},set:function(e){this.locTitle.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.locTitleValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<-1||e>4||(this.colCountValue=e)},enumerable:!0,configurable:!0}),t.prototype.getLocale=function(){return this.locOwner?this.locOwner.getLocale():""},t}(s.c),f=function(){function e(e,t,n){this.column=e,this.row=t,this.questionValue=n.createQuestion(this.row,this.column),this.questionValue.setData(t)}return Object.defineProperty(e.prototype,"question",{get:function(){return this.questionValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.question.value},set:function(e){this.question.value=e},enumerable:!0,configurable:!0}),e}(),m=function(){function e(t,n){this.rowValues={},this.rowComments={},this.isSettingValue=!1,this.cells=[],this.data=t,this.value=n,this.idValue=e.getId(),this.buildCells()}return e.getId=function(){return"srow_"+e.idCounter++},Object.defineProperty(e.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowName",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.rowValues},set:function(e){if(this.isSettingValue=!0,this.rowValues={},null!=e)for(var t in e)this.rowValues[t]=e[t];for(var n=0;n4||(this.columnColCountValue=e,this.fireCallback(this.updateCellsCallbak))},enumerable:!0,configurable:!0}),t.prototype.getColumnTitle=function(e){var t=e.title;if(e.isRequired&&this.survey){var n=this.survey.requiredText;n&&(n+=" "),t=n+t}return t},t.prototype.getColumnWidth=function(e){return e.minWidth?e.minWidth:this.columnMinWidth},Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text?this.locOptionsCaption.text:u.a.getString("optionsCaption")},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),t.prototype.addColumn=function(e,t){void 0===t&&(t=null);var n=new d(e,t);return this.columnsValue.push(n),n},Object.defineProperty(t.prototype,"visibleRows",{get:function(){return this.generatedVisibleRows=this.generateRows(),this.generatedVisibleRows},enumerable:!0,configurable:!0}),t.prototype.generateRows=function(){return null},t.prototype.createMatrixRow=function(e,t,n){return null},t.prototype.createNewValue=function(e){return e||{}},t.prototype.getRowValue=function(e,t,n){void 0===n&&(n=!1);var r=t[e.rowName]?t[e.rowName]:null;return!r&&n&&(r={},t[e.rowName]=r),r},t.prototype.onBeforeValueChanged=function(e){},t.prototype.onValueChanged=function(){if(!this.isRowChanging&&(this.onBeforeValueChanged(this.value),this.generatedVisibleRows&&0!=this.generatedVisibleRows.length)){this.isRowChanging=!0;for(var e=this.createNewValue(this.value),t=0;t0)return n[r].question}return null},t.prototype.createQuestion=function(e,t){var n=this.createQuestionCore(e,t);return n.name=t.name,n.isRequired=t.isRequired,n.hasOther=t.hasOther,n.readOnly=this.readOnly,n.setData(this.survey),t.hasOther&&n instanceof l.b&&(n.storeOthersAsComment=!1),n},t.prototype.createQuestionCore=function(e,t){var n="default"==t.cellType?this.cellType:t.cellType,r=this.getQuestionName(e,t);return"checkbox"==n?this.createCheckbox(r,t):"radiogroup"==n?this.createRadiogroup(r,t):"text"==n?this.createText(r,t):"comment"==n?this.createComment(r,t):this.createDropdown(r,t)},t.prototype.getQuestionName=function(e,t){return e.rowName+"_"+t.name},t.prototype.getColumnChoices=function(e){return e.choices&&e.choices.length>0?e.choices:this.choices},t.prototype.getColumnOptionsCaption=function(e){return e.optionsCaption?e.optionsCaption:this.optionsCaption},t.prototype.createDropdown=function(e,t){var n=this.createCellQuestion("dropdown",e);return this.setSelectBaseProperties(n,t),n.optionsCaption=this.getColumnOptionsCaption(t),n},t.prototype.createCheckbox=function(e,t){var n=this.createCellQuestion("checkbox",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.createRadiogroup=function(e,t){var n=this.createCellQuestion("radiogroup",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.setSelectBaseProperties=function(e,t){e.choicesOrder=t.choicesOrder,e.choices=this.getColumnChoices(t),e.choicesByUrl.setData(t.choicesByUrl),e.choicesByUrl.isEmpty||e.choicesByUrl.run()},t.prototype.createText=function(e,t){var n=this.createCellQuestion("text",e);return n.inputType=t.inputType,n.placeHolder=t.placeHolder,n},t.prototype.createComment=function(e,t){var n=this.createCellQuestion("comment",e);return n.placeHolder=t.placeHolder,n},t.prototype.createCellQuestion=function(e,t){return h.a.Instance.createQuestion(e,t)},t.prototype.deleteRowValue=function(e,t){return delete e[t.rowName],0==Object.keys(e).length?null:e},t.prototype.onRowChanged=function(e,t){var n=this.createNewValue(this.value),r=this.getRowValue(e,n,!0);for(var i in r)delete r[i];if(t){t=JSON.parse(JSON.stringify(t));for(var i in t)r[i]=t[i]}0==Object.keys(r).length&&(n=this.deleteRowValue(n,e)),this.isRowChanging=!0,this.setNewValue(n),this.isRowChanging=!1},t}(o.a);i.a.metaData.addClass("matrixdropdowncolumn",["name",{name:"title",serializationProperty:"locTitle"},{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"default",choices:["default","dropdown","checkbox","radiogroup","text","comment"]},{name:"colCount",default:-1,choices:[-1,0,1,2,3,4]},"isRequired:boolean","hasOther:boolean","minWidth",{name:"placeHolder",serializationProperty:"locPlaceHolder"},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]}],function(){return new d("")}),i.a.metaData.addClass("matrixdropdownbase",[{name:"columns:matrixdropdowncolumns",className:"matrixdropdowncolumn"},"horizontalScroll:boolean",{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"dropdown",choices:["dropdown","checkbox","radiogroup","text","comment"]},{name:"columnColCount",default:0,choices:[0,1,2,3,4]},"columnMinWidth"],function(){return new g("")},"question")},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(2),s=n(14);n.d(t,"a",function(){return a});var a=function(e){function t(n){var r=e.call(this)||this;return r.name=n,r.conditionRunner=null,r.visibleIf="",r.visibleValue=!0,r.startWithNewLineValue=!0,r.visibleIndexValue=-1,r.width="",r.renderWidthValue="",r.rightIndentValue=0,r.indent=0,r.idValue=t.getQuestionId(),r.onCreating(),r}return r.b(t,e),t.getQuestionId=function(){return"sq_"+t.questionCounter++},Object.defineProperty(t.prototype,"isPanel",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this.visibleValue},set:function(e){e!=this.visible&&(this.visibleValue=e,this.fireCallback(this.visibilityChangedCallback),this.fireCallback(this.rowVisibilityChangedCallback),this.survey&&this.survey.questionVisibilityChanged(this,this.visible))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isVisible",{get:function(){return this.visible||this.survey&&this.survey.isDesignMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isReadOnly",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleIndex",{get:function(){return this.visibleIndexValue},enumerable:!0,configurable:!0}),t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),!1},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasInput",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasComment",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startWithNewLine",{get:function(){return this.startWithNewLineValue},set:function(e){this.startWithNewLine!=e&&(this.startWithNewLineValue=e,this.startWithNewLineChangedCallback&&this.startWithNewLineChangedCallback())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderWidth",{get:function(){return this.renderWidthValue},set:function(e){e!=this.renderWidth&&(this.renderWidthValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rightIndent",{get:function(){return this.rightIndentValue},set:function(e){e!=this.rightIndent&&(this.rightIndentValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.focus=function(e){void 0===e&&(e=!1)},t.prototype.setData=function(e){this.data=e,e&&e.questionAdded&&(this.surveyValue=e),this.onSetData()},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),t.prototype.fireCallback=function(e){e&&e()},t.prototype.onSetData=function(){},t.prototype.onCreating=function(){},t.prototype.runCondition=function(e){this.visibleIf&&(this.conditionRunner||(this.conditionRunner=new s.a(this.visibleIf)),this.conditionRunner.expression=this.visibleIf,this.visible=this.conditionRunner.run(e))},t.prototype.onSurveyValueChanged=function(e){},t.prototype.onSurveyLoad=function(){},t.prototype.setVisibleIndex=function(e){this.visibleIndexValue!=e&&(this.visibleIndexValue=e,this.fireCallback(this.visibleIndexChangedCallback))},t.prototype.supportGoNextPageAutomatic=function(){return!1},t.prototype.clearUnusedValues=function(){},t.prototype.onLocaleChanged=function(){},t.prototype.getLocale=function(){return this.data?this.data.getLocale():""},t}(i.c);a.questionCounter=100,o.a.metaData.addClass("questionbase",["!name",{name:"visible:boolean",default:!0},"visibleIf:expression",{name:"width"},{name:"startWithNewLine:boolean",default:!0},{name:"indent:number",default:0,choices:[0,1,2,3]}])},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(24)),s=n(36),a=n(33),u=n(6),l=n(19),c=n(34),h=n(4);n.d(t,"a",function(){return p});var p=function(e){function t(t){var n=e.call(this,t)||this;return n.isCurrentPageChanged=!1,n.updateSurvey(t),n}return r.b(t,e),Object.defineProperty(t,"cssType",{get:function(){return l.a.currentType},set:function(e){l.a.currentType=e},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(e){this.updateSurvey(e)},t.prototype.componentDidUpdate=function(){this.isCurrentPageChanged&&(this.isCurrentPageChanged=!1,this.survey.focusFirstQuestionAutomatic&&this.survey.focusFirstQuestion())},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.doAfterRenderSurvey(e)},t.prototype.render=function(){return"completed"==this.survey.state?this.renderCompleted():"loading"==this.survey.state?this.renderLoading():this.renderSurvey()},Object.defineProperty(t.prototype,"css",{get:function(){return l.a.getCss()},set:function(e){this.survey.mergeCss(e,this.css)},enumerable:!0,configurable:!0}),t.prototype.renderCompleted=function(){if(!this.survey.showCompletedPage)return null;var e={__html:this.survey.processedCompletedHtml};return i.createElement("div",{dangerouslySetInnerHTML:e})},t.prototype.renderLoading=function(){var e={__html:this.survey.processedLoadingHtml};return i.createElement("div",{dangerouslySetInnerHTML:e})},t.prototype.renderSurvey=function(){var e=this.survey.title&&this.survey.showTitle?this.renderTitle():null,t=this.survey.currentPage?this.renderPage():null,n="top"==this.survey.showProgressBar?this.renderProgress(!0):null,r="bottom"==this.survey.showProgressBar?this.renderProgress(!1):null,o=t&&this.survey.showNavigationButtons?this.renderNavigation():null;return t||(t=this.renderEmptySurvey()),i.createElement("div",{ref:"root",className:this.css.root},e,i.createElement("div",{id:h.a,className:this.css.body},n,t,r),o)},t.prototype.renderTitle=function(){return i.createElement("div",{className:this.css.header},i.createElement("h3",null,this.survey.processedTitle))},t.prototype.renderPage=function(){return i.createElement(s.a,{survey:this.survey,page:this.survey.currentPage,css:this.css,creator:this})},t.prototype.renderProgress=function(e){return i.createElement(c.a,{survey:this.survey,css:this.css,isTop:e})},t.prototype.renderNavigation=function(){return i.createElement(a.a,{survey:this.survey,css:this.css})},t.prototype.renderEmptySurvey=function(){return i.createElement("span",null,this.survey.emptySurveyText)},t.prototype.updateSurvey=function(e){e?e.model?this.survey=e.model:e.json&&(this.survey=new o.a(e.json)):this.survey=new o.a,e&&(e.clientId&&(this.survey.clientId=e.clientId),e.data&&(this.survey.data=e.data),e.css&&this.survey.mergeCss(e.css,this.css));this.survey.currentPage;this.state={pageIndexChange:0,isCompleted:!1,modelChanged:0},this.setSurveyEvents(e)},t.prototype.setSurveyEvents=function(e){var t=this;this.survey.renderCallback=function(){t.state.modelChanged=t.state.modelChanged+1,t.setState(t.state)},this.survey.onComplete.add(function(e){t.state.isCompleted=!0,t.setState(t.state)}),this.survey.onPartialSend.add(function(e){t.setState(t.state)}),this.survey.onCurrentPageChanged.add(function(n,r){t.isCurrentPageChanged=!0,t.state.pageIndexChange=t.state.pageIndexChange+1,t.setState(t.state),e&&e.onCurrentPageChanged&&e.onCurrentPageChanged(n,r)}),this.survey.onVisibleChanged.add(function(e,t){if(t.question&&t.question.react){var n=t.question.react.state;n.visible=t.question.visible,t.question.react.setState(n)}}),this.survey.onValueChanged.add(function(e,t){if(t.question&&t.question.react){var n=t.question.react.state;n.value=t.value,t.question.react.setState(n)}}),e&&(this.survey.onValueChanged.add(function(t,n){e.data&&(e.data[n.name]=n.value),e.onValueChanged&&e.onValueChanged(t,n)}),e.onComplete&&this.survey.onComplete.add(function(t){e.onComplete(t)}),e.onPartialSend&&this.survey.onPartialSend.add(function(t){e.onPartialSend(t)}),this.survey.onPageVisibleChanged.add(function(t,n){e.onPageVisibleChanged&&e.onPageVisibleChanged(t,n)}),e.onServerValidateQuestions&&(this.survey.onServerValidateQuestions=e.onServerValidateQuestions),e.onQuestionAdded&&this.survey.onQuestionAdded.add(function(t,n){e.onQuestionAdded(t,n)}),e.onQuestionRemoved&&this.survey.onQuestionRemoved.add(function(t,n){e.onQuestionRemoved(t,n)}),e.onValidateQuestion&&this.survey.onValidateQuestion.add(function(t,n){e.onValidateQuestion(t,n)}),e.onSendResult&&this.survey.onSendResult.add(function(t,n){e.onSendResult(t,n)}),e.onGetResult&&this.survey.onGetResult.add(function(t,n){e.onGetResult(t,n)}),e.onProcessHtml&&this.survey.onProcessHtml.add(function(t,n){e.onProcessHtml(t,n)}),e.onAfterRenderSurvey&&this.survey.onAfterRenderSurvey.add(function(t,n){e.onAfterRenderSurvey(t,n)}),e.onAfterRenderPage&&this.survey.onAfterRenderPage.add(function(t,n){e.onAfterRenderPage(t,n)}),e.onAfterRenderQuestion&&this.survey.onAfterRenderQuestion.add(function(t,n){e.onAfterRenderQuestion(t,n)}))},t.prototype.createQuestionElement=function(e){var t=this.css[e.getType()];return u.a.Instance.createQuestion(e.getType(),{question:e,css:t,rootCss:this.css,isDisplayMode:e.isReadOnly,creator:this})},t.prototype.renderError=function(e,t){return i.createElement("div",{key:e,className:this.css.error.item},t)},t.prototype.questionTitleLocation=function(){return this.survey.questionTitleLocation},t}(i.Component)},function(e,t,n){"use strict";var r=n(0),i=n(3);n.n(i);n.d(t,"a",function(){return o});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.updateStateFunction=null,n.survey=t.survey,n.css=t.css,n.state={update:0},n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.survey=e.survey,this.css=e.css},t.prototype.componentDidMount=function(){if(this.survey){var e=this;this.updateStateFunction=function(){e.state.update=e.state.update+1,e.setState(e.state)},this.survey.onPageVisibleChanged.add(this.updateStateFunction)}},t.prototype.componentWillUnmount=function(){this.survey&&this.updateStateFunction&&(this.survey.onPageVisibleChanged.remove(this.updateStateFunction),this.updateStateFunction=null)},t}(i.Component)},function(e,t,n){"use strict";var r=n(0),i=n(25);n.d(t,"a",function(){return o});var o=function(e){function t(t){return void 0===t&&(t=null),e.call(this,t)||this}return r.b(t,e),t.prototype.render=function(){this.renderCallback&&this.renderCallback()},t.prototype.mergeCss=function(e,t){this.mergeValues(e,t)},t.prototype.doAfterRenderSurvey=function(e){this.afterRenderSurvey(e)},t.prototype.onLoadSurveyFromService=function(){this.render()},t.prototype.onLoadingSurveyFromService=function(){this.render()},t}(i.a)},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(4),s=n(30),a=n(26),u=n(18),l=n(29),c=n(1),h=n(9),p=n(32),d=n(7);n.d(t,"a",function(){return f});var f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;n.surveyId=null,n.surveyPostId=null,n.clientId=null,n.cookieName=null,n.sendResultOnPageNext=!1,n.commentPrefix="-Comment",n.focusFirstQuestionAutomatic=!0,n.showNavigationButtons=!0,n.showTitle=!0,n.showPageTitles=!0,n.showCompletedPage=!0,n.requiredText="*",n.questionStartIndex="",n.showProgressBar="off",n.storeOthersAsComment=!0,n.goNextPageAutomatic=!1,n.pages=new Array,n.triggers=new Array,n.clearInvisibleValues=!1,n.currentPageValue=null,n.valuesHash={},n.variablesHash={},n.showPageNumbersValue=!1,n.showQuestionNumbersValue="on",n.questionTitleLocationValue="top",n.localeValue="",n.isCompleted=!1,n.isLoading=!1,n.processedTextValues={},n.isValidatingOnServerValue=!1,n.modeValue="edit",n.isDesignModeValue=!1,n.onComplete=new o.b,n.onPartialSend=new o.b,n.onCurrentPageChanged=new o.b,n.onValueChanged=new o.b,n.onVisibleChanged=new o.b,n.onPageVisibleChanged=new o.b,n.onQuestionAdded=new o.b,n.onQuestionRemoved=new o.b,n.onPanelAdded=new o.b,n.onPanelRemoved=new o.b,n.onValidateQuestion=new o.b,n.onProcessHtml=new o.b,n.onSendResult=new o.b,n.onGetResult=new o.b,n.onUploadFile=new o.b,n.onAfterRenderSurvey=new o.b,n.onAfterRenderPage=new o.b,n.onAfterRenderQuestion=new o.b,n.onAfterRenderPanel=new o.b,n.jsonErrors=null,n.isLoadingFromJsonValue=!1,n.locTitleValue=new d.a(n),n.locCompletedHtmlValue=new d.a(n),n.locPagePrevTextValue=new d.a(n),n.locPageNextTextValue=new d.a(n),n.locCompleteTextValue=new d.a(n),n.locQuestionTitleTemplateValue=new d.a(n);var r=n;return n.textPreProcessor=new a.a,n.textPreProcessor.onHasValue=function(e){return r.hasProcessedTextValue(e)},n.textPreProcessor.onProcess=function(e){return r.getProcessedTextValue(e)},n.pages.push=function(e){return e.data=r,Array.prototype.push.call(this,e)},n.triggers.push=function(e){return e.setOwner(r),Array.prototype.push.call(this,e)},n.updateProcessedTextValues(),n.onBeforeCreating(),t&&(n.setJsonObject(t),n.surveyId&&n.loadSurveyFromService(n.surveyId)),n.onCreating(),n}return r.b(t,e),t.prototype.getType=function(){return"survey"},Object.defineProperty(t.prototype,"locale",{get:function(){return this.localeValue},set:function(e){this.localeValue=e,c.a.currentLocale=e;for(var t=0;t0&&(e[t]=this.valuesHash[t]);return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visiblePages",{get:function(){if(this.isDesignMode)return this.pages;for(var e=new Array,t=0;t0&&(this.currentPage=e[0]),this.currentPageValue},set:function(e){var t=this.visiblePages;if(!(null!=e&&t.indexOf(e)<0)&&e!=this.currentPageValue){var n=this.currentPageValue;this.currentPageValue=e,this.updateCustomWidgets(e),this.currentPageChanged(e,n)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPageNo",{get:function(){return this.visiblePages.indexOf(this.currentPage)},set:function(e){this.visiblePages;e<0||e>=this.visiblePages.length||(this.currentPage=this.visiblePages[e])},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){this.currentPageValue&&(this.currentPageValue.scrollToTop(),this.currentPageValue.focusFirstQuestion())},Object.defineProperty(t.prototype,"state",{get:function(){return this.isLoading?"loading":this.isCompleted?"completed":this.currentPage?"running":"empty"},enumerable:!0,configurable:!0}),t.prototype.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),e&&(this.data=null,this.variablesHash={}),this.isCompleted=!1,t&&this.visiblePageCount>0&&(this.currentPage=this.visiblePages[0])},t.prototype.mergeValues=function(e,t){if(t&&e)for(var n in e){var r=e[n];r&&"object"==typeof r?(t[n]||(t[n]={}),this.mergeValues(r,t[n])):t[n]=r}},t.prototype.updateCustomWidgets=function(e){if(e)for(var t=0;t-1},enumerable:!0,configurable:!0}),t.prototype.setCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT")},t.prototype.deleteCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=;")},t.prototype.nextPage=function(){return!this.isLastPage&&((!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doNextPage(),!0)))},Object.defineProperty(t.prototype,"isCurrentPageHasErrors",{get:function(){return null==this.currentPage||this.currentPage.hasErrors(!0,!0)},enumerable:!0,configurable:!0}),t.prototype.prevPage=function(){if(this.isFirstPage)return!1;var e=this.visiblePages,t=e.indexOf(this.currentPage);this.currentPage=e[t-1]},t.prototype.completeLastPage=function(){return(!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doComplete(),!0))},Object.defineProperty(t.prototype,"isFirstPage",{get:function(){return null==this.currentPage||0==this.visiblePages.indexOf(this.currentPage)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLastPage",{get:function(){if(null==this.currentPage)return!0;var e=this.visiblePages;return e.indexOf(this.currentPage)==e.length-1},enumerable:!0,configurable:!0}),t.prototype.doComplete=function(){this.clearUnusedValues(),this.setCookie(),this.setCompleted(),this.onComplete.fire(this,null),this.surveyPostId&&this.sendResult()},Object.defineProperty(t.prototype,"isValidatingOnServer",{get:function(){return this.isValidatingOnServerValue},enumerable:!0,configurable:!0}),t.prototype.setIsValidatingOnServer=function(e){e!=this.isValidatingOnServer&&(this.isValidatingOnServerValue=e,this.onIsValidatingOnServerChanged())},t.prototype.onIsValidatingOnServerChanged=function(){},t.prototype.doServerValidation=function(){if(!this.onServerValidateQuestions)return!1;for(var e=this,t={data:{},errors:{},survey:this,complete:function(){e.completeServerValidation(t)}},n=0;n"+this.getLocString("completingSurvey")+""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedLoadingHtml",{get:function(){return"

"+this.getLocString("loadingSurvey")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){if(null==this.currentPage)return"";var e=this.visiblePages,t=e.indexOf(this.currentPage)+1;return this.getLocString("progressText").format(t,e.length)},enumerable:!0,configurable:!0}),t.prototype.afterRenderSurvey=function(e){this.onAfterRenderSurvey.fire(this,{survey:this,htmlElement:e})},t.prototype.afterRenderPage=function(e){this.onAfterRenderPage.isEmpty||this.onAfterRenderPage.fire(this,{page:this.currentPage,htmlElement:e})},t.prototype.afterRenderQuestion=function(e,t){this.onAfterRenderQuestion.fire(this,{question:e,htmlElement:t})},t.prototype.afterRenderPanel=function(e,t){this.onAfterRenderPanel.fire(this,{panel:e,htmlElement:t})},t.prototype.uploadFile=function(e,t,n,r){var i=!0;return this.onUploadFile.fire(this,{name:e,file:t,accept:i}),!!i&&(!n&&this.surveyPostId&&this.uploadFileCore(e,t,r),!0)},t.prototype.uploadFileCore=function(e,t,n){var r=this;n&&n("uploading"),(new l.a).sendFile(this.surveyPostId,t,function(t,i){n&&n(t?"success":"error"),t&&r.setValue(e,i)})},t.prototype.getPage=function(e){return this.pages[e]},t.prototype.addPage=function(e){null!=e&&(this.pages.push(e),this.updateVisibleIndexes())},t.prototype.addNewPage=function(e){var t=this.createNewPage(e);return this.addPage(t),t},t.prototype.removePage=function(e){var t=this.pages.indexOf(e);t<0||(this.pages.splice(t,1),this.currentPageValue==e&&(this.currentPage=this.pages.length>0?this.pages[0]:null),this.updateVisibleIndexes())},t.prototype.getQuestionByName=function(e,t){void 0===t&&(t=!1);var n=this.getAllQuestions();t&&(e=e.toLowerCase());for(var r=0;r0&&(this.jsonErrors=t.errors),this.isLoadingFromJsonValue=!1,this.updateProcessedTextValues(),this.hasCookie&&this.doComplete(),this.doElementsOnLoad(),this.runConditions(),this.updateVisibleIndexes()}},t.prototype.onBeforeCreating=function(){},t.prototype.onCreating=function(){},t.prototype.updateProcessedTextValues=function(){this.processedTextValues={};var e=this;this.processedTextValues.pageno=function(t){return null!=e.currentPage?e.visiblePages.indexOf(e.currentPage)+1:0},this.processedTextValues.pagecount=function(t){return e.visiblePageCount};for(var t=this.getAllQuestions(),n=0;n=0;n--){var r=t[n],i=this.getName(e.substring(r.start+1,r.end));if(this.canProcessName(i)&&(!this.onHasValue||this.onHasValue(i))){var o=this.onProcess(i);null==o&&(o=""),e=e.substr(0,r.start)+o+e.substr(r.end+1)}}return e},e.prototype.getItems=function(e){for(var t=[],n=e.length,i=-1,o="",s=0;s-1){var a=new r;a.start=i,a.end=s,t.push(a)}i=-1}return t},e.prototype.getName=function(e){if(e)return e.trim()},e.prototype.canProcessName=function(e){if(!e)return!1;for(var t=0;tn.value?(n.error=new o.a(this.getErrorText(t)),n):this.maxValue&&this.maxValue0&&e.length0&&e.length>this.maxLength?new u(null,new o.a(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return this.minLength>0&&this.maxLength>0?s.a.getString("textMinMaxLength").format(this.minLength,this.maxLength):this.minLength>0?s.a.getString("textMinLength").format(this.minLength):s.a.getString("textMaxLength").format(this.maxLength)},t}(l),d=function(e){function t(t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=e.call(this)||this;return r.minCount=t,r.maxCount=n,r}return r.b(t,e),t.prototype.getType=function(){return"answercountvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),null==e||e.constructor!=Array)return null;var n=e.length;return this.minCount&&nthis.maxCount?new u(null,new o.a(this.getErrorText(s.a.getString("maxSelectError").format(this.maxCount)))):null},t.prototype.getDefaultErrorText=function(e){return e},t}(l),f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;return n.regex=t,n}return r.b(t,e),t.prototype.getType=function(){return"regexvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),this.regex&&e?new RegExp(this.regex).test(e)?null:new u(e,new o.a(this.getErrorText(t))):null},t}(l),m=function(e){function t(){var t=e.call(this)||this;return t.re=/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,t}return r.b(t,e),t.prototype.getType=function(){return"emailvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),e?this.re.test(e)?null:new u(e,new o.a(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return s.a.getString("invalidEmail")},t}(l);a.a.metaData.addClass("surveyvalidator",["text"]),a.a.metaData.addClass("numericvalidator",["minValue:number","maxValue:number"],function(){return new h},"surveyvalidator"),a.a.metaData.addClass("textvalidator",["minLength:number","maxLength:number"],function(){return new p},"surveyvalidator"),a.a.metaData.addClass("answercountvalidator",["minCount:number","maxCount:number"],function(){return new d},"surveyvalidator"),a.a.metaData.addClass("regexvalidator",["regex"],function(){return new f},"surveyvalidator"),a.a.metaData.addClass("emailvalidator",[],function(){return new m},"surveyvalidator")},function(e,t,n){"use strict";var r=n(14);n.d(t,"a",function(){return i});var i=function(){function e(){}return e.prototype.parse=function(e,t){return this.text=e,this.root=t,this.root.clear(),this.at=0,this.length=this.text.length,this.parseText()},e.prototype.toString=function(e){return this.root=e,this.nodeToString(e)},e.prototype.toStringCore=function(e){return e?e.children?this.nodeToString(e):e.left?this.conditionToString(e):"":""},e.prototype.nodeToString=function(e){if(e.isEmpty)return"";for(var t="",n=0;n1&&(t="("+t+")"),t},e.prototype.conditionToString=function(e){if(!e.right||!e.operator)return"";var t=e.left;t&&!this.isNumeric(t)&&(t="'"+t+"'");var n=t+" "+this.operationToString(e.operator);if(this.isNoRightOperation(e.operator))return n;var r=e.right;return r&&!this.isNumeric(r)&&(r="'"+r+"'"),n+" "+r},e.prototype.operationToString=function(e){return"equal"==e?"=":"notequal"==e?"!=":"greater"==e?">":"less"==e?"<":"greaterorequal"==e?">=":"lessorequal"==e?"<=":e},e.prototype.isNumeric=function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)},e.prototype.parseText=function(){return this.node=this.root,this.expressionNodes=[],this.expressionNodes.push(this.node),this.readConditions()&&this.at>=this.length},e.prototype.readConditions=function(){var e=this.readCondition();if(!e)return e;var t=this.readConnective();return!t||(this.addConnective(t),this.readConditions())},e.prototype.readCondition=function(){var e=this.readExpression();if(e<0)return!1;if(1==e)return!0;var t=this.readString();if(!t)return!1;var n=this.readOperator();if(!n)return!1;var i=new r.b;if(i.left=t,i.operator=n,!this.isNoRightOperation(n)){var o=this.readString();if(!o)return!1;i.right=o}return this.addCondition(i),!0},e.prototype.readExpression=function(){if(this.skip(),this.at>=this.length||"("!=this.ch)return 0;this.at++,this.pushExpression();var e=this.readConditions();return e?(this.skip(),e=")"==this.ch,this.at++,this.popExpression(),1):-1},Object.defineProperty(e.prototype,"ch",{get:function(){return this.text.charAt(this.at)},enumerable:!0,configurable:!0}),e.prototype.skip=function(){for(;this.at"==e||"<"==e||"="==e||"!"==e},e.prototype.isBrackets=function(e){return"("==e||")"==e},e.prototype.readString=function(){if(this.skip(),this.at>=this.length)return null;var e=this.at,t=this.isQuotes(this.ch);t&&this.at++;for(var n=this.isOperatorChar(this.ch);this.at1&&this.isQuotes(r[0])){var i=r.length-1;this.isQuotes(r[r.length-1])&&i--,r=r.substr(1,i)}return r},e.prototype.isNoRightOperation=function(e){return"empty"==e||"notempty"==e},e.prototype.readOperator=function(){var e=this.readString();return e?(e=e.toLowerCase(),">"==e&&(e="greater"),"<"==e&&(e="less"),">="!=e&&"=>"!=e||(e="greaterorequal"),"<="!=e&&"=<"!=e||(e="lessorequal"),"="!=e&&"=="!=e||(e="equal"),"<>"!=e&&"!="!=e||(e="notequal"),"contain"==e&&(e="contains"),"notcontain"==e&&(e="notcontains"),e):null},e.prototype.readConnective=function(){var e=this.readString();return e?(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e&&(e=null),e):null},e.prototype.pushExpression=function(){var e=new r.c;this.expressionNodes.push(e),this.node=e},e.prototype.popExpression=function(){var e=this.expressionNodes.pop();this.node=this.expressionNodes[this.expressionNodes.length-1],this.node.children.push(e)},e.prototype.addCondition=function(e){this.node.children.push(e)},e.prototype.addConnective=function(e){if(this.node.children.length<2)this.node.connective=e;else if(this.node.connective!=e){var t=this.node.connective,n=this.node.children;this.node.clear(),this.node.connective=e;var i=new r.c;i.connective=t,i.children=n,this.node.children.push(i);var o=new r.c;this.node.children.push(o),this.node=o}},e}()},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.loadSurvey=function(t,n){var r=new XMLHttpRequest;r.open("GET",e.serviceUrl+"/getSurvey?surveyId="+t),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.onload=function(){var e=JSON.parse(r.response);n(200==r.status,e,r.response)},r.send()},e.prototype.sendResult=function(t,n,r,i,o){void 0===i&&(i=null),void 0===o&&(o=!1);var s=new XMLHttpRequest;s.open("POST",e.serviceUrl+"/post/"),s.setRequestHeader("Content-Type","application/json; charset=utf-8");var a={postId:t,surveyResult:JSON.stringify(n)};i&&(a.clientId=i),o&&(a.isPartialCompleted=!0);var u=JSON.stringify(a);s.onload=s.onerror=function(){r&&r(200==s.status,s.response)},s.send(u)},e.prototype.sendFile=function(t,n,r){var i=new XMLHttpRequest;i.onload=i.onerror=function(){r&&r(200==i.status,JSON.parse(i.response))},i.open("POST",e.serviceUrl+"/upload/",!0);var o=new FormData;o.append("file",n),o.append("postId",t),i.send(o)},e.prototype.getResult=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&name="+n;i.open("GET",e.serviceUrl+"/getResult?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null,t=null;if(200==i.status){e=JSON.parse(i.response),t=[];for(var n in e.QuestionResult){var o={name:n,value:e.QuestionResult[n]};t.push(o)}}r(200==i.status,e,t,i.response)},i.send()},e.prototype.isCompleted=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&clientId="+n;i.open("GET",e.serviceUrl+"/isCompleted?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null;200==i.status&&(e=JSON.parse(i.response)),r(200==i.status,e,i.response)},i.send()},e}();r.serviceUrl="https://dxsurveyapi.azurewebsites.net/api/Survey"},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(4),s=n(31);n.d(t,"a",function(){return a});var a=function(e){function t(t){void 0===t&&(t="");var n=e.call(this,t)||this;return n.name=t,n.numValue=-1,n.navigationButtonsVisibility="inherit",n}return r.b(t,e),t.prototype.getType=function(){return"page"},Object.defineProperty(t.prototype,"num",{get:function(){return this.numValue},set:function(e){this.numValue!=e&&(this.numValue=e,this.onNumChanged(e))},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){for(var e=0;e0},e}(),c=function(e){function t(n){void 0===n&&(n="");var r=e.call(this)||this;r.name=n,r.dataValue=null,r.rowValues=null,r.conditionRunner=null,r.elementsValue=new Array,r.isQuestionsReady=!1,r.questionsValue=new Array,r.parent=null,r.visibleIf="",r.visibleIndex=-1,r.visibleValue=!0,r.idValue=t.getPanelId(),r.locTitleValue=new u.a(r);var i=r;return r.elementsValue.push=function(e){return i.doOnPushElement(this,e)},r.elementsValue.splice=function(e,t){for(var n=[],r=2;r=e.length||o.push(e[s+t]);var a=(u=Array.prototype.splice).call.apply(u,[e,t,n].concat(r));this.markQuestionListDirty(),r||(r=[]);for(var s=0;s-1){n.updateVisible();break}}},t.prototype.buildRows=function(){for(var e=new Array,t=0;t=this.elements.length?this.elements.push(e):this.elements.splice(t,0,e))},t.prototype.addQuestion=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addPanel=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addNewQuestion=function(e,t){var n=a.a.Instance.createQuestion(e,t);return this.addQuestion(n),n},t.prototype.addNewPanel=function(e){var t=this.createNewPanel(e);return this.addPanel(t),t},t.prototype.createNewPanel=function(e){return new h(e)},t.prototype.removeElement=function(e){var t=this.elements.indexOf(e);if(t<0){for(var n=0;n0&&(e=this.page.num+". "+e),i.createElement("h4",{className:this.css.pageTitle},e)},t}(i.Component),a=function(e){function t(t){var n=e.call(this,t)||this;return n.panel=t.panel,n.survey=t.survey,n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.panel=e.panel,this.survey=e.survey,this.creator=e.creator,this.css=e.css},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.afterRenderPage(e)},t.prototype.render=function(){if(null==this.panel||null==this.survey||null==this.creator)return null;for(var e=this.renderTitle(),t=[],n=this.panel.rows,r=0;r2;)L.push(arguments[a]);for(n&&n.children&&(L.length||L.push(n.children),delete n.children);L.length;)if((o=L.pop())instanceof Array)for(a=o.length;a--;)L.push(o[a]);else null!=o&&!0!==o&&!1!==o&&("number"==typeof o&&(o=String(o)),s="string"==typeof o,s&&i?r[r.length-1]+=o:((r||(r=[])).push(o),i=s));var u=new t(e,n||void 0,r||Q);return A.vnode&&A.vnode(u),u}function r(e,t){if(t)for(var n in t)e[n]=t[n];return e}function i(e){return r({},e)}function o(e,t){for(var n=t.split("."),r=0;r2?[].slice.call(arguments,2):e.children)}function c(e,t,n){var r=t.split(".");return function(t){for(var i=t&&t.target||this,s={},u=s,l=a(n)?o(t,n):i.nodeName?i.type.match(/^che|rad/)?i.checked:i.value:t,c=0;c=f?e.appendChild(u):u!==l[b]&&(u===l[b+1]&&v(l[b]),e.insertBefore(u,l[b]||null)))}if(p)for(var b in h)h[b]&&E(h[b]);for(;d<=g;)(u=c[g--])&&E(u)}function E(e,t){var n=e._component;if(n)_(n,!t);else{e[U]&&e[U].ref&&e[U].ref(null),t||x(e);for(var r;r=e.lastChild;)E(r,t)}}function S(e,t,n){var r;for(r in n)t&&r in t||null==n[r]||b(e,r,n[r],n[r]=void 0,Y);if(t)for(r in t)"children"===r||"innerHTML"===r||r in n&&t[r]===("value"===r||"checked"===r?e[r]:n[r])||b(e,r,n[r],n[r]=t[r],Y)}function R(e){var t=e.constructor.name,n=te[t];n?n.push(e):te[t]=[e]}function N(e,t,n){var r=new e(t,n),i=te[e.name];if(M.call(r,t,n),i)for(var o=i.length;o--;)if(i[o].constructor===e){r.nextBase=i[o].nextBase,i.splice(o,1);break}return r}function k(e,t,n,r,i){e._disable||(e._disable=!0,(e.__ref=t.ref)&&delete t.ref,(e.__key=t.key)&&delete t.key,!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,r),r&&r!==e.context&&(e.prevContext||(e.prevContext=e.context),e.context=r),e.prevProps||(e.prevProps=e.props),e.props=t,e._disable=!1,0!==n&&(1!==n&&!1===A.syncComponentUpdates&&e.base?h(e):j(e,1,i)),e.__ref&&e.__ref(e))}function j(e,t,n,o){if(!e._disable){var a,u,l,c,h=e.props,p=e.state,m=e.context,g=e.prevProps||h,v=e.prevState||p,b=e.prevContext||m,C=e.base,w=e.nextBase,x=C||w,P=e._component;if(C&&(e.props=g,e.state=v,e.context=b,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(h,p,m)?a=!0:e.componentWillUpdate&&e.componentWillUpdate(h,p,m),e.props=h,e.state=p,e.context=m),e.prevProps=e.prevState=e.prevContext=e.nextBase=null,e._dirty=!1,!a){for(e.render&&(u=e.render(h,p,m)),e.getChildContext&&(m=r(i(m),e.getChildContext()));d(u);)u=f(u,m);var T,q,S=u&&u.nodeName;if(s(S)){var R=y(u);l=P,l&&l.constructor===S&&R.key==l.__key?k(l,R,1,m):(T=l,l=N(S,R,m),l.nextBase=l.nextBase||w,l._parentComponent=e,e._component=l,k(l,R,0,m),j(l,1,n,!0)),q=l.base}else c=x,T=P,T&&(c=e._component=null),(x||1===t)&&(c&&(c._component=null),q=O(c,u,m,n||!C,x&&x.parentNode,!0));if(x&&q!==x&&l!==P){var I=x.parentNode;I&&q!==I&&(I.replaceChild(q,x),T||(x._component=null,E(x)))}if(T&&_(T,q!==x),e.base=q,q&&!o){for(var M=e,D=e;D=D._parentComponent;)(M=D).base=q;q._component=M,q._componentConstructor=M.constructor}}!C||n?K.unshift(e):a||(e.componentDidUpdate&&e.componentDidUpdate(g,v,b),A.afterUpdate&&A.afterUpdate(e));var L,Q=e._renderCallbacks;if(Q)for(;L=Q.pop();)L.call(e);$||o||V()}}function I(e,t,n,r){for(var i=e&&e._component,o=i,s=e,a=i&&e._componentConstructor===t.nodeName,u=a,l=y(t);i&&!u&&(i=i._parentComponent);)u=i.constructor===t.nodeName;return i&&u&&(!r||i._component)?(k(i,l,3,n,r),e=i.base):(o&&!a&&(_(o,!0),e=s=null),i=N(t.nodeName,l,n),e&&!i.nextBase&&(i.nextBase=e,s=null),k(i,l,1,n,r),e=i.base,s&&e!==s&&(s._component=null,E(s))),e}function _(e,t){A.beforeUnmount&&A.beforeUnmount(e);var n=e.base;e._disable=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var r=e._component;if(r)_(r,t);else if(n){n[U]&&n[U].ref&&n[U].ref(null),e.nextBase=n,t&&(v(n),R(e));for(var i;i=n.lastChild;)E(i,!t)}e.__ref&&e.__ref(null),e.componentDidUnmount&&e.componentDidUnmount()}function M(e,t){this._dirty=!0,this.context=t,this.props=e,this.state||(this.state={})}function D(e,t,n){return O(n,e,{},!1,t)}var A={},L=[],Q=[],B={},z=function(e){return B[e]||(B[e]=e.toLowerCase())},F="undefined"!=typeof Promise&&Promise.resolve(),H=F?function(e){F.then(e)}:setTimeout,W={},U="undefined"!=typeof Symbol?Symbol.for("preactattr"):"__preactattr_",G={boxFlex:1,boxFlexGroup:1,columnCount:1,fillOpacity:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,fontWeight:1,lineClamp:1,lineHeight:1,opacity:1,order:1,orphans:1,strokeOpacity:1,widows:1,zIndex:1,zoom:1},J={blur:1,error:1,focus:1,load:1,resize:1,scroll:1},Z=[],X={},K=[],$=0,Y=!1,ee=!1,te={};r(M.prototype,{linkState:function(e,t){var n=this._linkedStates||(this._linkedStates={});return n[e+t]||(n[e+t]=c(this,e,t))},setState:function(e,t){var n=this.state;this.prevState||(this.prevState=i(n)),r(n,s(e)?e(n,this.props):e),t&&(this._renderCallbacks=this._renderCallbacks||[]).push(t),h(this)},forceUpdate:function(){j(this,2)},render:function(){}}),e.h=n,e.cloneElement=l,e.Component=M,e.render=D,e.rerender=p,e.options=A})},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(h===clearTimeout)return clearTimeout(e);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(e);try{return h(e)}catch(t){try{return h.call(null,e)}catch(t){return h.call(this,e)}}}function s(){m&&d&&(m=!1,d.length?f=d.concat(f):g=-1,f.length&&a())}function a(){if(!m){var e=i(s);m=!0;for(var t=f.length;t;){for(d=f,f=[];++g1)for(var n=1;n=0},t.prototype.valueFromDataCore=function(e){if(!e||!Array.isArray(e))return e;for(var t=0;t0&&e.size>this.maxSize&&this.errors.push(new a.d(this.maxSize)),(t!=this.errors.length||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback),this.errors.length>0},t.prototype.isFileImage=function(e){if(e&&e.type){return 0==e.type.toLowerCase().indexOf("image")}},t}(i.a);o.a.metaData.addClass("file",["showPreview:boolean","imageHeight","imageWidth","storeDataAsText:boolean","maxSize:number"],function(){return new l("")},"question"),s.a.Instance.registerQuestion("file",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(21),o=n(2),s=n(5),a=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.locHtmlValue=new a.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"html"},Object.defineProperty(t.prototype,"html",{get:function(){return this.locHtml.text},set:function(e){this.locHtml.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locHtml",{get:function(){return this.locHtmlValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedHtml",{get:function(){return this.survey?this.survey.processHtml(this.html):this.html},enumerable:!0,configurable:!0}),t}(i.a);o.a.metaData.addClass("html",[{name:"html:html",serializationProperty:"locHtml"}],function(){return new u("")},"questionbase"),s.a.Instance.registerQuestion("html",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(11),s=n(10),a=n(2),u=n(1),l=n(9),c=n(5);n.d(t,"a",function(){return h}),n.d(t,"b",function(){return p});var h=function(e){function t(t,n,r,i,o){var s=e.call(this)||this;return s.name=t,s.text=n,s.fullName=r,s.data=i,s.rowValue=o,s}return r.b(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.rowValue},set:function(e){this.rowValue=e,this.data&&this.data.onMatrixRowChanged(this),this.onValueChanged()},enumerable:!0,configurable:!0}),t.prototype.onValueChanged=function(){},t}(i.c),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.isRowChanging=!1,n.isAllRowRequired=!1,n.columnsValue=o.a.createArray(n),n.rowsValue=o.a.createArray(n),n}return r.b(t,e),t.prototype.getType=function(){return"matrix"},Object.defineProperty(t.prototype,"hasRows",{get:function(){return this.rowsValue.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columns",{get:function(){return this.columnsValue},set:function(e){o.a.setData(this.columnsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.rowsValue},set:function(e){o.a.setData(this.rowsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRows",{get:function(){var e=new Array,t=this.value;t||(t={});for(var n=0;nt.MaxRowCount)){if(this.rowCountValue=e,this.value&&this.value.length>e){var n=this.value;n.splice(e),this.value=n}this.fireCallback(this.rowCountChangedCallback)}},enumerable:!0,configurable:!0}),t.prototype.addRow=function(){this.generatedVisibleRows&&this.generatedVisibleRows.push(this.createMatrixRow(null)),this.rowCount++},t.prototype.removeRow=function(e){if(!(e<0||e>=this.rowCount)){if(this.generatedVisibleRows&&ethis.rowCount&&t.splice(this.rowCount-1);for(var n=t.length;n0){n=!1;break}return n?null:e},t.prototype.getRowValueByIndex=function(e,t){return t>=0&&t4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getRows=function(){for(var e=this.colCount,t=this.items,n=[],r=0,i=0;i=e&&(r=0);return n},t.prototype.onValueChanged=function(){e.prototype.onValueChanged.call(this),this.onItemValueChanged()},t.prototype.createTextItem=function(e,t){return new h(e,t)},t.prototype.onItemValueChanged=function(){if(!this.isMultipleItemValueChanging)for(var e=0;e0?this.rateValues:t.defaultRateValues},enumerable:!0,configurable:!0}),t.prototype.getType=function(){return"rating"},t.prototype.supportGoNextPageAutomatic=function(){return!0},t.prototype.supportComment=function(){return!0},t.prototype.supportOther=function(){return!0},Object.defineProperty(t.prototype,"minRateDescription",{get:function(){return this.locMinRateDescription.text},set:function(e){this.locMinRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMinRateDescription",{get:function(){return this.locMinRateDescriptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxRateDescription",{get:function(){return this.locMaxRateDescription.text},set:function(e){this.locMaxRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMaxRateDescription",{get:function(){return this.locMaxRateDescriptionValue},enumerable:!0,configurable:!0}),t}(o.a);l.defaultRateValues=[],i.a.setData(l.defaultRateValues,[1,2,3,4,5]),s.a.metaData.addClass("rating",["hasComment:boolean",{name:"rateValues:itemvalues",onGetValue:function(e){return i.a.getData(e.rateValues)},onSetValue:function(e,t){e.rateValues=t}},{name:"minRateDescription",alternativeName:"mininumRateDescription",serializationProperty:"locMinRateDescription"},{name:"maxRateDescription",alternativeName:"maximumRateDescription",serializationProperty:"locMaxRateDescription"}],function(){return new l("")},"question"),a.a.Instance.registerQuestion("rating",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(5),o=n(2),s=n(10),a=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.size=25,n.inputType="text",n.locPlaceHolderValue=new a.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"text"},t.prototype.isEmpty=function(){return e.prototype.isEmpty.call(this)||""==this.value},t.prototype.supportGoNextPageAutomatic=function(){return!0},Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),t.prototype.setNewValue=function(t){t=this.correctValueType(t),e.prototype.setNewValue.call(this,t)},t.prototype.correctValueType=function(e){return e&&("number"==this.inputType||"range"==this.inputType)?this.isNumber(e)?parseFloat(e):"":e},t.prototype.isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},t}(s.a);o.a.metaData.addClass("text",[{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]},{name:"size:number",default:25},{name:"placeHolder",serializationProperty:"locPlaceHolder"}],function(){return new u("")},"question"),i.a.Instance.registerQuestion("text",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(12),a=n(6);n.d(t,"a",function(){return u}),n.d(t,"b",function(){return l});var u=function(e){function t(t){var n=e.call(this,t)||this;n.state={choicesChanged:0};var r=n;return n.question.choicesChangedCallback=function(){r.state.choicesChanged=r.state.choicesChanged+1,r.setState(r.state)},n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.render=function(){return this.question?i.createElement("div",{className:this.css.root},this.getItems()):null},t.prototype.getItems=function(){for(var e=[],t=0;t-1&&t.splice(n,1),this.question.value=t,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.item||!this.question)return null;var e=this.question.colCount>0?100/this.question.colCount+"%":"",t=0==this.question.colCount?"5px":"0px",n={marginRight:t};e&&(n.width=e);var r=this.question.value&&this.question.value.indexOf(this.item.value)>-1||!1,i=this.item.value===this.question.otherItem.value&&r?this.renderOther():null;return this.renderCheckbox(r,n,i)},Object.defineProperty(t.prototype,"inputStyle",{get:function(){return{marginRight:"3px"}},enumerable:!0,configurable:!0}),t.prototype.renderCheckbox=function(e,t,n){var r=this.isFirst?this.question.inputId:null;return i.createElement("div",{className:this.css.item,style:t},i.createElement("label",{className:this.css.item},i.createElement("input",{type:"checkbox",id:r,style:this.inputStyle,disabled:this.isDisplayMode,checked:e,onChange:this.handleOnChange}),i.createElement("span",null,this.item.text)),n)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.css.other},i.createElement(s.a,{question:this.question,css:this.rootCss,isDisplayMode:this.isDisplayMode}))},t}(o.b);a.a.Instance.registerQuestion("checkbox",function(e){return i.createElement(u,e)})},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(12),a=n(6),u=n(82);n.d(t,"a",function(){return l});var l=function(e){function t(t){var n=e.call(this,t)||this;n.state={value:n.question.value,choicesChanged:0};var r=n;return n.question.choicesChangedCallback=function(){r.state.choicesChanged=r.state.choicesChanged+1,r.setState(r.state)},n.handleOnChange=n.handleOnChange.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.state.value=this.question.value},t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;var e=this.question.value===this.question.otherItem.value?this.renderOther():null,t=this.renderSelect();return i.createElement("div",{className:this.css.root},t,e)},t.prototype.renderSelect=function(){if(this.isDisplayMode)return i.createElement("div",{id:this.question.inputId,className:this.css.control},this.question.value);for(var e=[],t=0;t0?100/this.question.colCount+"%":"",i=0==this.question.colCount?"5px":"0px",o={marginRight:i};r&&(o.width=r);var s=this.question.value==t.value,a=s&&t.value===this.question.otherItem.value?this.renderOther():null;return this.renderRadio(e,t,s,o,a,n)},t.prototype.renderRadio=function(e,t,n,r,o,s){var a=s?this.question.inputId:null;return i.createElement("div",{key:e,className:this.css.item,style:r},i.createElement("label",{className:this.css.label},i.createElement("input",{id:a,type:"radio",name:this.question.name+"_"+this.questionBase.id,checked:n,value:t.value,disabled:this.isDisplayMode,onChange:this.handleOnChange}),i.createElement("span",{style:this.textStyle},t.text)),o)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.css.other},i.createElement(s.a,{question:this.question,css:this.rootCss,isDisplayMode:this.isDisplayMode}))},t}(o.a);a.a.Instance.registerQuestion("radiogroup",function(e){return i.createElement(u,e)})},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(12),a=n(6);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.handleOnChange=n.handleOnChange.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;for(var e=[],t=this.question.minRateDescription?this.question.minRateDescription+" ":"",n=this.question.maxRateDescription?" "+this.question.maxRateDescription:"",r=0;r-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},t.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"operator",{get:function(){return this.opValue},set:function(e){e&&(e=e.toLowerCase(),t.operators[e]&&(this.opValue=e))},enumerable:!0,configurable:!0}),t.prototype.check=function(e){t.operators[this.operator](e,this.value)?this.onSuccess():this.onFailure()},t.prototype.onSuccess=function(){},t.prototype.onFailure=function(){},t}(i.c);s.operatorsValue=null;var a=function(e){function t(){var t=e.call(this)||this;return t.owner=null,t}return r.b(t,e),t.prototype.setOwner=function(e){this.owner=e},Object.defineProperty(t.prototype,"isOnNextPage",{get:function(){return!1},enumerable:!0,configurable:!0}),t}(s),u=function(e){function t(){var t=e.call(this)||this;return t.pages=[],t.questions=[],t}return r.b(t,e),t.prototype.getType=function(){return"visibletrigger"},t.prototype.onSuccess=function(){this.onTrigger(this.onItemSuccess)},t.prototype.onFailure=function(){this.onTrigger(this.onItemFailure)},t.prototype.onTrigger=function(e){if(this.owner)for(var t=this.owner.getObjects(this.pages,this.questions),n=0;n :first-child { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; } + +.sv_q_rating > :last-child { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; } + +.sv_q_rating_item { + margin-left: -1px; + padding: 6px 12px; + margin-bottom: 0px; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid #ccc; } + +.sv_q_rating_item.active { + background-color: #d4d4d4; + border-color: #8c8c8c; } + +.sv_q_rating_item:hover { + background-color: #e6e6e6; + border-color: #adadad; } + +.sv_q_rating > .sv_q_rating_item input[type='radio'] { + position: absolute; + clip: rect(0px, 0px, 0px, 0px); + pointer-events: none; } diff --git a/0.12.8/survey.jquery.js b/0.12.8/survey.jquery.js new file mode 100644 index 00000000..d7bc3873 --- /dev/null +++ b/0.12.8/survey.jquery.js @@ -0,0 +1,11856 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("jquery")); + else if(typeof define === 'function' && define.amd) + define("Survey", ["jquery"], factory); + else if(typeof exports === 'object') + exports["Survey"] = factory(require("jquery")); + else + root["Survey"] = factory(root["jQuery"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_37__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ 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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 83); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __assign; }); +/* harmony export (immutable) */ __webpack_exports__["b"] = __extends; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __decorate; }); +var __assign = Object["assign"] || function (target) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + target[p] = s[p]; + } + return target; +}; +function __extends(thisClass, baseClass) { + for (var p in baseClass) + if (baseClass.hasOwnProperty(p)) + thisClass[p] = baseClass[p]; + function __() { this.constructor = thisClass; } + thisClass.prototype = baseClass === null ? Object.create(baseClass) : (__.prototype = baseClass.prototype, new __()); +} +; +var __decorate = function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyLocalization; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyStrings; }); +var surveyLocalization = { + currentLocale: "", + locales: {}, + getString: function (strName) { + var loc = this.currentLocale ? this.locales[this.currentLocale] : surveyStrings; + if (!loc || !loc[strName]) + loc = surveyStrings; + return loc[strName]; + }, + getLocales: function () { + var res = []; + res.push(""); + for (var key in this.locales) { + res.push(key); + } + res.sort(); + return res; + } +}; +var surveyStrings = { + pagePrevText: "Previous", + pageNextText: "Next", + completeText: "Complete", + otherItemText: "Other (describe)", + progressText: "Page {0} of {1}", + emptySurvey: "There is no visible page or question in the survey.", + completingSurvey: "Thank you for completing the survey!", + loadingSurvey: "Survey is loading...", + optionsCaption: "Choose...", + requiredError: "Please answer the question.", + requiredInAllRowsError: "Please answer questions in all rows.", + numericError: "The value should be numeric.", + textMinLength: "Please enter at least {0} symbols.", + textMaxLength: "Please enter less than {0} symbols.", + textMinMaxLength: "Please enter more than {0} and less than {1} symbols.", + minRowCountError: "Please fill in at least {0} rows.", + minSelectError: "Please select at least {0} variants.", + maxSelectError: "Please select no more than {0} variants.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "The '{0}' should be equal or more than {1}", + numericMax: "The '{0}' should be equal or less than {1}", + invalidEmail: "Please enter a valid e-mail address.", + urlRequestError: "The request returned error '{0}'. {1}", + urlGetChoicesError: "The request returned empty data or the 'path' property is incorrect", + exceedMaxSize: "The file size should not exceed {0}.", + otherRequiredError: "Please enter the other value.", + uploadingFile: "Your file is uploading. Please wait several seconds and try again.", + addRow: "Add row", + removeRow: "Remove", + choices_firstItem: "first item", + choices_secondItem: "second item", + choices_thirdItem: "third item", + matrix_column: "Column", + matrix_row: "Row" +}; +surveyLocalization.locales["en"] = surveyStrings; +if (!String.prototype["format"]) { + String.prototype["format"] = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match; + }); + }; +} + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.unstable_renderSubtreeIntoContainer = exports.PureComponent = exports.Component = exports.unmountComponentAtNode = exports.findDOMNode = exports.isValidElement = exports.cloneElement = exports.createElement = exports.createFactory = exports.createClass = exports.render = exports.Children = exports.PropTypes = exports.DOM = exports.version = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _proptypes = __webpack_require__(41); + +var _proptypes2 = _interopRequireDefault(_proptypes); + +var _preact = __webpack_require__(39); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var version = '15.1.0'; // trick libraries to think we are react + +var ELEMENTS = 'a abbr address area article aside audio b base bdi bdo big blockquote body br button canvas caption cite code col colgroup data datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hgroup hr html i iframe img input ins kbd keygen label legend li link main map mark menu menuitem meta meter nav noscript object ol optgroup option output p param picture pre progress q rp rt ruby s samp script section select small source span strong style sub summary sup table tbody td textarea tfoot th thead time title tr track u ul var video wbr circle clipPath defs ellipse g image line linearGradient mask path pattern polygon polyline radialGradient rect stop svg text tspan'.split(' '); + +var REACT_ELEMENT_TYPE = typeof Symbol !== 'undefined' && Symbol.for && Symbol.for('react.element') || 0xeac7; + +var COMPONENT_WRAPPER_KEY = typeof Symbol !== 'undefined' ? Symbol.for('__preactCompatWrapper') : '__preactCompatWrapper'; + +// don't autobind these methods since they already have guaranteed context. +var AUTOBIND_BLACKLIST = { + constructor: 1, + render: 1, + shouldComponentUpdate: 1, + componentWillReceiveProps: 1, + componentWillUpdate: 1, + componentDidUpdate: 1, + componentWillMount: 1, + componentDidMount: 1, + componentWillUnmount: 1, + componentDidUnmount: 1 +}; + +var CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip|color|fill|flood|font|glyph|horiz|marker|overline|paint|stop|strikethrough|stroke|text|underline|unicode|units|v|vert|word|writing|x)[A-Z]/; + +var BYPASS_HOOK = {}; + +/*global process*/ +var DEV = typeof process === 'undefined' || !process.env || process.env.NODE_ENV !== 'production'; + +// a component that renders nothing. Used to replace components for unmountComponentAtNode. +function EmptyComponent() { + return null; +} + +// make react think we're react. +var VNode = (0, _preact.h)('a', null).constructor; +VNode.prototype.$$typeof = REACT_ELEMENT_TYPE; +VNode.prototype.preactCompatUpgraded = false; +VNode.prototype.preactCompatNormalized = false; + +Object.defineProperty(VNode.prototype, 'type', { + get: function get() { + return this.nodeName; + }, + set: function set(v) { + this.nodeName = v; + }, + + configurable: true +}); + +Object.defineProperty(VNode.prototype, 'props', { + get: function get() { + return this.attributes; + }, + set: function set(v) { + this.attributes = v; + }, + + configurable: true +}); + +var oldEventHook = _preact.options.event; +_preact.options.event = function (e) { + if (oldEventHook) e = oldEventHook(e); + e.persist = Object; + e.nativeEvent = e; + return e; +}; + +var oldVnodeHook = _preact.options.vnode; +_preact.options.vnode = function (vnode) { + if (!vnode.preactCompatUpgraded) { + vnode.preactCompatUpgraded = true; + + var tag = vnode.nodeName, + attrs = vnode.attributes; + + if (!attrs) attrs = vnode.attributes = {}; + + if (typeof tag === 'function') { + if (tag[COMPONENT_WRAPPER_KEY] === true || tag.prototype && 'isReactComponent' in tag.prototype) { + if (vnode.children && !vnode.children.length) vnode.children = undefined; + if (vnode.children) attrs.children = vnode.children; + + if (!vnode.preactCompatNormalized) { + normalizeVNode(vnode); + } + handleComponentVNode(vnode); + } + } else { + if (vnode.children && !vnode.children.length) vnode.children = undefined; + if (vnode.children) attrs.children = vnode.children; + + if (attrs.defaultValue) { + if (!attrs.value && attrs.value !== 0) { + attrs.value = attrs.defaultValue; + } + delete attrs.defaultValue; + } + + handleElementVNode(vnode, attrs); + } + } + + if (oldVnodeHook) oldVnodeHook(vnode); +}; + +function handleComponentVNode(vnode) { + var tag = vnode.nodeName, + a = vnode.attributes; + + vnode.attributes = {}; + if (tag.defaultProps) extend(vnode.attributes, tag.defaultProps); + if (a) extend(vnode.attributes, a); +} + +function handleElementVNode(vnode, a) { + var shouldSanitize = void 0, + attrs = void 0, + i = void 0; + if (a) { + for (i in a) { + if (shouldSanitize = CAMEL_PROPS.test(i)) break; + }if (shouldSanitize) { + attrs = vnode.attributes = {}; + for (i in a) { + if (a.hasOwnProperty(i)) { + attrs[CAMEL_PROPS.test(i) ? i.replace(/([A-Z0-9])/, '-$1').toLowerCase() : i] = a[i]; + } + } + } + } +} + +// proxy render() since React returns a Component reference. +function render(vnode, parent, callback) { + var prev = parent && parent._preactCompatRendered; + + // ignore impossible previous renders + if (prev && prev.parentNode !== parent) prev = null; + + // default to first Element child + if (!prev) prev = parent.children[0]; + + // remove unaffected siblings + for (var i = parent.childNodes.length; i--;) { + if (parent.childNodes[i] !== prev) { + parent.removeChild(parent.childNodes[i]); + } + } + + var out = (0, _preact.render)(vnode, parent, prev); + if (parent) parent._preactCompatRendered = out; + if (typeof callback === 'function') callback(); + return out && out._component || out.base; +} + +var ContextProvider = function () { + function ContextProvider() { + _classCallCheck(this, ContextProvider); + } + + _createClass(ContextProvider, [{ + key: 'getChildContext', + value: function getChildContext() { + return this.props.context; + } + }, { + key: 'render', + value: function render(props) { + return props.children[0]; + } + }]); + + return ContextProvider; +}(); + +function renderSubtreeIntoContainer(parentComponent, vnode, container, callback) { + var wrap = (0, _preact.h)(ContextProvider, { context: parentComponent.context }, vnode); + var c = render(wrap, container); + if (callback) callback(c); + return c; +} + +function unmountComponentAtNode(container) { + var existing = container._preactCompatRendered; + if (existing && existing.parentNode === container) { + (0, _preact.render)((0, _preact.h)(EmptyComponent), container, existing); + return true; + } + return false; +} + +var ARR = []; + +// This API is completely unnecessary for Preact, so it's basically passthrough. +var Children = { + map: function map(children, fn, ctx) { + if (children == null) return null; + children = Children.toArray(children); + if (ctx && ctx !== children) fn = fn.bind(ctx); + return children.map(fn); + }, + forEach: function forEach(children, fn, ctx) { + if (children == null) return null; + children = Children.toArray(children); + if (ctx && ctx !== children) fn = fn.bind(ctx); + children.forEach(fn); + }, + count: function count(children) { + return children && children.length || 0; + }, + only: function only(children) { + children = Children.toArray(children); + if (children.length !== 1) throw new Error('Children.only() expects only one child.'); + return children[0]; + }, + toArray: function toArray(children) { + return Array.isArray && Array.isArray(children) ? children : ARR.concat(children); + } +}; + +/** Track current render() component for ref assignment */ +var currentComponent = void 0; + +function createFactory(type) { + return createElement.bind(null, type); +} + +var DOM = {}; +for (var i = ELEMENTS.length; i--;) { + DOM[ELEMENTS[i]] = createFactory(ELEMENTS[i]); +} + +function upgradeToVNodes(arr, offset) { + for (var _i = offset || 0; _i < arr.length; _i++) { + var obj = arr[_i]; + if (Array.isArray(obj)) { + upgradeToVNodes(obj); + } else if (obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && !isValidElement(obj) && (obj.props && obj.type || obj.attributes && obj.nodeName || obj.children)) { + arr[_i] = createElement(obj.type || obj.nodeName, obj.props || obj.attributes, obj.children); + } + } +} + +function isStatelessComponent(c) { + return typeof c === 'function' && !(c.prototype && c.prototype.render); +} + +// wraps stateless functional components in a PropTypes validator +function wrapStatelessComponent(WrappedComponent) { + return createClass({ + displayName: WrappedComponent.displayName || WrappedComponent.name, + render: function render() { + return WrappedComponent(this.props, this.context); + } + }); +} + +function statelessComponentHook(Ctor) { + var Wrapped = Ctor[COMPONENT_WRAPPER_KEY]; + if (Wrapped) return Wrapped === true ? Ctor : Wrapped; + + Wrapped = wrapStatelessComponent(Ctor); + + Object.defineProperty(Wrapped, COMPONENT_WRAPPER_KEY, { configurable: true, value: true }); + Wrapped.displayName = Ctor.displayName; + Wrapped.propTypes = Ctor.propTypes; + Wrapped.defaultProps = Ctor.defaultProps; + + Object.defineProperty(Ctor, COMPONENT_WRAPPER_KEY, { configurable: true, value: Wrapped }); + + return Wrapped; +} + +function createElement() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + upgradeToVNodes(args, 2); + return normalizeVNode(_preact.h.apply(undefined, args)); +} + +function normalizeVNode(vnode) { + vnode.preactCompatNormalized = true; + + applyClassName(vnode); + + if (isStatelessComponent(vnode.nodeName)) { + vnode.nodeName = statelessComponentHook(vnode.nodeName); + } + + var ref = vnode.attributes.ref, + type = ref && (typeof ref === 'undefined' ? 'undefined' : _typeof(ref)); + if (currentComponent && (type === 'string' || type === 'number')) { + vnode.attributes.ref = createStringRefProxy(ref, currentComponent); + } + + applyEventNormalization(vnode); + + return vnode; +} + +function cloneElement(element, props) { + if (!isValidElement(element)) return element; + var elementProps = element.attributes || element.props; + var node = (0, _preact.h)(element.nodeName || element.type, elementProps, element.children || elementProps && elementProps.children); + + for (var _len2 = arguments.length, children = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + children[_key2 - 2] = arguments[_key2]; + } + + return normalizeVNode(_preact.cloneElement.apply(undefined, [node, props].concat(children))); +} + +function isValidElement(element) { + return element && (element instanceof VNode || element.$$typeof === REACT_ELEMENT_TYPE); +} + +function createStringRefProxy(name, component) { + return component._refProxies[name] || (component._refProxies[name] = function (resolved) { + if (component && component.refs) { + component.refs[name] = resolved; + if (resolved === null) { + delete component._refProxies[name]; + component = null; + } + } + }); +} + +function applyEventNormalization(_ref) { + var nodeName = _ref.nodeName, + attributes = _ref.attributes; + + if (!attributes || typeof nodeName !== 'string') return; + var props = {}; + for (var _i2 in attributes) { + props[_i2.toLowerCase()] = _i2; + } + if (props.ondoubleclick) { + attributes.ondblclick = attributes[props.ondoubleclick]; + delete attributes[props.ondoubleclick]; + } + // for *textual inputs* (incl textarea), normalize `onChange` -> `onInput`: + if (props.onchange && (nodeName === 'textarea' || nodeName.toLowerCase() === 'input' && !/^fil|che|rad/i.test(attributes.type))) { + var normalized = props.oninput || 'oninput'; + if (!attributes[normalized]) { + attributes[normalized] = multihook([attributes[normalized], attributes[props.onchange]]); + delete attributes[props.onchange]; + } + } +} + +function applyClassName(_ref2) { + var attributes = _ref2.attributes; + + if (!attributes) return; + var cl = attributes.className || attributes.class; + if (cl) attributes.className = cl; +} + +function extend(base, props) { + for (var key in props) { + if (props.hasOwnProperty(key)) { + base[key] = props[key]; + } + } + return base; +} + +function shallowDiffers(a, b) { + for (var _i3 in a) { + if (!(_i3 in b)) return true; + }for (var _i4 in b) { + if (a[_i4] !== b[_i4]) return true; + }return false; +} + +function findDOMNode(component) { + return component && component.base || component; +} + +function F() {} + +function createClass(obj) { + function cl(props, context) { + bindAll(this); + Component.call(this, props, context, BYPASS_HOOK); + newComponentHook.call(this, props, context); + } + + obj = extend({ constructor: cl }, obj); + + // We need to apply mixins here so that getDefaultProps is correctly mixed + if (obj.mixins) { + applyMixins(obj, collateMixins(obj.mixins)); + } + if (obj.statics) { + extend(cl, obj.statics); + } + if (obj.propTypes) { + cl.propTypes = obj.propTypes; + } + if (obj.defaultProps) { + cl.defaultProps = obj.defaultProps; + } + if (obj.getDefaultProps) { + cl.defaultProps = obj.getDefaultProps(); + } + + F.prototype = Component.prototype; + cl.prototype = extend(new F(), obj); + + cl.displayName = obj.displayName || 'Component'; + + return cl; +} + +// Flatten an Array of mixins to a map of method name to mixin implementations +function collateMixins(mixins) { + var keyed = {}; + for (var _i5 = 0; _i5 < mixins.length; _i5++) { + var mixin = mixins[_i5]; + for (var key in mixin) { + if (mixin.hasOwnProperty(key) && typeof mixin[key] === 'function') { + (keyed[key] || (keyed[key] = [])).push(mixin[key]); + } + } + } + return keyed; +} + +// apply a mapping of Arrays of mixin methods to a component prototype +function applyMixins(proto, mixins) { + for (var key in mixins) { + if (mixins.hasOwnProperty(key)) { + proto[key] = multihook(mixins[key].concat(proto[key] || ARR), key === 'getDefaultProps' || key === 'getInitialState' || key === 'getChildContext'); + } + } +} + +function bindAll(ctx) { + for (var _i6 in ctx) { + var v = ctx[_i6]; + if (typeof v === 'function' && !v.__bound && !AUTOBIND_BLACKLIST.hasOwnProperty(_i6)) { + (ctx[_i6] = v.bind(ctx)).__bound = true; + } + } +} + +function callMethod(ctx, m, args) { + if (typeof m === 'string') { + m = ctx.constructor.prototype[m]; + } + if (typeof m === 'function') { + return m.apply(ctx, args); + } +} + +function multihook(hooks, skipDuplicates) { + return function () { + var ret = void 0; + for (var _i7 = 0; _i7 < hooks.length; _i7++) { + var r = callMethod(this, hooks[_i7], arguments); + + if (skipDuplicates && r != null) { + if (!ret) ret = {}; + for (var key in r) { + if (r.hasOwnProperty(key)) { + ret[key] = r[key]; + } + } + } else if (typeof r !== 'undefined') ret = r; + } + return ret; + }; +} + +function newComponentHook(props, context) { + propsHook.call(this, props, context); + this.componentWillReceiveProps = multihook([propsHook, this.componentWillReceiveProps || 'componentWillReceiveProps']); + this.render = multihook([propsHook, beforeRender, this.render || 'render', afterRender]); +} + +function propsHook(props, context) { + if (!props) return; + + // React annoyingly special-cases single children, and some react components are ridiculously strict about this. + var c = props.children; + if (c && Array.isArray(c) && c.length === 1) { + props.children = c[0]; + + // but its totally still going to be an Array. + if (props.children && _typeof(props.children) === 'object') { + props.children.length = 1; + props.children[0] = props.children; + } + } + + // add proptype checking + if (DEV) { + var ctor = typeof this === 'function' ? this : this.constructor, + propTypes = this.propTypes || ctor.propTypes; + if (propTypes) { + for (var prop in propTypes) { + if (propTypes.hasOwnProperty(prop) && typeof propTypes[prop] === 'function') { + var displayName = this.displayName || ctor.name; + var err = propTypes[prop](props, prop, displayName, 'prop'); + if (err) console.error(new Error(err.message || err)); + } + } + } + } +} + +function beforeRender(props) { + currentComponent = this; +} + +function afterRender() { + if (currentComponent === this) { + currentComponent = null; + } +} + +function Component(props, context, opts) { + _preact.Component.call(this, props, context); + this.state = this.getInitialState ? this.getInitialState() : {}; + this.refs = {}; + this._refProxies = {}; + if (opts !== BYPASS_HOOK) { + newComponentHook.call(this, props, context); + } +} +extend(Component.prototype = new _preact.Component(), { + constructor: Component, + + isReactComponent: {}, + + replaceState: function replaceState(state, callback) { + this.setState(state, callback); + for (var _i8 in this.state) { + if (!(_i8 in state)) { + delete this.state[_i8]; + } + } + }, + getDOMNode: function getDOMNode() { + return this.base; + }, + isMounted: function isMounted() { + return !!this.base; + } +}); + +function PureComponent(props, context) { + Component.call(this, props, context); +} +F.prototype = Component.prototype; +PureComponent.prototype = new F(); +PureComponent.prototype.shouldComponentUpdate = function (props, state) { + return shallowDiffers(this.props, props) || shallowDiffers(this.state, state); +}; + +exports.version = version; +exports.DOM = DOM; +exports.PropTypes = _proptypes2.default; +exports.Children = Children; +exports.render = render; +exports.createClass = createClass; +exports.createFactory = createFactory; +exports.createElement = createElement; +exports.cloneElement = cloneElement; +exports.isValidElement = isValidElement; +exports.findDOMNode = findDOMNode; +exports.unmountComponentAtNode = unmountComponentAtNode; +exports.Component = Component; +exports.PureComponent = PureComponent; +exports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer; +exports.default = { + version: version, + DOM: DOM, + PropTypes: _proptypes2.default, + Children: Children, + render: render, + createClass: createClass, + createFactory: createFactory, + createElement: createElement, + cloneElement: cloneElement, + isValidElement: isValidElement, + findDOMNode: findDOMNode, + unmountComponentAtNode: unmountComponentAtNode, + Component: Component, + PureComponent: PureComponent, + unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer +}; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(40))) + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return JsonObjectProperty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return JsonMetadataClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return JsonMetadata; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return JsonError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return JsonUnknownPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return JsonMissingTypeErrorBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return JsonMissingTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return JsonIncorrectTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return JsonRequiredPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return JsonObject; }); + +var JsonObjectProperty = (function () { + function JsonObjectProperty(name) { + this.name = name; + this.typeValue = null; + this.choicesValue = null; + this.choicesfunc = null; + this.className = null; + this.alternativeName = null; + this.classNamePart = null; + this.baseClassName = null; + this.defaultValue = null; + this.readOnly = false; + this.visible = true; + this.isLocalizable = false; + this.serializationProperty = null; + this.onGetValue = null; + } + Object.defineProperty(JsonObjectProperty.prototype, "type", { + get: function () { return this.typeValue ? this.typeValue : "string"; }, + set: function (value) { this.typeValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseGetValue", { + get: function () { return this.onGetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.isDefaultValue = function (value) { + return (this.defaultValue) ? (this.defaultValue == value) : !(value); + }; + JsonObjectProperty.prototype.getValue = function (obj) { + if (this.onGetValue) + return this.onGetValue(obj); + if (this.serializationProperty) + return obj[this.serializationProperty].getJson(); + return obj[this.name]; + }; + JsonObjectProperty.prototype.getPropertyValue = function (obj) { + if (this.isLocalizable) + return obj[this.serializationProperty].text; + return this.getValue(obj); + }; + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseSetValue", { + get: function () { return this.onSetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) { + if (this.onSetValue) { + this.onSetValue(obj, value, jsonConv); + } + else { + if (this.serializationProperty) + obj[this.serializationProperty].setJson(value); + else + obj[this.name] = value; + } + }; + JsonObjectProperty.prototype.getObjType = function (objType) { + if (!this.classNamePart) + return objType; + return objType.replace(this.classNamePart, ""); + }; + JsonObjectProperty.prototype.getClassName = function (className) { + return (this.classNamePart && className.indexOf(this.classNamePart) < 0) ? className + this.classNamePart : className; + }; + Object.defineProperty(JsonObjectProperty.prototype, "choices", { + get: function () { + if (this.choicesValue != null) + return this.choicesValue; + if (this.choicesfunc != null) + return this.choicesfunc(); + return null; + }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setChoices = function (value, valueFunc) { + this.choicesValue = value; + this.choicesfunc = valueFunc; + }; + return JsonObjectProperty; +}()); + +var JsonMetadataClass = (function () { + function JsonMetadataClass(name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + this.name = name; + this.creator = creator; + this.parentName = parentName; + this.properties = null; + this.requiredProperties = null; + this.properties = new Array(); + for (var i = 0; i < properties.length; i++) { + var prop = this.createProperty(properties[i]); + if (prop) { + this.properties.push(prop); + } + } + } + JsonMetadataClass.prototype.find = function (name) { + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == name) + return this.properties[i]; + } + return null; + }; + JsonMetadataClass.prototype.createProperty = function (propInfo) { + var propertyName = typeof propInfo === "string" ? propInfo : propInfo.name; + if (!propertyName) + return; + var propertyType = null; + var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol); + if (typeIndex > -1) { + propertyType = propertyName.substring(typeIndex + 1); + propertyName = propertyName.substring(0, typeIndex); + } + propertyName = this.getPropertyName(propertyName); + var prop = new JsonObjectProperty(propertyName); + if (propertyType) { + prop.type = propertyType; + } + if (typeof propInfo === "object") { + if (propInfo.type) { + prop.type = propInfo.type; + } + if (propInfo.default) { + prop.defaultValue = propInfo.default; + } + if (propInfo.visible === false) { + prop.visible = false; + } + if (propInfo.isRequired) { + this.makePropertyRequired(prop.name); + } + if (propInfo.choices) { + var choicesFunc = typeof propInfo.choices === "function" ? propInfo.choices : null; + var choicesValue = typeof propInfo.choices !== "function" ? propInfo.choices : null; + prop.setChoices(choicesValue, choicesFunc); + } + if (propInfo.onGetValue) { + prop.onGetValue = propInfo.onGetValue; + } + if (propInfo.onSetValue) { + prop.onSetValue = propInfo.onSetValue; + } + if (propInfo.serializationProperty) { + prop.serializationProperty = propInfo.serializationProperty; + var s; + if (prop.serializationProperty && prop.serializationProperty.indexOf("loc") == 0) { + prop.isLocalizable = true; + } + } + if (propInfo.isLocalizable) { + prop.isLocalizable = propInfo.isLocalizable; + } + if (propInfo.className) { + prop.className = propInfo.className; + } + if (propInfo.baseClassName) { + prop.baseClassName = propInfo.baseClassName; + } + if (propInfo.classNamePart) { + prop.classNamePart = propInfo.classNamePart; + } + if (propInfo.alternativeName) { + prop.alternativeName = propInfo.alternativeName; + } + } + return prop; + }; + JsonMetadataClass.prototype.getPropertyName = function (propertyName) { + if (propertyName.length == 0 || propertyName[0] != JsonMetadataClass.requiredSymbol) + return propertyName; + propertyName = propertyName.slice(1); + this.makePropertyRequired(propertyName); + return propertyName; + }; + JsonMetadataClass.prototype.makePropertyRequired = function (propertyName) { + if (!this.requiredProperties) { + this.requiredProperties = new Array(); + } + this.requiredProperties.push(propertyName); + }; + return JsonMetadataClass; +}()); + +JsonMetadataClass.requiredSymbol = '!'; +JsonMetadataClass.typeSymbol = ':'; +var JsonMetadata = (function () { + function JsonMetadata() { + this.classes = {}; + this.childrenClasses = {}; + this.classProperties = {}; + this.classRequiredProperties = {}; + } + JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName); + this.classes[name] = metaDataClass; + if (parentName) { + var children = this.childrenClasses[parentName]; + if (!children) { + this.childrenClasses[parentName] = []; + } + this.childrenClasses[parentName].push(metaDataClass); + } + return metaDataClass; + }; + JsonMetadata.prototype.overrideClassCreatore = function (name, creator) { + var metaDataClass = this.findClass(name); + if (metaDataClass) { + metaDataClass.creator = creator; + } + }; + JsonMetadata.prototype.getProperties = function (className) { + var properties = this.classProperties[className]; + if (!properties) { + properties = new Array(); + this.fillProperties(className, properties); + this.classProperties[className] = properties; + } + return properties; + }; + JsonMetadata.prototype.findProperty = function (className, propertyName) { + var properties = this.getProperties(className); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == propertyName) + return properties[i]; + } + return null; + }; + JsonMetadata.prototype.createClass = function (name) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return null; + return metaDataClass.creator(); + }; + JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) { + if (canBeCreated === void 0) { canBeCreated = false; } + var result = []; + this.fillChildrenClasses(name, canBeCreated, result); + return result; + }; + JsonMetadata.prototype.getRequiredProperties = function (name) { + var properties = this.classRequiredProperties[name]; + if (!properties) { + properties = new Array(); + this.fillRequiredProperties(name, properties); + this.classRequiredProperties[name] = properties; + } + return properties; + }; + JsonMetadata.prototype.addProperty = function (className, propertyInfo) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return; + var property = metaDataClass.createProperty(propertyInfo); + if (property) { + this.addPropertyToClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.removeProperty = function (className, propertyName) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return false; + var property = metaDataClass.find(propertyName); + if (property) { + this.removePropertyFromClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) { + if (metaDataClass.find(property.name) != null) + return; + metaDataClass.properties.push(property); + }; + JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) { + var index = metaDataClass.properties.indexOf(property); + if (index < 0) + return; + metaDataClass.properties.splice(index, 1); + if (metaDataClass.requiredProperties) { + index = metaDataClass.requiredProperties.indexOf(property.name); + if (index >= 0) { + metaDataClass.requiredProperties.splice(index, 1); + } + } + }; + JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) { + this.classProperties[metaDataClass.name] = null; + var childClasses = this.getChildrenClasses(metaDataClass.name); + for (var i = 0; i < childClasses.length; i++) { + this.classProperties[childClasses[i].name] = null; + } + }; + JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) { + var children = this.childrenClasses[name]; + if (!children) + return; + for (var i = 0; i < children.length; i++) { + if (!canBeCreated || children[i].creator) { + result.push(children[i]); + } + this.fillChildrenClasses(children[i].name, canBeCreated, result); + } + }; + JsonMetadata.prototype.findClass = function (name) { + return this.classes[name]; + }; + JsonMetadata.prototype.fillProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.parentName) { + this.fillProperties(metaDataClass.parentName, list); + } + for (var i = 0; i < metaDataClass.properties.length; i++) { + this.addPropertyCore(metaDataClass.properties[i], list, list.length); + } + }; + JsonMetadata.prototype.addPropertyCore = function (property, list, endIndex) { + var index = -1; + for (var i = 0; i < endIndex; i++) { + if (list[i].name == property.name) { + index = i; + break; + } + } + if (index < 0) { + list.push(property); + } + else { + list[index] = property; + } + }; + JsonMetadata.prototype.fillRequiredProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.requiredProperties) { + Array.prototype.push.apply(list, metaDataClass.requiredProperties); + } + if (metaDataClass.parentName) { + this.fillRequiredProperties(metaDataClass.parentName, list); + } + }; + return JsonMetadata; +}()); + +var JsonError = (function () { + function JsonError(type, message) { + this.type = type; + this.message = message; + this.description = ""; + this.at = -1; + } + JsonError.prototype.getFullDescription = function () { + return this.message + (this.description ? "\n" + this.description : ""); + }; + return JsonError; +}()); + +var JsonUnknownPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonUnknownPropertyError, _super); + function JsonUnknownPropertyError(propertyName, className) { + var _this = _super.call(this, "unknownproperty", "The property '" + propertyName + "' in class '" + className + "' is unknown.") || this; + _this.propertyName = propertyName; + _this.className = className; + var properties = JsonObject.metaData.getProperties(className); + if (properties) { + _this.description = "The list of available properties are: "; + for (var i = 0; i < properties.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += properties[i].name; + } + _this.description += '.'; + } + return _this; + } + return JsonUnknownPropertyError; +}(JsonError)); + +var JsonMissingTypeErrorBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeErrorBase, _super); + function JsonMissingTypeErrorBase(baseClassName, type, message) { + var _this = _super.call(this, type, message) || this; + _this.baseClassName = baseClassName; + _this.type = type; + _this.message = message; + _this.description = "The following types are available: "; + var types = JsonObject.metaData.getChildrenClasses(baseClassName, true); + for (var i = 0; i < types.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += "'" + types[i].name + "'"; + } + _this.description += "."; + return _this; + } + return JsonMissingTypeErrorBase; +}(JsonError)); + +var JsonMissingTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeError, _super); + function JsonMissingTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "missingtypeproperty", "The property type is missing in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonMissingTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonIncorrectTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonIncorrectTypeError, _super); + function JsonIncorrectTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "incorrecttypeproperty", "The property type is incorrect in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonIncorrectTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonRequiredPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonRequiredPropertyError, _super); + function JsonRequiredPropertyError(propertyName, className) { + var _this = _super.call(this, "requiredproperty", "The property '" + propertyName + "' is required in class '" + className + "'.") || this; + _this.propertyName = propertyName; + _this.className = className; + return _this; + } + return JsonRequiredPropertyError; +}(JsonError)); + +var JsonObject = (function () { + function JsonObject() { + this.errors = new Array(); + } + Object.defineProperty(JsonObject, "metaData", { + get: function () { return JsonObject.metaDataValue; }, + enumerable: true, + configurable: true + }); + JsonObject.prototype.toJsonObject = function (obj) { + return this.toJsonObjectCore(obj, null); + }; + JsonObject.prototype.toObject = function (jsonObj, obj) { + if (!jsonObj) + return; + var properties = null; + if (obj.getType) { + properties = JsonObject.metaData.getProperties(obj.getType()); + } + if (!properties) + return; + for (var key in jsonObj) { + if (key == JsonObject.typePropertyName) + continue; + if (key == JsonObject.positionPropertyName) { + obj[key] = jsonObj[key]; + continue; + } + var property = this.findProperty(properties, key); + if (!property) { + this.addNewError(new JsonUnknownPropertyError(key.toString(), obj.getType()), jsonObj); + continue; + } + this.valueToObj(jsonObj[key], obj, key, property); + } + }; + JsonObject.prototype.toJsonObjectCore = function (obj, property) { + if (!obj.getType) + return obj; + var result = {}; + if (property != null && (!property.className)) { + result[JsonObject.typePropertyName] = property.getObjType(obj.getType()); + } + var properties = JsonObject.metaData.getProperties(obj.getType()); + for (var i = 0; i < properties.length; i++) { + this.valueToJson(obj, result, properties[i]); + } + return result; + }; + JsonObject.prototype.valueToJson = function (obj, result, property) { + var value = property.getValue(obj); + if (value === undefined || value === null) + return; + if (property.isDefaultValue(value)) + return; + if (this.isValueArray(value)) { + var arrValue = []; + for (var i = 0; i < value.length; i++) { + arrValue.push(this.toJsonObjectCore(value[i], property)); + } + value = arrValue.length > 0 ? arrValue : null; + } + else { + value = this.toJsonObjectCore(value, property); + } + if (!property.isDefaultValue(value)) { + result[property.name] = value; + } + }; + JsonObject.prototype.valueToObj = function (value, obj, key, property) { + if (value == null) + return; + if (property != null && property.hasToUseSetValue) { + property.setValue(obj, value, this); + return; + } + if (this.isValueArray(value)) { + this.valueToArray(value, obj, property.name, property); + return; + } + var newObj = this.createNewObj(value, property); + if (newObj.newObj) { + this.toObject(value, newObj.newObj); + value = newObj.newObj; + } + if (!newObj.error) { + obj[property.name] = value; + } + }; + JsonObject.prototype.isValueArray = function (value) { return value && Array.isArray(value); }; + JsonObject.prototype.createNewObj = function (value, property) { + var result = { newObj: null, error: null }; + var className = value[JsonObject.typePropertyName]; + if (!className && property != null && property.className) { + className = property.className; + } + className = property.getClassName(className); + result.newObj = (className) ? JsonObject.metaData.createClass(className) : null; + result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className); + return result; + }; + JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) { + var error = null; + if (newObj) { + var requiredProperties = JsonObject.metaData.getRequiredProperties(className); + if (requiredProperties) { + for (var i = 0; i < requiredProperties.length; i++) { + if (!value[requiredProperties[i]]) { + error = new JsonRequiredPropertyError(requiredProperties[i], className); + break; + } + } + } + } + else { + if (property.baseClassName) { + if (!className) { + error = new JsonMissingTypeError(property.name, property.baseClassName); + } + else { + error = new JsonIncorrectTypeError(property.name, property.baseClassName); + } + } + } + if (error) { + this.addNewError(error, value); + } + return error; + }; + JsonObject.prototype.addNewError = function (error, jsonObj) { + if (jsonObj && jsonObj[JsonObject.positionPropertyName]) { + error.at = jsonObj[JsonObject.positionPropertyName].start; + } + this.errors.push(error); + }; + JsonObject.prototype.valueToArray = function (value, obj, key, property) { + if (obj[key] && value.length > 0) + obj[key].splice(0, obj[key].length); + for (var i = 0; i < value.length; i++) { + var newValue = this.createNewObj(value[i], property); + if (newValue.newObj) { + obj[key].push(newValue.newObj); + this.toObject(value[i], newValue.newObj); + } + else { + if (!newValue.error) { + obj[key].push(value[i]); + } + } + } + }; + JsonObject.prototype.findProperty = function (properties, key) { + if (!properties) + return null; + for (var i = 0; i < properties.length; i++) { + var prop = properties[i]; + if (prop.name == key || prop.alternativeName == key) + return prop; + } + return null; + }; + return JsonObject; +}()); + +JsonObject.typePropertyName = "type"; +JsonObject.positionPropertyName = "pos"; +JsonObject.metaDataValue = new JsonMetadata(); + + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Base; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyPageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return Event; }); +var Base = (function () { + function Base() { + } + Base.prototype.getType = function () { + throw new Error('This method is abstract'); + }; + Base.prototype.isTwoValueEquals = function (x, y) { + if (x === y) + return true; + if (!(x instanceof Object) || !(y instanceof Object)) + return false; + for (var p in x) { + if (!x.hasOwnProperty(p)) + continue; + if (!y.hasOwnProperty(p)) + return false; + if (x[p] === y[p]) + continue; + if (typeof (x[p]) !== "object") + return false; + if (!this.isTwoValueEquals(x[p], y[p])) + return false; + } + for (p in y) { + if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) + return false; + } + return true; + }; + return Base; +}()); + +var SurveyError = (function () { + function SurveyError() { + } + SurveyError.prototype.getText = function () { + throw new Error('This method is abstract'); + }; + return SurveyError; +}()); + +var SurveyPageId; +SurveyPageId = "sq_page"; +var SurveyElement = (function () { + function SurveyElement() { + } + SurveyElement.ScrollElementToTop = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (!el || !el.scrollIntoView) + return false; + var elemTop = el.getBoundingClientRect().top; + if (elemTop < 0) + el.scrollIntoView(); + return elemTop < 0; + }; + SurveyElement.GetFirstNonTextElement = function (elements) { + if (!elements || !elements.length) + return; + for (var i = 0; i < elements.length; i++) { + if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") + return elements[i]; + } + return null; + }; + SurveyElement.FocusElement = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (el) { + el.focus(); + return true; + } + return false; + }; + return SurveyElement; +}()); + +var Event = (function () { + function Event() { + } + Object.defineProperty(Event.prototype, "isEmpty", { + get: function () { return this.callbacks == null || this.callbacks.length == 0; }, + enumerable: true, + configurable: true + }); + Event.prototype.fire = function (sender, options) { + if (this.callbacks == null) + return; + for (var i = 0; i < this.callbacks.length; i++) { + var callResult = this.callbacks[i](sender, options); + } + }; + Event.prototype.add = function (func) { + if (this.callbacks == null) { + this.callbacks = new Array(); + } + this.callbacks.push(func); + }; + Event.prototype.remove = function (func) { + if (this.callbacks == null) + return; + var index = this.callbacks.indexOf(func, 0); + if (index != undefined) { + this.callbacks.splice(index, 1); + } + }; + return Event; +}()); + + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ElementFactory; }); + +//TODO replace completely with ElementFactory +var QuestionFactory = (function () { + function QuestionFactory() { + this.creatorHash = {}; + } + Object.defineProperty(QuestionFactory, "DefaultChoices", { + get: function () { + return ["1|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_firstItem"), "2|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_secondItem"), "3|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_thirdItem")]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultColums", { + get: function () { + var colName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_column") + " "; + return [colName + "1", colName + "2", colName + "3"]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultRows", { + get: function () { + var rowName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_row") + " "; + return [rowName + "1", rowName + "2"]; + }, + enumerable: true, + configurable: true + }); + QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + QuestionFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + QuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + QuestionFactory.prototype.createQuestion = function (questionType, name) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(name); + }; + return QuestionFactory; +}()); + +QuestionFactory.Instance = new QuestionFactory(); +var ElementFactory = (function () { + function ElementFactory() { + this.creatorHash = {}; + } + ElementFactory.prototype.registerElement = function (elementType, elementCreator) { + this.creatorHash[elementType] = elementCreator; + }; + ElementFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + ElementFactory.prototype.getAllTypes = function () { + var result = QuestionFactory.Instance.getAllTypes(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ElementFactory.prototype.createElement = function (elementType, name) { + var creator = this.creatorHash[elementType]; + if (creator == null) + return QuestionFactory.Instance.createQuestion(elementType, name); + return creator(name); + }; + return ElementFactory; +}()); + +ElementFactory.Instance = new ElementFactory(); + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ReactQuestionFactory; }); +var ReactQuestionFactory = (function () { + function ReactQuestionFactory() { + this.creatorHash = {}; + } + ReactQuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + ReactQuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ReactQuestionFactory.prototype.createQuestion = function (questionType, params) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(params); + }; + return ReactQuestionFactory; +}()); + +ReactQuestionFactory.Instance = new ReactQuestionFactory(); + + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LocalizableString; }); +var LocalizableString = (function () { + function LocalizableString(owner) { + this.owner = owner; + this.values = {}; + } + Object.defineProperty(LocalizableString.prototype, "locale", { + get: function () { return this.owner ? this.owner.getLocale() : ""; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LocalizableString.prototype, "text", { + get: function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return ""; + var loc = this.locale; + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + if (!res && loc !== LocalizableString.defaultLocale) { + res = this.values[LocalizableString.defaultLocale]; + } + return res ? res : this.values[keys[0]]; + }, + set: function (value) { + this.setLocaleText(this.locale, value); + }, + enumerable: true, + configurable: true + }); + LocalizableString.prototype.getLocaleText = function (loc) { + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + return res ? res : ""; + }; + LocalizableString.prototype.setLocaleText = function (loc, value) { + if (!loc) + loc = LocalizableString.defaultLocale; + if (!value) { + if (this.values[loc]) + delete this.values[loc]; + } + else { + if (typeof value === 'string') { + if (loc != LocalizableString.defaultLocale && value == this.getLocaleText(LocalizableString.defaultLocale)) { + this.setLocaleText(loc, null); + } + else { + this.values[loc] = value; + if (loc == LocalizableString.defaultLocale) { + this.deleteValuesEqualsToDefault(value); + } + } + } + } + }; + LocalizableString.prototype.getJson = function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return null; + if (keys.length == 1 && keys[0] == LocalizableString.defaultLocale) + return this.values[keys[0]]; + return this.values; + }; + LocalizableString.prototype.setJson = function (value) { + this.values = {}; + if (!value) + return; + if (typeof value === 'string') { + this.setLocaleText(null, value); + } + else { + for (var key in value) { + this.setLocaleText(key, value[key]); + } + } + }; + LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) { + var keys = Object.keys(this.values); + for (var i = 0; i < keys.length; i++) { + if (keys[i] == LocalizableString.defaultLocale) + continue; + if (this.values[keys[i]] == defaultValue) + delete this.values[keys[i]]; + } + }; + return LocalizableString; +}()); + +LocalizableString.defaultLocale = "default"; + + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyElementBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionElementBase; }); + + +var SurveyElementBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyElementBase, _super); + function SurveyElementBase(props) { + var _this = _super.call(this, props) || this; + _this.css = props.css; + _this.rootCss = props.rootCss; + _this.isDisplayMode = props.isDisplayMode || false; + return _this; + } + SurveyElementBase.prototype.componentWillReceiveProps = function (nextProps) { + this.css = nextProps.css; + this.rootCss = nextProps.rootCss; + this.isDisplayMode = nextProps.isDisplayMode || false; + }; + return SurveyElementBase; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyQuestionElementBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionElementBase, _super); + function SurveyQuestionElementBase(props) { + var _this = _super.call(this, props) || this; + _this.questionBase = props.question; + _this.creator = props.creator; + return _this; + } + SurveyQuestionElementBase.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.questionBase = nextProps.question; + this.creator = nextProps.creator; + }; + SurveyQuestionElementBase.prototype.shouldComponentUpdate = function () { + return !this.questionBase.customWidget || !!this.questionBase.customWidget.widgetJson.render; + }; + return SurveyQuestionElementBase; +}(SurveyElementBase)); + + + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AnswerRequiredError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return RequreNumericError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ExceedSizeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return CustomError; }); + + + +var AnswerRequiredError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerRequiredError, _super); + function AnswerRequiredError() { + return _super.call(this) || this; + } + AnswerRequiredError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("requiredError"); + }; + return AnswerRequiredError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + +var RequreNumericError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RequreNumericError, _super); + function RequreNumericError() { + return _super.call(this) || this; + } + RequreNumericError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("numericError"); + }; + return RequreNumericError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + +var ExceedSizeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ExceedSizeError, _super); + function ExceedSizeError(maxSize) { + var _this = _super.call(this) || this; + _this.maxSize = maxSize; + return _this; + } + ExceedSizeError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("exceedMaxSize")["format"](this.getTextSize()); + }; + ExceedSizeError.prototype.getTextSize = function () { + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + var fixed = [0, 0, 2, 3, 3]; + if (this.maxSize == 0) + return '0 Byte'; + var i = Math.floor(Math.log(this.maxSize) / Math.log(1024)); + var value = this.maxSize / Math.pow(1024, i); + return value.toFixed(fixed[i]) + ' ' + sizes[i]; + }; + return ExceedSizeError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + +var CustomError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](CustomError, _super); + function CustomError(text) { + var _this = _super.call(this) || this; + _this.text = text; + return _this; + } + CustomError.prototype.getText = function () { + return this.text; + }; + return CustomError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + + + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionbase__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__validator__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Question; }); + + + + + + + + + +var Question = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Question, _super); + function Question(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRequiredValue = false; + _this.hasCommentValue = false; + _this.hasOtherValue = false; + _this.readOnlyValue = false; + _this.errors = []; + _this.validators = new Array(); + _this.isvalueChangedCallbackFiring = false; + _this.isValueChangedInSurvey = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + _this.locCommentTextValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(Question.prototype, "hasTitle", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasInput", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "inputId", { + get: function () { return this.id + "i"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "title", { + get: function () { + var res = this.locTitle.text; + return res ? res : this.name; + }, + set: function (newValue) { + this.locTitle.text = newValue; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locCommentText", { + get: function () { return this.locCommentTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "processedTitle", { + get: function () { return this.survey != null ? this.survey.processText(this.title) : this.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "fullTitle", { + get: function () { + if (this.survey && this.survey.questionTitleTemplate) { + if (!this.textPreProcessor) { + var self = this; + this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__["a" /* TextPreProcessor */](); + this.textPreProcessor.onHasValue = function (name) { return self.canProcessedTextValues(name.toLowerCase()); }; + this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + } + return this.textPreProcessor.process(this.survey.questionTitleTemplate); + } + var requireText = this.requiredText; + if (requireText) + requireText += " "; + var no = this.no; + if (no) + no += ". "; + return no + requireText + this.processedTitle; + }, + enumerable: true, + configurable: true + }); + Question.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + __WEBPACK_IMPORTED_MODULE_3__base__["a" /* SurveyElement */].ScrollElementToTop(this.id); + var id = !onError ? this.getFirstInputElementId() : this.getFirstErrorInputElementId(); + if (__WEBPACK_IMPORTED_MODULE_3__base__["a" /* SurveyElement */].FocusElement(id)) { + this.fireCallback(this.focusCallback); + } + }; + Question.prototype.getFirstInputElementId = function () { + return this.inputId; + }; + Question.prototype.getFirstErrorInputElementId = function () { + return this.getFirstInputElementId(); + }; + Question.prototype.canProcessedTextValues = function (name) { + return name == "no" || name == "title" || name == "require"; + }; + Question.prototype.getProcessedTextValue = function (name) { + if (name == "no") + return this.no; + if (name == "title") + return this.processedTitle; + if (name == "require") + return this.requiredText; + return null; + }; + Question.prototype.supportComment = function () { return false; }; + Question.prototype.supportOther = function () { return false; }; + Object.defineProperty(Question.prototype, "isRequired", { + get: function () { return this.isRequiredValue; }, + set: function (val) { + if (this.isRequired == val) + return; + this.isRequiredValue = val; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasComment", { + get: function () { return this.hasCommentValue; }, + set: function (val) { + if (!this.supportComment()) + return; + this.hasCommentValue = val; + if (this.hasComment) + this.hasOther = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "commentText", { + get: function () { + var res = this.locCommentText.text; + return res ? res : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + }, + set: function (value) { + this.locCommentText.text = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasOther", { + get: function () { return this.hasOtherValue; }, + set: function (val) { + if (!this.supportOther() || this.hasOther == val) + return; + this.hasOtherValue = val; + if (this.hasOther) + this.hasComment = false; + this.hasOtherChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.hasOtherChanged = function () { }; + Object.defineProperty(Question.prototype, "isReadOnly", { + get: function () { return this.readOnly || (this.survey && this.survey.isDisplayMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "readOnly", { + get: function () { return this.readOnlyValue; }, + set: function (value) { + if (this.readOnly == value) + return; + this.readOnlyValue = value; + this.readOnlyChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.readOnlyChanged = function () { + this.fireCallback(this.readOnlyChangedCallback); + }; + Object.defineProperty(Question.prototype, "no", { + get: function () { + if (this.visibleIndex < 0) + return ""; + var startIndex = 1; + var isNumeric = true; + var str = ""; + if (this.survey && this.survey.questionStartIndex) { + str = this.survey.questionStartIndex; + if (parseInt(str)) + startIndex = parseInt(str); + else if (str.length == 1) + isNumeric = false; + } + if (isNumeric) + return (this.visibleIndex + startIndex).toString(); + return String.fromCharCode(str.charCodeAt(0) + this.visibleIndex); + }, + enumerable: true, + configurable: true + }); + Question.prototype.onSetData = function () { + _super.prototype.onSetData.call(this); + this.onSurveyValueChanged(this.value); + }; + Object.defineProperty(Question.prototype, "value", { + get: function () { + return this.valueFromData(this.getValueCore()); + }, + set: function (newValue) { + this.setNewValue(newValue); + if (this.isvalueChangedCallbackFiring) + return; + this.isvalueChangedCallbackFiring = true; + this.fireCallback(this.valueChangedCallback); + this.isvalueChangedCallbackFiring = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "comment", { + get: function () { return this.getComment(); }, + set: function (newValue) { + if (this.comment == newValue) + return; + this.setComment(newValue); + this.fireCallback(this.commentChangedCallback); + }, + enumerable: true, + configurable: true + }); + Question.prototype.getComment = function () { return this.data != null ? this.data.getComment(this.name) : this.questionComment; }; + Question.prototype.setComment = function (newValue) { + this.setNewComment(newValue); + }; + Question.prototype.isEmpty = function () { return this.value == null; }; + Question.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + this.checkForErrors(fireCallback); + return this.errors.length > 0; + }; + Object.defineProperty(Question.prototype, "currentErrorCount", { + get: function () { return this.errors.length; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "requiredText", { + get: function () { return this.survey != null && this.isRequired ? this.survey.requiredText : ""; }, + enumerable: true, + configurable: true + }); + Question.prototype.addError = function (error) { + this.errors.push(error); + this.fireCallback(this.errorsChangedCallback); + }; + Question.prototype.checkForErrors = function (fireCallback) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + this.onCheckForErrors(this.errors); + if (this.errors.length == 0 && this.value) { + var error = this.runValidators(); + if (error) { + this.errors.push(error); + } + } + if (this.survey && this.errors.length == 0) { + var error = this.survey.validateQuestion(this.name); + if (error) { + this.errors.push(error); + } + } + if (fireCallback && (errorLength != this.errors.length || errorLength > 0)) { + this.fireCallback(this.errorsChangedCallback); + } + }; + Question.prototype.onCheckForErrors = function (errors) { + if (this.hasRequiredError()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* AnswerRequiredError */]()); + } + }; + Question.prototype.hasRequiredError = function () { + return this.isRequired && this.isEmpty(); + }; + Question.prototype.runValidators = function () { + return new __WEBPACK_IMPORTED_MODULE_6__validator__["a" /* ValidatorRunner */]().run(this); + }; + Question.prototype.setNewValue = function (newValue) { + this.setNewValueInData(newValue); + this.onValueChanged(); + }; + Question.prototype.setNewValueInData = function (newValue) { + if (!this.isValueChangedInSurvey) { + newValue = this.valueToData(newValue); + this.setValueCore(newValue); + } + }; + Question.prototype.getValueCore = function () { + return this.data != null ? this.data.getValue(this.name) : this.questionValue; + }; + Question.prototype.setValueCore = function (newValue) { + if (this.data != null) { + this.data.setValue(this.name, newValue); + } + else { + this.questionValue = newValue; + } + }; + Question.prototype.valueFromData = function (val) { return val; }; + Question.prototype.valueToData = function (val) { return val; }; + Question.prototype.onValueChanged = function () { }; + Question.prototype.setNewComment = function (newValue) { + if (this.data != null) { + this.data.setComment(this.name, newValue); + } + else + this.questionComment = newValue; + }; + //IQuestion + Question.prototype.onSurveyValueChanged = function (newValue) { + this.isValueChangedInSurvey = true; + this.value = this.valueFromData(newValue); + this.fireCallback(this.commentChangedCallback); + this.isValueChangedInSurvey = false; + }; + //IValidatorOwner + Question.prototype.getValidatorTitle = function () { return null; }; + return Question; +}(__WEBPACK_IMPORTED_MODULE_2__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("question", [{ name: "title:text", serializationProperty: "locTitle" }, + { name: "commentText", serializationProperty: "locCommentText" }, + "isRequired:boolean", "readOnly:boolean", { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], null, "questionbase"); + + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemValue; }); + +var ItemValue = (function () { + function ItemValue(value, text) { + if (text === void 0) { text = null; } + this.locTextValue = new __WEBPACK_IMPORTED_MODULE_0__localizablestring__["a" /* LocalizableString */](null); + if (text) + this.locText.text = text; + this.value = value; + } + ItemValue.createArray = function (locOwner) { + var items = []; + ItemValue.setupArray(items, locOwner); + return items; + }; + ItemValue.setupArray = function (items, locOwner) { + items.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = locOwner; + return result; + }; + items.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = locOwner; + } + return result; + var _a; + }; + }; + ItemValue.setData = function (items, values) { + items.length = 0; + for (var i = 0; i < values.length; i++) { + var value = values[i]; + var item = new ItemValue(null); + item.setData(value); + items.push(item); + } + }; + ItemValue.getData = function (items) { + var result = new Array(); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item.hasText) { + result.push({ value: item.value, text: item.locText.getJson() }); + } + else { + result.push(item.value); + } + } + return result; + }; + ItemValue.getItemByValue = function (items, val) { + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return items[i]; + } + return null; + }; + ItemValue.prototype.getType = function () { return "itemvalue"; }; + Object.defineProperty(ItemValue.prototype, "locText", { + get: function () { return this.locTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "locOwner", { + get: function () { return this.locText.owner; }, + set: function (value) { this.locText.owner = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "value", { + get: function () { return this.itemValue; }, + set: function (newValue) { + this.itemValue = newValue; + if (!this.itemValue) + return; + var str = this.itemValue.toString(); + var index = str.indexOf(ItemValue.Separator); + if (index > -1) { + this.itemValue = str.slice(0, index); + this.text = str.slice(index + 1); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "hasText", { + get: function () { return this.locText.text ? true : false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "text", { + get: function () { + if (this.hasText) + return this.locText.text; + if (this.value) + return this.value.toString(); + return null; + }, + set: function (newText) { + this.locText.text = newText; + }, + enumerable: true, + configurable: true + }); + ItemValue.prototype.setData = function (value) { + if (typeof (value.value) !== 'undefined') { + var exception = null; + if (this.isObjItemValue(value)) { + value.itemValue = value.itemValue; + this.locText.setJson(value.locText.getJson()); + exception = ItemValue.itemValueProp; + } + this.copyAttributes(value, exception); + } + else { + this.value = value; + } + }; + ItemValue.prototype.isObjItemValue = function (obj) { return typeof (obj.getType) !== 'undefined' && obj.getType() == 'itemvalue'; }; + ItemValue.prototype.copyAttributes = function (src, exceptons) { + for (var key in src) { + if ((typeof src[key] == 'function')) + continue; + if (exceptons && exceptons.indexOf(key) > -1) + continue; + if (key == "text") { + this.locText.setJson(src[key]); + } + else { + this[key] = src[key]; + } + } + }; + return ItemValue; +}()); + +ItemValue.Separator = '|'; +ItemValue.itemValueProp = ["text", "value", "hasText", "locOwner", "locText"]; + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionComment; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionCommentItem; }); + + + + +var SurveyQuestionComment = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionComment, _super); + function SurveyQuestionComment(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionComment.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionComment.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state = { value: this.question.value || '' }; + }; + SurveyQuestionComment.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionComment.prototype.handleOnBlur = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value || '' }); + }; + SurveyQuestionComment.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css }, this.question.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("textarea", { id: this.question.inputId, className: this.css, type: "text", value: this.state.value, placeholder: this.question.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange, cols: this.question.cols, rows: this.question.rows })); + }; + return SurveyQuestionComment; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionCommentItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCommentItem, _super); + function SurveyQuestionCommentItem(props) { + var _this = _super.call(this, props) || this; + _this.question = props.question; + _this.comment = _this.question.comment; + _this.state = { value: _this.comment }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + SurveyQuestionCommentItem.prototype.handleOnChange = function (event) { + this.comment = event.target.value; + this.setState({ value: this.comment }); + }; + SurveyQuestionCommentItem.prototype.handleOnBlur = function (event) { + this.question.comment = this.comment; + }; + SurveyQuestionCommentItem.prototype.componentWillReceiveProps = function (nextProps) { + this.question = nextProps.question; + }; + SurveyQuestionCommentItem.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.question.comment }, this.comment)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "text", className: this.css.question.comment, value: this.state.value, onChange: this.handleOnChange, onBlur: this.handleOnBlur })); + }; + return SurveyQuestionCommentItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("comment", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionComment, props); +}); + + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionSelectBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxBase; }); + + + + + + + + +var QuestionSelectBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionSelectBase, _super); + function QuestionSelectBase(name) { + var _this = _super.call(this, name) || this; + _this.visibleChoicesCache = null; + _this.otherItemValue = new __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */]("other", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText")); + _this.choicesFromUrl = null; + _this.cachedValueForUrlRequestion = null; + _this.storeOthersAsComment = true; + _this.choicesOrderValue = "none"; + _this.isSettingComment = false; + _this.choicesValues = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.choicesByUrl = _this.createRestfull(); + _this.locOtherTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.locOtherErrorTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.choicesByUrl.getResultCallback = function (items) { self.onLoadChoicesFromUrl(items); }; + return _this; + } + Object.defineProperty(QuestionSelectBase.prototype, "otherItem", { + get: function () { + this.otherItemValue.text = this.otherText ? this.otherText : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + return this.otherItemValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "isOtherSelected", { + get: function () { + return this.getStoreOthersAsComment() ? this.getHasOther(this.value) : this.getHasOther(this.cachedValue); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.getHasOther = function (val) { + return val == this.otherItem.value; + }; + QuestionSelectBase.prototype.createRestfull = function () { return new __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__["a" /* ChoicesRestfull */](); }; + QuestionSelectBase.prototype.getComment = function () { + if (this.getStoreOthersAsComment()) + return _super.prototype.getComment.call(this); + return this.commentValue; + }; + QuestionSelectBase.prototype.setComment = function (newValue) { + if (this.getStoreOthersAsComment()) + _super.prototype.setComment.call(this, newValue); + else { + if (!this.isSettingComment && newValue != this.commentValue) { + this.isSettingComment = true; + this.commentValue = newValue; + if (this.isOtherSelected) { + this.setNewValueInData(this.cachedValue); + } + this.isSettingComment = false; + } + } + }; + QuestionSelectBase.prototype.setNewValue = function (newValue) { + if (newValue) + this.cachedValueForUrlRequestion = newValue; + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionSelectBase.prototype.valueFromData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueFromData.call(this, val); + this.cachedValue = this.valueFromDataCore(val); + return this.cachedValue; + }; + QuestionSelectBase.prototype.valueToData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueToData.call(this, val); + this.cachedValue = val; + return this.valueToDataCore(val); + }; + QuestionSelectBase.prototype.valueFromDataCore = function (val) { + if (!this.hasUnknownValue(val)) + return val; + if (val == this.otherItem.value) + return val; + this.comment = val; + return this.otherItem.value; + }; + QuestionSelectBase.prototype.valueToDataCore = function (val) { + if (val == this.otherItem.value && this.getComment()) { + val = this.getComment(); + } + return val; + }; + QuestionSelectBase.prototype.hasUnknownValue = function (val) { + if (!val) + return false; + var items = this.activeChoices; + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return false; + } + return true; + }; + Object.defineProperty(QuestionSelectBase.prototype, "choices", { + get: function () { return this.choicesValues; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.choicesValues, newValue); + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.hasOtherChanged = function () { + this.onVisibleChoicesChanged(); + }; + Object.defineProperty(QuestionSelectBase.prototype, "choicesOrder", { + get: function () { return this.choicesOrderValue; }, + set: function (newValue) { + if (newValue == this.choicesOrderValue) + return; + this.choicesOrderValue = newValue; + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherText", { + get: function () { return this.locOtherText.text; }, + set: function (value) { + this.locOtherText.text = value; + this.updateOtherItem(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherErrorText", { + get: function () { return this.locOtherErrorText.text; }, + set: function (value) { this.locOtherErrorText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherText", { + get: function () { return this.locOtherTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherErrorText", { + get: function () { return this.locOtherErrorTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "visibleChoices", { + get: function () { + if (!this.hasOther && this.choicesOrder == "none") + return this.activeChoices; + if (!this.visibleChoicesCache) { + this.visibleChoicesCache = this.sortVisibleChoices(this.activeChoices.slice()); + if (this.hasOther) { + this.visibleChoicesCache.push(this.otherItem); + } + } + return this.visibleChoicesCache; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "activeChoices", { + get: function () { return this.choicesFromUrl ? this.choicesFromUrl : this.choices; }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.supportComment = function () { return true; }; + QuestionSelectBase.prototype.supportOther = function () { return true; }; + QuestionSelectBase.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (!this.isOtherSelected || this.comment) + return; + var text = this.otherErrorText; + if (!text) { + text = __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherRequiredError"); + } + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](text)); + }; + QuestionSelectBase.prototype.onLocaleChanged = function () { + _super.prototype.onLocaleChanged.call(this); + this.updateOtherItem(); + }; + QuestionSelectBase.prototype.updateOtherItem = function () { + var item = this.otherItem; // set the correct text + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.getStoreOthersAsComment = function () { return this.storeOthersAsComment && (this.survey != null ? this.survey.storeOthersAsComment : true); }; + QuestionSelectBase.prototype.onSurveyLoad = function () { + if (this.choicesByUrl) + this.choicesByUrl.run(); + }; + QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) { + var errorCount = this.errors.length; + this.errors = []; + if (this.choicesByUrl && this.choicesByUrl.error) { + this.errors.push(this.choicesByUrl.error); + } + if (errorCount > 0 || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + var newChoices = null; + if (array && array.length > 0) { + newChoices = new Array(); + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(newChoices, array); + } + this.choicesFromUrl = newChoices; + this.onVisibleChoicesChanged(); + if (this.cachedValueForUrlRequestion) { + this.value = this.cachedValueForUrlRequestion; + } + }; + QuestionSelectBase.prototype.onVisibleChoicesChanged = function () { + this.visibleChoicesCache = null; + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.sortVisibleChoices = function (array) { + var order = this.choicesOrder.toLowerCase(); + if (order == "asc") + return this.sortArray(array, 1); + if (order == "desc") + return this.sortArray(array, -1); + if (order == "random") + return this.randomizeArray(array); + return array; + }; + QuestionSelectBase.prototype.sortArray = function (array, mult) { + return array.sort(function (a, b) { + if (a.text < b.text) + return -1 * mult; + if (a.text > b.text) + return 1 * mult; + return 0; + }); + }; + QuestionSelectBase.prototype.randomizeArray = function (array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + return array; + }; + QuestionSelectBase.prototype.clearUnusedValues = function () { + _super.prototype.clearUnusedValues.call(this); + if (!this.isOtherSelected) { + this.comment = null; + } + }; + return QuestionSelectBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +var QuestionCheckboxBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxBase, _super); + function QuestionCheckboxBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + return _this; + } + Object.defineProperty(QuestionCheckboxBase.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + return QuestionCheckboxBase; +}(QuestionSelectBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("selectbase", ["hasComment:boolean", "hasOther:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "otherText", serializationProperty: "locOtherText" }, { name: "otherErrorText", serializationProperty: "locOtherErrorText" }, + { name: "storeOthersAsComment:boolean", default: true }], null, "question"); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkboxbase", [{ name: "colCount:number", default: 1, choices: [0, 1, 2, 3, 4] }], null, "selectbase"); + + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditionsParser__ = __webpack_require__(28); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__ = __webpack_require__(18); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Condition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ConditionNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionRunner; }); + + +var Condition = (function () { + function Condition() { + this.opValue = "equal"; + } + Object.defineProperty(Condition, "operators", { + get: function () { + if (Condition.operatorsValue != null) + return Condition.operatorsValue; + Condition.operatorsValue = { + empty: function (left, right) { return !left; }, + notempty: function (left, right) { return !(!left); }, + equal: function (left, right) { return left == right; }, + notequal: function (left, right) { return left != right; }, + contains: function (left, right) { return left && left["indexOf"] && left.indexOf(right) > -1; }, + notcontains: function (left, right) { return !left || !left["indexOf"] || left.indexOf(right) == -1; }, + greater: function (left, right) { return left > right; }, + less: function (left, right) { return left < right; }, + greaterorequal: function (left, right) { return left >= right; }, + lessorequal: function (left, right) { return left <= right; } + }; + return Condition.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Condition.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Condition.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Condition.prototype.perform = function (left, right) { + if (left === void 0) { left = null; } + if (right === void 0) { right = null; } + if (!left) + left = this.left; + if (!right) + right = this.right; + return Condition.operators[this.operator](this.getPureValue(left), this.getPureValue(right)); + }; + Condition.prototype.getPureValue = function (val) { + if (!val || (typeof val != "string")) + return val; + var str = ""; + if (val.length > 0 && (val[0] == "'" || val[0] == '"')) + val = val.substr(1); + var len = val.length; + if (len > 0 && (val[len - 1] == "'" || val[len - 1] == '"')) + val = val.substr(0, len - 1); + return val; + }; + return Condition; +}()); + +Condition.operatorsValue = null; +var ConditionNode = (function () { + function ConditionNode() { + this.connectiveValue = "and"; + this.children = []; + } + Object.defineProperty(ConditionNode.prototype, "connective", { + get: function () { return this.connectiveValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (value == "&" || value == "&&") + value = "and"; + if (value == "|" || value == "||") + value = "or"; + if (value != "and" && value != "or") + return; + this.connectiveValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConditionNode.prototype, "isEmpty", { + get: function () { return this.children.length == 0; }, + enumerable: true, + configurable: true + }); + ConditionNode.prototype.clear = function () { + this.children = []; + this.connective = "and"; + }; + return ConditionNode; +}()); + +var ConditionRunner = (function () { + function ConditionRunner(expression) { + this.root = new ConditionNode(); + this.expression = expression; + this.processValue = new __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__["a" /* ProcessValue */](); + } + Object.defineProperty(ConditionRunner.prototype, "expression", { + get: function () { return this.expressionValue; }, + set: function (value) { + if (this.expression == value) + return; + this.expressionValue = value; + new __WEBPACK_IMPORTED_MODULE_0__conditionsParser__["a" /* ConditionsParser */]().parse(this.expressionValue, this.root); + }, + enumerable: true, + configurable: true + }); + ConditionRunner.prototype.run = function (values) { + this.values = values; + return this.runNode(this.root); + }; + ConditionRunner.prototype.runNode = function (node) { + var onFirstFail = node.connective == "and"; + for (var i = 0; i < node.children.length; i++) { + var res = this.runNodeCondition(node.children[i]); + if (!res && onFirstFail) + return false; + if (res && !onFirstFail) + return true; + } + return onFirstFail; + }; + ConditionRunner.prototype.runNodeCondition = function (value) { + if (!value) + return false; + if (value["children"]) + return this.runNode(value); + if (value["left"]) + return this.runCondition(value); + return false; + }; + ConditionRunner.prototype.runCondition = function (condition) { + var left = condition.left; + var name = this.getValueName(left); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return condition.operator === "empty"; + left = this.processValue.getValue(name, this.values); + } + var right = condition.right; + name = this.getValueName(right); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return false; + right = this.processValue.getValue(name, this.values); + } + return condition.perform(left, right); + }; + ConditionRunner.prototype.getValueName = function (nodeValue) { + if (!nodeValue) + return null; + if (typeof nodeValue !== 'string') + return null; + if (nodeValue.length < 3 || nodeValue[0] != '{' || nodeValue[nodeValue.length - 1] != '}') + return null; + return nodeValue.substr(1, nodeValue.length - 2); + }; + return ConditionRunner; +}()); + + + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestion; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionErrors; }); + + + + +var SurveyQuestion = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestion, _super); + function SurveyQuestion(props) { + var _this = _super.call(this, props) || this; + _this.setQuestion(props.question); + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyQuestion.prototype.componentWillReceiveProps = function (nextProps) { + this.creator = nextProps.creator; + this.css = nextProps.css; + this.setQuestion(nextProps.question); + }; + SurveyQuestion.prototype.setQuestion = function (question) { + this.questionBase = question; + this.question = question instanceof __WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */] ? question : null; + var value = this.question ? this.question.value : null; + this.state = { + visible: this.questionBase.visible, value: value, error: 0, renderWidth: 0, + visibleIndexValue: -1, isReadOnly: this.questionBase.isReadOnly + }; + }; + SurveyQuestion.prototype.componentDidMount = function () { + if (this.questionBase) { + var self = this; + this.questionBase["react"] = self; + this.questionBase.renderWidthChangedCallback = function () { + self.state.renderWidth = self.state.renderWidth + 1; + self.setState(self.state); + }; + this.questionBase.visibleIndexChangedCallback = function () { + self.state.visibleIndexValue = self.questionBase.visibleIndex; + self.setState(self.state); + }; + this.questionBase.readOnlyChangedCallback = function () { + self.state.isReadOnly = self.questionBase.isReadOnly; + self.setState(self.state); + }; + var el = this.refs["root"]; + if (el && this.questionBase.survey) + this.questionBase.survey.afterRenderQuestion(this.questionBase, el); + if (this.questionBase.customWidget) { + el = this.refs["widget"]; + if (el) + this.questionBase.customWidget.afterRender(this.questionBase, el); + } + } + }; + SurveyQuestion.prototype.componentWillUnmount = function () { + var el = this.refs["root"]; + if (this.questionBase) { + this.questionBase["react"] = null; + this.questionBase.renderWidthChangedCallback = null; + this.questionBase.visibleIndexChangedCallback = null; + this.questionBase.readOnlyChangedCallback = null; + } + if (this.questionBase.customWidget) { + el = this.refs["widget"]; + if (el) + this.questionBase.customWidget.willUnmount(this.questionBase, el); + } + }; + SurveyQuestion.prototype.render = function () { + if (!this.questionBase || !this.creator) + return null; + if (!this.questionBase.visible) + return null; + var questionRender = this.renderQuestion(); + var title = this.questionBase.hasTitle ? this.renderTitle() : null; + var titleTop = this.creator.questionTitleLocation() == "top" ? title : null; + var titleBottom = this.creator.questionTitleLocation() == "bottom" ? title : null; + var comment = (this.question && this.question.hasComment) ? this.renderComment() : null; + var errors = this.renderErrors(); + var marginLeft = (this.questionBase.indent > 0) ? this.questionBase.indent * this.css.question.indent + "px" : null; + var paddingRight = (this.questionBase.rightIndent > 0) ? this.questionBase.rightIndent * this.css.question.indent + "px" : null; + var rootStyle = { display: 'inline-block', verticalAlign: 'top' }; + if (this.questionBase.renderWidth) + rootStyle["width"] = this.questionBase.renderWidth; + if (marginLeft) + rootStyle["marginLeft"] = marginLeft; + if (paddingRight) + rootStyle["paddingRight"] = paddingRight; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root", id: this.questionBase.id, className: this.css.question.root, style: rootStyle }, + titleTop, + errors, + questionRender, + comment, + titleBottom)); + }; + SurveyQuestion.prototype.renderQuestion = function () { + var customWidget = this.questionBase.customWidget; + if (!customWidget) + return this.creator.createQuestionElement(this.questionBase); + var widget = null; + if (customWidget.widgetJson.isDefaultRender) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget" }, this.creator.createQuestionElement(this.questionBase)); + } + if (customWidget.widgetJson.render) { + widget = customWidget.widgetJson.render(this.questionBase); + } + else { + if (customWidget.htmlTemplate) { + var htmlValue = { __html: customWidget.htmlTemplate }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget", dangerouslySetInnerHTML: htmlValue })); + } + } + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget" }, widget); + }; + SurveyQuestion.prototype.renderTitle = function () { + var titleText = this.question.fullTitle; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h5", { className: this.css.question.title }, titleText)); + }; + SurveyQuestion.prototype.renderComment = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, this.question.commentText), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.css }))); + }; + SurveyQuestion.prototype.renderErrors = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionErrors, { question: this.question, css: this.css, creator: this.creator }); + }; + return SurveyQuestion; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyQuestionErrors = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionErrors, _super); + function SurveyQuestionErrors(props) { + var _this = _super.call(this, props) || this; + _this.setQuestion(props.question); + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyQuestionErrors.prototype.componentWillReceiveProps = function (nextProps) { + this.setQuestion(nextProps.question); + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyQuestionErrors.prototype.setQuestion = function (question) { + this.question = question instanceof __WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */] ? question : null; + if (this.question) { + var self = this; + this.question.errorsChangedCallback = function () { + self.state.error = self.state.error + 1; + self.setState(self.state); + }; + } + this.state = { error: 0 }; + }; + SurveyQuestionErrors.prototype.render = function () { + if (!this.question || this.question.errors.length == 0) + return null; + var errors = []; + for (var i = 0; i < this.question.errors.length; i++) { + var errorText = this.question.errors[i].getText(); + var key = "error" + i; + errors.push(this.creator.renderError(key, errorText)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.error.root }, errors)); + }; + return SurveyQuestionErrors; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__ = __webpack_require__(23); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactpage__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactSurveyNavigation__ = __webpack_require__(33); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__reactquestionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__reactSurveyProgress__ = __webpack_require__(34); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Survey; }); + + + + + + + + + +var Survey = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Survey, _super); + function Survey(props) { + var _this = _super.call(this, props) || this; + _this.isCurrentPageChanged = false; + _this.updateSurvey(props); + return _this; + } + Object.defineProperty(Survey, "cssType", { + get: function () { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["b" /* surveyCss */].currentType; }, + set: function (value) { __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["b" /* surveyCss */].currentType = value; }, + enumerable: true, + configurable: true + }); + Survey.prototype.componentWillReceiveProps = function (nextProps) { + this.updateSurvey(nextProps); + }; + Survey.prototype.componentDidUpdate = function () { + if (this.isCurrentPageChanged) { + this.isCurrentPageChanged = false; + if (this.survey.focusFirstQuestionAutomatic) { + this.survey.focusFirstQuestion(); + } + } + }; + Survey.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.doAfterRenderSurvey(el); + }; + Survey.prototype.render = function () { + if (this.survey.state == "completed") + return this.renderCompleted(); + if (this.survey.state == "loading") + return this.renderLoading(); + return this.renderSurvey(); + }; + Object.defineProperty(Survey.prototype, "css", { + get: function () { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["b" /* surveyCss */].getCss(); }, + set: function (value) { + this.survey.mergeCss(value, this.css); + }, + enumerable: true, + configurable: true + }); + Survey.prototype.renderCompleted = function () { + if (!this.survey.showCompletedPage) + return null; + var htmlValue = { __html: this.survey.processedCompletedHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + Survey.prototype.renderLoading = function () { + var htmlValue = { __html: this.survey.processedLoadingHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + Survey.prototype.renderSurvey = function () { + var title = this.survey.title && this.survey.showTitle ? this.renderTitle() : null; + var currentPage = this.survey.currentPage ? this.renderPage() : null; + var topProgress = this.survey.showProgressBar == "top" ? this.renderProgress(true) : null; + var bottomProgress = this.survey.showProgressBar == "bottom" ? this.renderProgress(false) : null; + var buttons = (currentPage && this.survey.showNavigationButtons) ? this.renderNavigation() : null; + if (!currentPage) { + currentPage = this.renderEmptySurvey(); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root", className: this.css.root }, + title, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: __WEBPACK_IMPORTED_MODULE_8__base__["e" /* SurveyPageId */], className: this.css.body }, + topProgress, + currentPage, + bottomProgress), + buttons)); + }; + Survey.prototype.renderTitle = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.header }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h3", null, this.survey.processedTitle)); + }; + Survey.prototype.renderPage = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactpage__["a" /* SurveyPage */], { survey: this.survey, page: this.survey.currentPage, css: this.css, creator: this }); + }; + Survey.prototype.renderProgress = function (isTop) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_7__reactSurveyProgress__["a" /* SurveyProgress */], { survey: this.survey, css: this.css, isTop: isTop }); + }; + Survey.prototype.renderNavigation = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_4__reactSurveyNavigation__["a" /* SurveyNavigation */], { survey: this.survey, css: this.css }); + }; + Survey.prototype.renderEmptySurvey = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.survey.emptySurveyText)); + }; + Survey.prototype.updateSurvey = function (newProps) { + if (newProps) { + if (newProps.model) { + this.survey = newProps.model; + } + else { + if (newProps.json) { + this.survey = new __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__["a" /* ReactSurveyModel */](newProps.json); + } + } + } + else { + this.survey = new __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__["a" /* ReactSurveyModel */](); + } + if (newProps) { + if (newProps.clientId) + this.survey.clientId = newProps.clientId; + if (newProps.data) + this.survey.data = newProps.data; + if (newProps.css) + this.survey.mergeCss(newProps.css, this.css); + } + //set the first page + var dummy = this.survey.currentPage; + this.state = { pageIndexChange: 0, isCompleted: false, modelChanged: 0 }; + this.setSurveyEvents(newProps); + }; + Survey.prototype.setSurveyEvents = function (newProps) { + var self = this; + this.survey.renderCallback = function () { + self.state.modelChanged = self.state.modelChanged + 1; + self.setState(self.state); + }; + this.survey.onComplete.add(function (sender) { self.state.isCompleted = true; self.setState(self.state); }); + this.survey.onPartialSend.add(function (sender) { self.setState(self.state); }); + this.survey.onCurrentPageChanged.add(function (sender, options) { + self.isCurrentPageChanged = true; + self.state.pageIndexChange = self.state.pageIndexChange + 1; + self.setState(self.state); + if (newProps && newProps.onCurrentPageChanged) + newProps.onCurrentPageChanged(sender, options); + }); + this.survey.onVisibleChanged.add(function (sender, options) { + if (options.question && options.question.react) { + var state = options.question.react.state; + state.visible = options.question.visible; + options.question.react.setState(state); + } + }); + this.survey.onValueChanged.add(function (sender, options) { + if (options.question && options.question.react) { + var state = options.question.react.state; + state.value = options.value; + options.question.react.setState(state); + } + }); + if (!newProps) + return; + this.survey.onValueChanged.add(function (sender, options) { + if (newProps.data) + newProps.data[options.name] = options.value; + if (newProps.onValueChanged) + newProps.onValueChanged(sender, options); + }); + if (newProps.onComplete) { + this.survey.onComplete.add(function (sender) { newProps.onComplete(sender); }); + } + if (newProps.onPartialSend) { + this.survey.onPartialSend.add(function (sender) { newProps.onPartialSend(sender); }); + } + this.survey.onPageVisibleChanged.add(function (sender, options) { if (newProps.onPageVisibleChanged) + newProps.onPageVisibleChanged(sender, options); }); + if (newProps.onServerValidateQuestions) { + this.survey.onServerValidateQuestions = newProps.onServerValidateQuestions; + } + if (newProps.onQuestionAdded) { + this.survey.onQuestionAdded.add(function (sender, options) { newProps.onQuestionAdded(sender, options); }); + } + if (newProps.onQuestionRemoved) { + this.survey.onQuestionRemoved.add(function (sender, options) { newProps.onQuestionRemoved(sender, options); }); + } + if (newProps.onValidateQuestion) { + this.survey.onValidateQuestion.add(function (sender, options) { newProps.onValidateQuestion(sender, options); }); + } + if (newProps.onSendResult) { + this.survey.onSendResult.add(function (sender, options) { newProps.onSendResult(sender, options); }); + } + if (newProps.onGetResult) { + this.survey.onGetResult.add(function (sender, options) { newProps.onGetResult(sender, options); }); + } + if (newProps.onProcessHtml) { + this.survey.onProcessHtml.add(function (sender, options) { newProps.onProcessHtml(sender, options); }); + } + if (newProps.onAfterRenderSurvey) { + this.survey.onAfterRenderSurvey.add(function (sender, options) { newProps.onAfterRenderSurvey(sender, options); }); + } + if (newProps.onAfterRenderPage) { + this.survey.onAfterRenderPage.add(function (sender, options) { newProps.onAfterRenderPage(sender, options); }); + } + if (newProps.onAfterRenderQuestion) { + this.survey.onAfterRenderQuestion.add(function (sender, options) { newProps.onAfterRenderQuestion(sender, options); }); + } + }; + //ISurveyCreator + Survey.prototype.createQuestionElement = function (question) { + var questionCss = this.css[question.getType()]; + return __WEBPACK_IMPORTED_MODULE_5__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.createQuestion(question.getType(), { + question: question, css: questionCss, rootCss: this.css, isDisplayMode: question.isReadOnly, creator: this + }); + }; + Survey.prototype.renderError = function (key, errorText) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { key: key, className: this.css.error.item }, errorText); + }; + Survey.prototype.questionTitleLocation = function () { return this.survey.questionTitleLocation; }; + return Survey; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChoicesRestfull; }); + + + + + + +var ChoicesRestfull = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ChoicesRestfull, _super); + function ChoicesRestfull() { + var _this = _super.call(this) || this; + _this.url = ""; + _this.path = ""; + _this.valueName = ""; + _this.titleName = ""; + _this.error = null; + return _this; + } + ChoicesRestfull.prototype.run = function () { + if (!this.url || !this.getResultCallback) + return; + this.error = null; + var xhr = new XMLHttpRequest(); + xhr.open('GET', this.url); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + if (xhr.status == 200) { + self.onLoad(JSON.parse(xhr.response)); + } + else { + self.onError(xhr.statusText, xhr.responseText); + } + }; + xhr.send(); + }; + ChoicesRestfull.prototype.getType = function () { return "choicesByUrl"; }; + Object.defineProperty(ChoicesRestfull.prototype, "isEmpty", { + get: function () { + return !this.url && !this.path && !this.valueName && !this.titleName; + }, + enumerable: true, + configurable: true + }); + ChoicesRestfull.prototype.setData = function (json) { + this.clear(); + if (json.url) + this.url = json.url; + if (json.path) + this.path = json.path; + if (json.valueName) + this.valueName = json.valueName; + if (json.titleName) + this.titleName = json.titleName; + }; + ChoicesRestfull.prototype.clear = function () { + this.url = ""; + this.path = ""; + this.valueName = ""; + this.titleName = ""; + }; + ChoicesRestfull.prototype.onLoad = function (result) { + var items = []; + result = this.getResultAfterPath(result); + if (result && result["length"]) { + for (var i = 0; i < result.length; i++) { + var itemValue = result[i]; + if (!itemValue) + continue; + var value = this.getValue(itemValue); + var title = this.getTitle(itemValue); + items.push(new __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */](value, title)); + } + } + else { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlGetChoicesError")); + } + this.getResultCallback(items); + }; + ChoicesRestfull.prototype.onError = function (status, response) { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlRequestError")["format"](status, response)); + this.getResultCallback([]); + }; + ChoicesRestfull.prototype.getResultAfterPath = function (result) { + if (!result) + return result; + if (!this.path) + return result; + var pathes = this.getPathes(); + for (var i = 0; i < pathes.length; i++) { + result = result[pathes[i]]; + if (!result) + return null; + } + return result; + }; + ChoicesRestfull.prototype.getPathes = function () { + var pathes = []; + if (this.path.indexOf(';') > -1) { + pathes = this.path.split(';'); + } + else { + pathes = this.path.split(','); + } + if (pathes.length == 0) + pathes.push(this.path); + return pathes; + }; + ChoicesRestfull.prototype.getValue = function (item) { + if (this.valueName) + return item[this.valueName]; + var len = Object.keys(item).length; + if (len < 1) + return null; + return item[Object.keys(item)[0]]; + }; + ChoicesRestfull.prototype.getTitle = function (item) { + if (!this.titleName) + return null; + return item[this.titleName]; + }; + return ChoicesRestfull; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("choicesByUrl", ["url", "path", "valueName", "titleName"], function () { return new ChoicesRestfull(); }); + + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ProcessValue; }); +var ProcessValue = (function () { + function ProcessValue() { + } + ProcessValue.prototype.getFirstName = function (text) { + if (!text) + return text; + var res = ""; + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + if (ch == '.' || ch == '[') + break; + res += ch; + } + return res; + }; + ProcessValue.prototype.hasValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.hasValue; + }; + ProcessValue.prototype.getValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.value; + }; + ProcessValue.prototype.getValueCore = function (text, values) { + var res = { hasValue: false, value: null }; + var curValue = values; + if (!curValue) + return res; + var isFirst = true; + while (text && text.length > 0) { + var isArray = !isFirst && text[0] == '['; + if (!isArray) { + if (!isFirst) + text = text.substr(1); + var curName = this.getFirstName(text); + if (!curName) + return res; + if (!curValue[curName]) + return res; + curValue = curValue[curName]; + text = text.substr(curName.length); + } + else { + if (!Array.isArray(curValue)) + return res; + var index = 1; + var str = ""; + while (index < text.length && text[index] != ']') { + str += text[index]; + index++; + } + text = index < text.length ? text.substr(index + 1) : ""; + index = this.getIntValue(str); + if (index < 0 || index >= curValue.length) + return res; + curValue = curValue[index]; + } + isFirst = false; + } + res.value = curValue; + res.hasValue = true; + return res; + }; + ProcessValue.prototype.getIntValue = function (str) { + if (str == "0" || ((str | 0) > 0 && str % 1 == 0)) + return Number(str); + return -1; + }; + return ProcessValue; +}()); + + + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultStandardCss; }); +var surveyCss = { + currentType: "", + getCss: function () { + var loc = this.currentType ? this[this.currentType] : defaultStandardCss; + if (!loc) + loc = defaultStandardCss; + return loc; + }, +}; +var defaultStandardCss = { + root: "sv_main", + header: "", + body: "sv_body", + footer: "sv_nav", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "sv_progress", progressBar: "", + pageTitle: "sv_p_title", + row: "sv_row", + question: { root: "sv_q", title: "sv_q_title", comment: "", indent: 20 }, + error: { root: "sv_q_erbox", icon: "", item: "" }, + checkbox: { root: "sv_qcbc", item: "sv_q_checkbox", other: "sv_q_other" }, + comment: "", + dropdown: { root: "", control: "" }, + matrix: { root: "sv_q_matrix" }, + matrixdropdown: { root: "sv_q_matrix" }, + matrixdynamic: { root: "table", button: "" }, + multipletext: { root: "", itemTitle: "", itemValue: "" }, + radiogroup: { root: "sv_qcbc", item: "sv_q_radiogroup", label: "", other: "sv_q_other" }, + rating: { root: "sv_q_rating", item: "sv_q_rating_item" }, + text: "", + window: { + root: "sv_window", body: "sv_window_content", + header: { + root: "sv_window_title", title: "", button: "", buttonExpanded: "", buttonCollapsed: "" + } + } +}; +surveyCss["standard"] = defaultStandardCss; + + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__question_baseselect__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDropdownColumn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownCell; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return MatrixDropdownRowModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return QuestionMatrixDropdownModelBase; }); + + + + + + + + + + +var MatrixDropdownColumn = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownColumn, _super); + function MatrixDropdownColumn(name, title) { + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.hasOther = false; + _this.minWidth = ""; + _this.cellType = "default"; + _this.inputType = "text"; + _this.choicesOrder = "none"; + _this.locOwner = null; + _this.colCountValue = -1; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.choicesByUrl = new __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__["a" /* ChoicesRestfull */](); + return _this; + } + MatrixDropdownColumn.prototype.getType = function () { return "matrixdropdowncolumn"; }; + Object.defineProperty(MatrixDropdownColumn.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text; }, + set: function (value) { this.locOptionsCaption.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < -1 || value > 4) + return; + this.colCountValue = value; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownColumn.prototype.getLocale = function () { + return this.locOwner ? this.locOwner.getLocale() : ""; + }; + return MatrixDropdownColumn; +}(__WEBPACK_IMPORTED_MODULE_3__base__["b" /* Base */])); + +var MatrixDropdownCell = (function () { + function MatrixDropdownCell(column, row, data) { + this.column = column; + this.row = row; + this.questionValue = data.createQuestion(this.row, this.column); + this.questionValue.setData(row); + } + Object.defineProperty(MatrixDropdownCell.prototype, "question", { + get: function () { return this.questionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownCell.prototype, "value", { + get: function () { return this.question.value; }, + set: function (value) { + this.question.value = value; + }, + enumerable: true, + configurable: true + }); + return MatrixDropdownCell; +}()); + +var MatrixDropdownRowModelBase = (function () { + function MatrixDropdownRowModelBase(data, value) { + this.rowValues = {}; + this.rowComments = {}; + this.isSettingValue = false; + this.cells = []; + this.data = data; + this.value = value; + this.idValue = MatrixDropdownRowModelBase.getId(); + this.buildCells(); + } + MatrixDropdownRowModelBase.getId = function () { return "srow_" + MatrixDropdownRowModelBase.idCounter++; }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "rowName", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "value", { + get: function () { return this.rowValues; }, + set: function (value) { + this.isSettingValue = true; + this.rowValues = {}; + if (value != null) { + for (var key in value) { + this.rowValues[key] = value[key]; + } + } + for (var i = 0; i < this.cells.length; i++) { + this.cells[i].question.onSurveyValueChanged(this.getValue(this.cells[i].column.name)); + } + this.isSettingValue = false; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getValue = function (name) { + return this.rowValues[name]; + }; + MatrixDropdownRowModelBase.prototype.setValue = function (name, newValue) { + if (this.isSettingValue) + return; + if (newValue === "") + newValue = null; + if (newValue != null) { + this.rowValues[name] = newValue; + } + else { + delete this.rowValues[name]; + } + this.data.onRowChanged(this, this.value); + }; + MatrixDropdownRowModelBase.prototype.getComment = function (name) { + return this.rowComments[name]; + }; + MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue) { + this.rowComments[name] = newValue; + }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "isEmpty", { + get: function () { + var val = this.value; + if (!val) + return true; + for (var key in val) + return false; + return true; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + MatrixDropdownRowModelBase.prototype.buildCells = function () { + var columns = this.data.columns; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + this.cells.push(this.createCell(column)); + } + }; + MatrixDropdownRowModelBase.prototype.createCell = function (column) { + return new MatrixDropdownCell(column, this, this.data); + }; + return MatrixDropdownRowModelBase; +}()); + +MatrixDropdownRowModelBase.idCounter = 1; +var QuestionMatrixDropdownModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModelBase, _super); + function QuestionMatrixDropdownModelBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.columnsValue = []; + _this.isRowChanging = false; + _this.generatedVisibleRows = null; + _this.cellTypeValue = "dropdown"; + _this.columnColCountValue = 0; + _this.columnMinWidth = ""; + _this.horizontalScroll = false; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.overrideColumnsMethods(); + return _this; + } + QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) { + var colNames = __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].DefaultColums; + for (var i = 0; i < colNames.length; i++) + matrix.addColumn(colNames[i]); + }; + QuestionMatrixDropdownModelBase.prototype.getType = function () { + return "matrixdropdownbase"; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (value) { + this.columnsValue = value; + this.overrideColumnsMethods(); + this.fireCallback(this.columnsChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.overrideColumnsMethods = function () { + var self = this; + this.columnsValue.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = self; + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + }; + this.columnsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = self; + } + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + var _a; + }; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "cellType", { + get: function () { return this.cellTypeValue; }, + set: function (newValue) { + if (this.cellType == newValue) + return; + this.cellTypeValue = newValue; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columnColCount", { + get: function () { return this.columnColCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.columnColCountValue = value; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.getColumnTitle = function (column) { + var result = column.title; + if (column.isRequired && this.survey) { + var requireText = this.survey.requiredText; + if (requireText) + requireText += " "; + result = requireText + result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) { + return column.minWidth ? column.minWidth : this.columnMinWidth; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) { + if (title === void 0) { title = null; } + var column = new MatrixDropdownColumn(name, title); + this.columnsValue.push(column); + return column; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "visibleRows", { + get: function () { + this.generatedVisibleRows = this.generateRows(); + return this.generatedVisibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.generateRows = function () { return null; }; + QuestionMatrixDropdownModelBase.prototype.createMatrixRow = function (name, text, value) { + return null; + }; + QuestionMatrixDropdownModelBase.prototype.createNewValue = function (curValue) { return !curValue ? {} : curValue; }; + QuestionMatrixDropdownModelBase.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + var result = questionValue[row.rowName] ? questionValue[row.rowName] : null; + if (!result && create) { + result = {}; + questionValue[row.rowName] = result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { + }; + QuestionMatrixDropdownModelBase.prototype.onValueChanged = function () { + if (this.isRowChanging) + return; + this.onBeforeValueChanged(this.value); + if (!(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + this.generatedVisibleRows[i].value = this.getRowValue(row, val); + } + this.isRowChanging = false; + }; + QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + if (!cells) + continue; + for (var colIndex = 0; colIndex < cells.length; colIndex++) { + var question = cells[colIndex].question; + if (question && (!question.supportGoNextPageAutomatic() || !question.value)) + return false; + } + } + return true; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var errosInColumns = this.hasErrorInColumns(fireCallback); + return _super.prototype.hasErrors.call(this, fireCallback) || errosInColumns; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrorInColumns = function (fireCallback) { + if (!this.generatedVisibleRows) + return false; + var res = false; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + res = cells && cells[colIndex] && cells[colIndex].question && cells[colIndex].question.hasErrors(fireCallback) || res; + } + } + return res; + }; + QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () { + var question = this.getFirstCellQuestion(false); + return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () { + var question = this.getFirstCellQuestion(true); + return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) { + if (!this.generatedVisibleRows) + return null; + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + if (!onError) + return cells[colIndex].question; + if (cells[colIndex].question.currentErrorCount > 0) + return cells[colIndex].question; + } + } + return null; + }; + //IMatrixDropdownData + QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) { + var question = this.createQuestionCore(row, column); + question.name = column.name; + question.isRequired = column.isRequired; + question.hasOther = column.hasOther; + question.readOnly = this.readOnly; + question.setData(this.survey); + if (column.hasOther) { + if (question instanceof __WEBPACK_IMPORTED_MODULE_6__question_baseselect__["b" /* QuestionSelectBase */]) { + question.storeOthersAsComment = false; + } + } + return question; + }; + QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) { + var cellType = column.cellType == "default" ? this.cellType : column.cellType; + var name = this.getQuestionName(row, column); + if (cellType == "checkbox") + return this.createCheckbox(name, column); + if (cellType == "radiogroup") + return this.createRadiogroup(name, column); + if (cellType == "text") + return this.createText(name, column); + if (cellType == "comment") + return this.createComment(name, column); + return this.createDropdown(name, column); + }; + QuestionMatrixDropdownModelBase.prototype.getQuestionName = function (row, column) { return row.rowName + "_" + column.name; }; + QuestionMatrixDropdownModelBase.prototype.getColumnChoices = function (column) { + return column.choices && column.choices.length > 0 ? column.choices : this.choices; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnOptionsCaption = function (column) { + return column.optionsCaption ? column.optionsCaption : this.optionsCaption; + }; + QuestionMatrixDropdownModelBase.prototype.createDropdown = function (name, column) { + var q = this.createCellQuestion("dropdown", name); + this.setSelectBaseProperties(q, column); + q.optionsCaption = this.getColumnOptionsCaption(column); + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCheckbox = function (name, column) { + var q = this.createCellQuestion("checkbox", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createRadiogroup = function (name, column) { + var q = this.createCellQuestion("radiogroup", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.setSelectBaseProperties = function (question, column) { + question.choicesOrder = column.choicesOrder; + question.choices = this.getColumnChoices(column); + question.choicesByUrl.setData(column.choicesByUrl); + if (!question.choicesByUrl.isEmpty) { + question.choicesByUrl.run(); + } + }; + QuestionMatrixDropdownModelBase.prototype.createText = function (name, column) { + var q = this.createCellQuestion("text", name); + q.inputType = column.inputType; + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createComment = function (name, column) { + var q = this.createCellQuestion("comment", name); + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCellQuestion = function (questionType, name) { + return __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + }; + QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) { + delete newValue[row.rowName]; + return Object.keys(newValue).length == 0 ? null : newValue; + }; + QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, newRowValue) { + var newValue = this.createNewValue(this.value); + var rowValue = this.getRowValue(row, newValue, true); + for (var key in rowValue) + delete rowValue[key]; + if (newRowValue) { + newRowValue = JSON.parse(JSON.stringify(newRowValue)); + for (var key in newRowValue) + rowValue[key] = newRowValue[key]; + } + if (Object.keys(rowValue).length == 0) { + newValue = this.deleteRowValue(newValue, row); + } + this.isRowChanging = true; + this.setNewValue(newValue); + this.isRowChanging = false; + }; + return QuestionMatrixDropdownModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdowncolumn", ["name", { name: "title", serializationProperty: "locTitle" }, + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, { name: "cellType", default: "default", choices: ["default", "dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "colCount", default: -1, choices: [-1, 0, 1, 2, 3, 4] }, "isRequired:boolean", "hasOther:boolean", "minWidth", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }], function () { return new MatrixDropdownColumn(""); }); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdownbase", [{ name: "columns:matrixdropdowncolumns", className: "matrixdropdowncolumn" }, + "horizontalScroll:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, + { name: "cellType", default: "dropdown", choices: ["dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "columnColCount", default: 0, choices: [0, 1, 2, 3, 4] }, "columnMinWidth"], function () { return new QuestionMatrixDropdownModelBase(""); }, "question"); + + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionBase; }); + + + + +var QuestionBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionBase, _super); + function QuestionBase(name) { + var _this = _super.call(this) || this; + _this.name = name; + _this.conditionRunner = null; + _this.visibleIf = ""; + _this.visibleValue = true; + _this.startWithNewLineValue = true; + _this.visibleIndexValue = -1; + _this.width = ""; + _this.renderWidthValue = ""; + _this.rightIndentValue = 0; + _this.indent = 0; + _this.idValue = QuestionBase.getQuestionId(); + _this.onCreating(); + return _this; + } + QuestionBase.getQuestionId = function () { + return "sq_" + QuestionBase.questionCounter++; + }; + Object.defineProperty(QuestionBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.fireCallback(this.visibilityChangedCallback); + this.fireCallback(this.rowVisibilityChangedCallback); + if (this.survey) { + this.survey.questionVisibilityChanged(this, this.visible); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isVisible", { + get: function () { return this.visible || (this.survey && this.survey.isDesignMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isReadOnly", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visibleIndex", { + get: function () { return this.visibleIndexValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + return false; + }; + Object.defineProperty(QuestionBase.prototype, "currentErrorCount", { + get: function () { return 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasTitle", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasInput", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasComment", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + }; + QuestionBase.prototype.setData = function (newValue) { + this.data = newValue; + if (newValue && newValue["questionAdded"]) { + this.surveyValue = newValue; + } + this.onSetData(); + }; + Object.defineProperty(QuestionBase.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.fireCallback = function (callback) { + if (callback) + callback(); + }; + QuestionBase.prototype.onSetData = function () { }; + QuestionBase.prototype.onCreating = function () { }; + QuestionBase.prototype.runCondition = function (values) { + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + //IQuestion + QuestionBase.prototype.onSurveyValueChanged = function (newValue) { + }; + QuestionBase.prototype.onSurveyLoad = function () { + }; + QuestionBase.prototype.setVisibleIndex = function (value) { + if (this.visibleIndexValue == value) + return; + this.visibleIndexValue = value; + this.fireCallback(this.visibleIndexChangedCallback); + }; + QuestionBase.prototype.supportGoNextPageAutomatic = function () { return false; }; + QuestionBase.prototype.clearUnusedValues = function () { }; + QuestionBase.prototype.onLocaleChanged = function () { }; + //ILocalizableOwner + QuestionBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + return QuestionBase; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +QuestionBase.questionCounter = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("questionbase", ["!name", { name: "visible:boolean", default: true }, "visibleIf:expression", + { name: "width" }, { name: "startWithNewLine:boolean", default: true }, { name: "indent:number", default: 0, choices: [0, 1, 2, 3] }]); + + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNavigationBase; }); + + +var SurveyNavigationBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyNavigationBase, _super); + function SurveyNavigationBase(props) { + var _this = _super.call(this, props) || this; + _this.updateStateFunction = null; + _this.survey = props.survey; + _this.css = props.css; + _this.state = { update: 0 }; + return _this; + } + SurveyNavigationBase.prototype.componentWillReceiveProps = function (nextProps) { + this.survey = nextProps.survey; + this.css = nextProps.css; + }; + SurveyNavigationBase.prototype.componentDidMount = function () { + if (this.survey) { + var self = this; + this.updateStateFunction = function () { + self.state.update = self.state.update + 1; + self.setState(self.state); + }; + this.survey.onPageVisibleChanged.add(this.updateStateFunction); + } + }; + SurveyNavigationBase.prototype.componentWillUnmount = function () { + if (this.survey && this.updateStateFunction) { + this.survey.onPageVisibleChanged.remove(this.updateStateFunction); + this.updateStateFunction = null; + } + }; + return SurveyNavigationBase; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__survey__ = __webpack_require__(24); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ReactSurveyModel; }); + + +var ReactSurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ReactSurveyModel, _super); + function ReactSurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + return _super.call(this, jsonObj) || this; + } + ReactSurveyModel.prototype.render = function () { + if (this.renderCallback) { + this.renderCallback(); + } + }; + ReactSurveyModel.prototype.mergeCss = function (src, dest) { + this.mergeValues(src, dest); + }; + ReactSurveyModel.prototype.doAfterRenderSurvey = function (el) { + this.afterRenderSurvey(el); + }; + ReactSurveyModel.prototype.onLoadSurveyFromService = function () { + this.render(); + }; + ReactSurveyModel.prototype.onLoadingSurveyFromService = function () { + this.render(); + }; + return ReactSurveyModel; +}(__WEBPACK_IMPORTED_MODULE_1__survey__["a" /* SurveyModel */])); + + + +/***/ }), +/* 24 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__page__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__ = __webpack_require__(29); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyModel; }); + + + + + + + + + + + +var SurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyModel, _super); + function SurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + var _this = _super.call(this) || this; + _this.surveyId = null; + _this.surveyPostId = null; + _this.clientId = null; + _this.cookieName = null; + _this.sendResultOnPageNext = false; + _this.commentPrefix = "-Comment"; + _this.focusFirstQuestionAutomatic = true; + _this.showNavigationButtons = true; + _this.showTitle = true; + _this.showPageTitles = true; + _this.showCompletedPage = true; + _this.requiredText = "*"; + _this.questionStartIndex = ""; + _this.showProgressBar = "off"; + _this.storeOthersAsComment = true; + _this.goNextPageAutomatic = false; + _this.pages = new Array(); + _this.triggers = new Array(); + _this.clearInvisibleValues = false; + _this.currentPageValue = null; + _this.valuesHash = {}; + _this.variablesHash = {}; + _this.showPageNumbersValue = false; + _this.showQuestionNumbersValue = "on"; + _this.questionTitleLocationValue = "top"; + _this.localeValue = ""; + _this.isCompleted = false; + _this.isLoading = false; + _this.processedTextValues = {}; + _this.isValidatingOnServerValue = false; + _this.modeValue = "edit"; + _this.isDesignModeValue = false; + _this.onComplete = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPartialSend = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onCurrentPageChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onValueChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPageVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onQuestionRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPanelRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onValidateQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onProcessHtml = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onSendResult = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onGetResult = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onUploadFile = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderSurvey = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderPage = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderPanel = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.jsonErrors = null; + _this.isLoadingFromJsonValue = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompletedHtmlValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPagePrevTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPageNextTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompleteTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locQuestionTitleTemplateValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__["a" /* TextPreProcessor */](); + _this.textPreProcessor.onHasValue = function (name) { return self.hasProcessedTextValue(name); }; + _this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + _this.pages.push = function (value) { + value.data = self; + return Array.prototype.push.call(this, value); + }; + _this.triggers.push = function (value) { + value.setOwner(self); + return Array.prototype.push.call(this, value); + }; + _this.updateProcessedTextValues(); + _this.onBeforeCreating(); + if (jsonObj) { + _this.setJsonObject(jsonObj); + if (_this.surveyId) { + _this.loadSurveyFromService(_this.surveyId); + } + } + _this.onCreating(); + return _this; + } + SurveyModel.prototype.getType = function () { return "survey"; }; + Object.defineProperty(SurveyModel.prototype, "locale", { + get: function () { return this.localeValue; }, + set: function (value) { + this.localeValue = value; + __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].currentLocale = value; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onLocaleChanged(); + } + }, + enumerable: true, + configurable: true + }); + //ILocalizableOwner + SurveyModel.prototype.getLocale = function () { return this.locale; }; + SurveyModel.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getString(str); }; + Object.defineProperty(SurveyModel.prototype, "emptySurveyText", { + get: function () { return this.getLocString("emptySurvey"); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completedHtml", { + get: function () { return this.locCompletedHtml.text; }, + set: function (value) { this.locCompletedHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompletedHtml", { + get: function () { return this.locCompletedHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pagePrevText", { + get: function () { return this.locPagePrevText.text ? this.locPagePrevText.text : this.getLocString("pagePrevText"); }, + set: function (newValue) { this.locPagePrevText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPagePrevText", { + get: function () { return this.locPagePrevTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pageNextText", { + get: function () { return this.locPageNextText.text ? this.locPageNextText.text : this.getLocString("pageNextText"); }, + set: function (newValue) { this.locPageNextText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPageNextText", { + get: function () { return this.locPageNextTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completeText", { + get: function () { return this.locCompleteText.text ? this.locCompleteText.text : this.getLocString("completeText"); }, + set: function (newValue) { this.locCompleteText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompleteText", { + get: function () { return this.locCompleteTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplate.text; }, + set: function (value) { this.locQuestionTitleTemplate.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locQuestionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplateValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showPageNumbers", { + get: function () { return this.showPageNumbersValue; }, + set: function (value) { + if (value === this.showPageNumbers) + return; + this.showPageNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showQuestionNumbers", { + get: function () { return this.showQuestionNumbersValue; }, + set: function (value) { + if (value === this.showQuestionNumbers) + return; + this.showQuestionNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "processedTitle", { + get: function () { return this.processText(this.title); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleLocation", { + get: function () { return this.questionTitleLocationValue; }, + set: function (value) { + if (value === this.questionTitleLocationValue) + return; + this.questionTitleLocationValue = value; + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "mode", { + get: function () { return this.modeValue; }, + set: function (value) { + if (value == this.mode) + return; + if (value != "edit" && value != "display") + return; + this.modeValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "data", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + result[key] = this.valuesHash[key]; + } + return result; + }, + set: function (data) { + this.valuesHash = {}; + if (data) { + for (var key in data) { + this._setDataValue(data, key); + this.checkTriggers(key, data[key], false); + if (!this.processedTextValues[key.toLowerCase()]) { + this.processedTextValues[key.toLowerCase()] = "value"; + } + } + } + this.notifyAllQuestionsOnValueChanged(); + this.runConditions(); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype._setDataValue = function (data, key) { + this.valuesHash[key] = data[key]; + }; + Object.defineProperty(SurveyModel.prototype, "comments", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + if (key.indexOf(this.commentPrefix) > 0) { + result[key] = this.valuesHash[key]; + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePages", { + get: function () { + if (this.isDesignMode) + return this.pages; + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].isVisible) { + result.push(this.pages[i]); + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEmpty", { + get: function () { return this.pages.length == 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "PageCount", { + get: function () { + return this.pages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePageCount", { + get: function () { + return this.visiblePages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPage", { + get: function () { + var vPages = this.visiblePages; + if (this.currentPageValue != null) { + if (vPages.indexOf(this.currentPageValue) < 0) { + this.currentPage = null; + } + } + if (this.currentPageValue == null && vPages.length > 0) { + this.currentPage = vPages[0]; + } + return this.currentPageValue; + }, + set: function (value) { + var vPages = this.visiblePages; + if (value != null && vPages.indexOf(value) < 0) + return; + if (value == this.currentPageValue) + return; + var oldValue = this.currentPageValue; + this.currentPageValue = value; + this.updateCustomWidgets(value); + this.currentPageChanged(value, oldValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPageNo", { + get: function () { + return this.visiblePages.indexOf(this.currentPage); + }, + set: function (value) { + var vPages = this.visiblePages; + if (value < 0 || value >= this.visiblePages.length) + return; + this.currentPage = this.visiblePages[value]; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.focusFirstQuestion = function () { + if (this.currentPageValue) { + this.currentPageValue.scrollToTop(); + this.currentPageValue.focusFirstQuestion(); + } + }; + Object.defineProperty(SurveyModel.prototype, "state", { + get: function () { + if (this.isLoading) + return "loading"; + if (this.isCompleted) + return "completed"; + return (this.currentPage) ? "running" : "empty"; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.clear = function (clearData, gotoFirstPage) { + if (clearData === void 0) { clearData = true; } + if (gotoFirstPage === void 0) { gotoFirstPage = true; } + if (clearData) { + this.data = null; + this.variablesHash = {}; + } + this.isCompleted = false; + if (gotoFirstPage && this.visiblePageCount > 0) { + this.currentPage = this.visiblePages[0]; + } + }; + SurveyModel.prototype.mergeValues = function (src, dest) { + if (!dest || !src) + return; + for (var key in src) { + var value = src[key]; + if (value && typeof value === 'object') { + if (!dest[key]) + dest[key] = {}; + this.mergeValues(value, dest[key]); + } + else { + dest[key] = value; + } + } + }; + SurveyModel.prototype.updateCustomWidgets = function (page) { + if (!page) + return; + for (var i = 0; i < page.questions.length; i++) { + page.questions[i].customWidget = __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__["a" /* CustomWidgetCollection */].Instance.getCustomWidget(page.questions[i]); + } + }; + SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) { + this.onCurrentPageChanged.fire(this, { 'oldCurrentPage': oldValue, 'newCurrentPage': newValue }); + }; + SurveyModel.prototype.getProgress = function () { + if (this.currentPage == null) + return 0; + var index = this.visiblePages.indexOf(this.currentPage) + 1; + return Math.ceil((index * 100 / this.visiblePageCount)); + }; + Object.defineProperty(SurveyModel.prototype, "isNavigationButtonsShowing", { + get: function () { + if (this.isDesignMode) + return false; + var page = this.currentPage; + if (!page) + return false; + return page.navigationButtonsVisibility == "show" || + (page.navigationButtonsVisibility != "hide" && this.showNavigationButtons); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEditMode", { + get: function () { return this.mode == "edit"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDisplayMode", { + get: function () { return this.mode == "display"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDesignMode", { + get: function () { return this.isDesignModeValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setDesignMode = function (value) { + this.isDesignModeValue = value; + }; + Object.defineProperty(SurveyModel.prototype, "hasCookie", { + get: function () { + if (!this.cookieName) + return false; + var cookies = document.cookie; + return cookies && cookies.indexOf(this.cookieName + "=true") > -1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=true; expires=Fri, 31 Dec 9999 0:0:0 GMT"; + }; + SurveyModel.prototype.deleteCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=;"; + }; + SurveyModel.prototype.nextPage = function () { + if (this.isLastPage) + return false; + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doNextPage(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isCurrentPageHasErrors", { + get: function () { + if (this.currentPage == null) + return true; + return this.currentPage.hasErrors(true, true); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.prevPage = function () { + if (this.isFirstPage) + return false; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index - 1]; + }; + SurveyModel.prototype.completeLastPage = function () { + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doComplete(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isFirstPage", { + get: function () { + if (this.currentPage == null) + return true; + return this.visiblePages.indexOf(this.currentPage) == 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isLastPage", { + get: function () { + if (this.currentPage == null) + return true; + var vPages = this.visiblePages; + return vPages.indexOf(this.currentPage) == vPages.length - 1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.doComplete = function () { + this.clearUnusedValues(); + this.setCookie(); + this.setCompleted(); + this.onComplete.fire(this, null); + if (this.surveyPostId) { + this.sendResult(); + } + }; + Object.defineProperty(SurveyModel.prototype, "isValidatingOnServer", { + get: function () { return this.isValidatingOnServerValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setIsValidatingOnServer = function (val) { + if (val == this.isValidatingOnServer) + return; + this.isValidatingOnServerValue = val; + this.onIsValidatingOnServerChanged(); + }; + SurveyModel.prototype.onIsValidatingOnServerChanged = function () { }; + SurveyModel.prototype.doServerValidation = function () { + if (!this.onServerValidateQuestions) + return false; + var self = this; + var options = { data: {}, errors: {}, survey: this, complete: function () { self.completeServerValidation(options); } }; + for (var i = 0; i < this.currentPage.questions.length; i++) { + var question = this.currentPage.questions[i]; + if (!question.visible) + continue; + var value = this.getValue(question.name); + if (value) + options.data[question.name] = value; + } + this.setIsValidatingOnServer(true); + this.onServerValidateQuestions(this, options); + return true; + }; + SurveyModel.prototype.completeServerValidation = function (options) { + this.setIsValidatingOnServer(false); + if (!options && !options.survey) + return; + var self = options.survey; + var hasErrors = false; + if (options.errors) { + for (var name in options.errors) { + var question = self.getQuestionByName(name); + if (question && question["errors"]) { + hasErrors = true; + question["addError"](new __WEBPACK_IMPORTED_MODULE_8__error__["c" /* CustomError */](options.errors[name])); + } + } + } + if (!hasErrors) { + if (self.isLastPage) + self.doComplete(); + else + self.doNextPage(); + } + }; + SurveyModel.prototype.doNextPage = function () { + this.checkOnPageTriggers(); + if (this.sendResultOnPageNext) { + this.sendResult(this.surveyPostId, this.clientId, true); + } + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index + 1]; + }; + SurveyModel.prototype.setCompleted = function () { + this.isCompleted = true; + }; + Object.defineProperty(SurveyModel.prototype, "processedCompletedHtml", { + get: function () { + if (this.completedHtml) { + return this.processHtml(this.completedHtml); + } + return "

" + this.getLocString("completingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "processedLoadingHtml", { + get: function () { + return "

" + this.getLocString("loadingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "progressText", { + get: function () { + if (this.currentPage == null) + return ""; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage) + 1; + return this.getLocString("progressText")["format"](index, vPages.length); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.afterRenderSurvey = function (htmlElement) { + this.onAfterRenderSurvey.fire(this, { survey: this, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPage = function (htmlElement) { + if (this.onAfterRenderPage.isEmpty) + return; + this.onAfterRenderPage.fire(this, { page: this.currentPage, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) { + this.onAfterRenderQuestion.fire(this, { question: question, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) { + this.onAfterRenderPanel.fire(this, { panel: panel, htmlElement: htmlElement }); + }; + SurveyModel.prototype.uploadFile = function (name, file, storeDataAsText, uploadingCallback) { + var accept = true; + this.onUploadFile.fire(this, { name: name, file: file, accept: accept }); + if (!accept) + return false; + if (!storeDataAsText && this.surveyPostId) { + this.uploadFileCore(name, file, uploadingCallback); + } + return true; + }; + SurveyModel.prototype.uploadFileCore = function (name, file, uploadingCallback) { + var self = this; + if (uploadingCallback) + uploadingCallback("uploading"); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendFile(this.surveyPostId, file, function (success, response) { + if (uploadingCallback) + uploadingCallback(success ? "success" : "error"); + if (success) { + self.setValue(name, response); + } + }); + }; + SurveyModel.prototype.getPage = function (index) { + return this.pages[index]; + }; + SurveyModel.prototype.addPage = function (page) { + if (page == null) + return; + this.pages.push(page); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.addNewPage = function (name) { + var page = this.createNewPage(name); + this.addPage(page); + return page; + }; + SurveyModel.prototype.removePage = function (page) { + var index = this.pages.indexOf(page); + if (index < 0) + return; + this.pages.splice(index, 1); + if (this.currentPageValue == page) { + this.currentPage = this.pages.length > 0 ? this.pages[0] : null; + } + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var questions = this.getAllQuestions(); + if (caseInsensitive) + name = name.toLowerCase(); + for (var i = 0; i < questions.length; i++) { + var questionName = questions[i].name; + if (caseInsensitive) + questionName = questionName.toLowerCase(); + if (questionName == name) + return questions[i]; + } + return null; + }; + SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var question = this.getQuestionByName(names[i], caseInsensitive); + if (question) + result.push(question); + } + return result; + }; + SurveyModel.prototype.getPageByElement = function (element) { + for (var i = 0; i < this.pages.length; i++) { + var page = this.pages[i]; + if (page.containsElement(element)) + return page; + } + return null; + }; + SurveyModel.prototype.getPageByQuestion = function (question) { + return this.getPageByElement(question); + }; + SurveyModel.prototype.getPageByName = function (name) { + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].name == name) + return this.pages[i]; + } + return null; + }; + SurveyModel.prototype.getPagesByNames = function (names) { + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var page = this.getPageByName(names[i]); + if (page) + result.push(page); + } + return result; + }; + SurveyModel.prototype.getAllQuestions = function (visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].addQuestionsToList(result, visibleOnly); + } + return result; + }; + SurveyModel.prototype.createNewPage = function (name) { return new __WEBPACK_IMPORTED_MODULE_3__page__["a" /* PageModel */](name); }; + SurveyModel.prototype.notifyQuestionOnValueChanged = function (name, newValue) { + var questions = this.getAllQuestions(); + var question = null; + for (var i = 0; i < questions.length; i++) { + if (questions[i].name != name) + continue; + question = questions[i]; + this.doSurveyValueChanged(question, newValue); + } + this.onValueChanged.fire(this, { 'name': name, 'question': question, 'value': newValue }); + }; + SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.doSurveyValueChanged(questions[i], this.getValue(questions[i].name)); + } + }; + SurveyModel.prototype.doSurveyValueChanged = function (question, newValue) { + question.onSurveyValueChanged(newValue); + }; + SurveyModel.prototype.checkOnPageTriggers = function () { + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + var question = questions[i]; + var value = this.getValue(question.name); + this.checkTriggers(question.name, value, true); + } + }; + SurveyModel.prototype.getCurrentPageQuestions = function () { + var result = []; + var page = this.currentPage; + if (!page) + return result; + for (var i = 0; i < page.questions.length; i++) { + var question = page.questions[i]; + if (!question.visible || !question.name) + continue; + result.push(question); + } + return result; + }; + SurveyModel.prototype.checkTriggers = function (name, newValue, isOnNextPage) { + for (var i = 0; i < this.triggers.length; i++) { + var trigger = this.triggers[i]; + if (trigger.name == name && trigger.isOnNextPage == isOnNextPage) { + trigger.check(newValue); + } + } + }; + SurveyModel.prototype.doElementsOnLoad = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onSurveyLoad(); + } + }; + SurveyModel.prototype.runConditions = function () { + var pages = this.pages; + for (var i = 0; i < pages.length; i++) { + pages[i].runCondition(this.valuesHash); + } + }; + SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) { + if (postId === void 0) { postId = null; } + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + if (!this.isEditMode) + return; + if (isPartialCompleted && this.onPartialSend) { + this.onPartialSend.fire(this, null); + } + if (!postId && this.surveyPostId) { + postId = this.surveyPostId; + } + if (!postId) + return; + if (clientId) { + this.clientId = clientId; + } + if (isPartialCompleted && !this.clientId) + return; + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendResult(postId, this.data, function (success, response) { + self.onSendResult.fire(self, { success: success, response: response }); + }, this.clientId, isPartialCompleted); + }; + SurveyModel.prototype.getResult = function (resultId, name) { + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().getResult(resultId, name, function (success, data, dataList, response) { + self.onGetResult.fire(self, { success: success, data: data, dataList: dataList, response: response }); + }); + }; + SurveyModel.prototype.loadSurveyFromService = function (surveyId) { + if (surveyId === void 0) { surveyId = null; } + if (surveyId) { + this.surveyId = surveyId; + } + var self = this; + this.isLoading = true; + this.onLoadingSurveyFromService(); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().loadSurvey(this.surveyId, function (success, result, response) { + self.isLoading = false; + if (success && result) { + self.setJsonObject(result); + self.notifyAllQuestionsOnValueChanged(); + self.onLoadSurveyFromService(); + } + }); + }; + SurveyModel.prototype.onLoadingSurveyFromService = function () { + }; + SurveyModel.prototype.onLoadSurveyFromService = function () { + }; + SurveyModel.prototype.checkPageVisibility = function (question, oldQuestionVisible) { + var page = this.getPageByQuestion(question); + if (!page) + return; + var newValue = page.isVisible; + if (newValue != page.getIsPageVisible(question) || oldQuestionVisible) { + this.pageVisibilityChanged(page, newValue); + } + }; + SurveyModel.prototype.updateVisibleIndexes = function () { + this.updatePageVisibleIndexes(this.showPageNumbers); + if (this.showQuestionNumbers == "onPage") { + var visPages = this.visiblePages; + for (var i = 0; i < visPages.length; i++) { + this.updateQuestionVisibleIndexes(visPages[i].questions, true); + } + } + else { + this.updateQuestionVisibleIndexes(this.getAllQuestions(false), this.showQuestionNumbers == "on"); + } + }; + SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) { + var index = 0; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].visibleIndex = this.pages[i].visible ? (index++) : -1; + this.pages[i].num = showIndex && this.pages[i].visible ? this.pages[i].visibleIndex + 1 : -1; + } + }; + SurveyModel.prototype.updateQuestionVisibleIndexes = function (questions, showIndex) { + var index = 0; + for (var i = 0; i < questions.length; i++) { + questions[i].setVisibleIndex(showIndex && questions[i].visible && questions[i].hasTitle ? (index++) : -1); + } + }; + Object.defineProperty(SurveyModel.prototype, "isLoadingFromJson", { + get: function () { return this.isLoadingFromJsonValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setJsonObject = function (jsonObj) { + if (!jsonObj) + return; + this.jsonErrors = null; + this.isLoadingFromJsonValue = true; + var jsonConverter = new __WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */](); + jsonConverter.toObject(jsonObj, this); + if (jsonConverter.errors.length > 0) { + this.jsonErrors = jsonConverter.errors; + } + this.isLoadingFromJsonValue = false; + this.updateProcessedTextValues(); + if (this.hasCookie) { + this.doComplete(); + } + this.doElementsOnLoad(); + this.runConditions(); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.onBeforeCreating = function () { }; + SurveyModel.prototype.onCreating = function () { }; + SurveyModel.prototype.updateProcessedTextValues = function () { + this.processedTextValues = {}; + var self = this; + this.processedTextValues["pageno"] = function (name) { return self.currentPage != null ? self.visiblePages.indexOf(self.currentPage) + 1 : 0; }; + this.processedTextValues["pagecount"] = function (name) { return self.visiblePageCount; }; + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.addQuestionToProcessedTextValues(questions[i]); + } + }; + SurveyModel.prototype.addQuestionToProcessedTextValues = function (question) { + this.processedTextValues[question.name.toLowerCase()] = "question"; + }; + SurveyModel.prototype.hasProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + return this.processedTextValues[firstName.toLowerCase()]; + }; + SurveyModel.prototype.getProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + var val = this.processedTextValues[firstName.toLowerCase()]; + if (!val) + return null; + if (val == "variable") { + return this.getVariable(name.toLowerCase()); + } + if (val == "question") { + var question = this.getQuestionByName(firstName, true); + if (!question) + return null; + name = question.name + name.substr(firstName.length); + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + if (val == "value") { + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + return val(name); + }; + SurveyModel.prototype.clearUnusedValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + questions[i].clearUnusedValues(); + } + if (this.clearInvisibleValues) { + this.clearInvisibleQuestionValues(); + } + }; + SurveyModel.prototype.clearInvisibleQuestionValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].visible) + continue; + this.clearValue(questions[i].name); + } + }; + SurveyModel.prototype.getVariable = function (name) { + if (!name) + return null; + return this.variablesHash[name]; + }; + SurveyModel.prototype.setVariable = function (name, newValue) { + if (!name) + return; + this.variablesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "variable"; + }; + //ISurvey data + SurveyModel.prototype.getUnbindValue = function (value) { + if (value && value instanceof Object) { + //do not return the same object instance!!! + return JSON.parse(JSON.stringify(value)); + } + return value; + }; + SurveyModel.prototype.getValue = function (name) { + if (!name || name.length == 0) + return null; + var value = this.valuesHash[name]; + return this.getUnbindValue(value); + }; + SurveyModel.prototype.setValue = function (name, newValue) { + if (this.isValueEqual(name, newValue)) + return; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + newValue = this.getUnbindValue(newValue); + this.valuesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "value"; + } + this.notifyQuestionOnValueChanged(name, newValue); + this.checkTriggers(name, newValue, false); + this.runConditions(); + this.tryGoNextPageAutomatic(name); + }; + SurveyModel.prototype.isValueEqual = function (name, newValue) { + if (newValue == "") + newValue = null; + var oldValue = this.getValue(name); + if (newValue === null || oldValue === null) + return newValue === oldValue; + return this.isTwoValueEquals(newValue, oldValue); + }; + SurveyModel.prototype.tryGoNextPageAutomatic = function (name) { + if (!this.goNextPageAutomatic || !this.currentPage) + return; + var question = this.getQuestionByName(name); + if (question && (!question.visible || !question.supportGoNextPageAutomatic())) + return; + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].hasInput && !this.getValue(questions[i].name)) + return; + } + if (!this.currentPage.hasErrors(true, false)) { + if (!this.isLastPage) { + this.nextPage(); + } + else { + this.doComplete(); + } + } + }; + SurveyModel.prototype.getComment = function (name) { + var result = this.data[name + this.commentPrefix]; + if (result == null) + result = ""; + return result; + }; + SurveyModel.prototype.setComment = function (name, newValue) { + name = name + this.commentPrefix; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + this.valuesHash[name] = newValue; + this.tryGoNextPageAutomatic(name); + } + }; + SurveyModel.prototype.clearValue = function (name) { + this.setValue(name, null); + this.setComment(name, null); + }; + SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) { + this.updateVisibleIndexes(); + this.onVisibleChanged.fire(this, { 'question': question, 'name': question.name, 'visible': newValue }); + this.checkPageVisibility(question, !newValue); + }; + SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) { + this.updateVisibleIndexes(); + this.onPageVisibleChanged.fire(this, { 'page': page, 'visible': newValue }); + }; + SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.addQuestionToProcessedTextValues(question); + this.onQuestionAdded.fire(this, { 'question': question, 'name': question.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.questionRemoved = function (question) { + this.updateVisibleIndexes(); + this.onQuestionRemoved.fire(this, { 'question': question, 'name': question.name }); + }; + SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.onPanelAdded.fire(this, { 'panel': panel, 'name': panel.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.panelRemoved = function (panel) { + this.updateVisibleIndexes(); + this.onPanelRemoved.fire(this, { 'panel': panel, 'name': panel.name }); + }; + SurveyModel.prototype.validateQuestion = function (name) { + if (this.onValidateQuestion.isEmpty) + return null; + var options = { name: name, value: this.getValue(name), error: null }; + this.onValidateQuestion.fire(this, options); + return options.error ? new __WEBPACK_IMPORTED_MODULE_8__error__["c" /* CustomError */](options.error) : null; + }; + SurveyModel.prototype.processHtml = function (html) { + var options = { html: html }; + this.onProcessHtml.fire(this, options); + return this.processText(options.html); + }; + SurveyModel.prototype.processText = function (text) { + return this.textPreProcessor.process(text); + }; + //ISurveyTriggerOwner + SurveyModel.prototype.getObjects = function (pages, questions) { + var result = []; + Array.prototype.push.apply(result, this.getPagesByNames(pages)); + Array.prototype.push.apply(result, this.getQuestionsByNames(questions)); + return result; + }; + SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) { + if (!name) + return; + if (isVariable) { + this.setVariable(name, value); + } + else { + this.setValue(name, value); + } + }; + return SurveyModel; +}(__WEBPACK_IMPORTED_MODULE_2__base__["b" /* Base */])); + +//Make localizable: completedHtml, pagePrevText, pageNextText, completeText +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("survey", [{ name: "locale", choices: function () { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getLocales(); } }, + { name: "title", serializationProperty: "locTitle" }, { name: "focusFirstQuestionAutomatic:boolean", default: true }, + { name: "completedHtml:html", serializationProperty: "locCompletedHtml" }, { name: "pages", className: "page", visible: false }, + { name: "questions", baseClassName: "question", visible: false, onGetValue: function (obj) { return null; }, onSetValue: function (obj, value, jsonConverter) { var page = obj.addNewPage(""); jsonConverter.toObject({ questions: value }, page); } }, + { name: "triggers:triggers", baseClassName: "surveytrigger", classNamePart: "trigger" }, + "surveyId", "surveyPostId", "cookieName", "sendResultOnPageNext:boolean", + { name: "showNavigationButtons:boolean", default: true }, { name: "showTitle:boolean", default: true }, + { name: "showPageTitles:boolean", default: true }, { name: "showCompletedPage:boolean", default: true }, + "showPageNumbers:boolean", { name: "showQuestionNumbers", default: "on", choices: ["on", "onPage", "off"] }, + { name: "questionTitleLocation", default: "top", choices: ["top", "bottom"] }, + { name: "showProgressBar", default: "off", choices: ["off", "top", "bottom"] }, + { name: "mode", default: "edit", choices: ["edit", "display"] }, + { name: "storeOthersAsComment:boolean", default: true }, "goNextPageAutomatic:boolean", "clearInvisibleValues:boolean", + { name: "pagePrevText", serializationProperty: "locPagePrevText" }, + { name: "pageNextText", serializationProperty: "locPageNextText" }, + { name: "completeText", serializationProperty: "locCompleteText" }, + { name: "requiredText", default: "*" }, "questionStartIndex", { name: "questionTitleTemplate", serializationProperty: "locQuestionTitleTemplate" }]); + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TextPreProcessorItem */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TextPreProcessor; }); +var TextPreProcessorItem = (function () { + function TextPreProcessorItem() { + } + return TextPreProcessorItem; +}()); + +var TextPreProcessor = (function () { + function TextPreProcessor() { + } + TextPreProcessor.prototype.process = function (text) { + if (!text) + return text; + if (!this.onProcess) + return text; + var items = this.getItems(text); + for (var i = items.length - 1; i >= 0; i--) { + var item = items[i]; + var name = this.getName(text.substring(item.start + 1, item.end)); + if (!this.canProcessName(name)) + continue; + if (this.onHasValue && !this.onHasValue(name)) + continue; + var value = this.onProcess(name); + if (value == null) + value = ""; + text = text.substr(0, item.start) + value + text.substr(item.end + 1); + } + return text; + }; + TextPreProcessor.prototype.getItems = function (text) { + var items = []; + var length = text.length; + var start = -1; + var ch = ''; + for (var i = 0; i < length; i++) { + ch = text[i]; + if (ch == '{') + start = i; + if (ch == '}') { + if (start > -1) { + var item = new TextPreProcessorItem(); + item.start = start; + item.end = i; + items.push(item); + } + start = -1; + } + } + return items; + }; + TextPreProcessor.prototype.getName = function (name) { + if (!name) + return; + return name.trim(); + }; + TextPreProcessor.prototype.canProcessName = function (name) { + if (!name) + return false; + for (var i = 0; i < name.length; i++) { + var ch = name[i]; + //TODO + if (ch == ' ' || ch == '-' || ch == '&') + return false; + } + return true; + }; + return TextPreProcessor; +}()); + + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return ValidatorResult; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return SurveyValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ValidatorRunner; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return NumericValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return TextValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AnswerCountValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return RegexValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return EmailValidator; }); + + + + + +var ValidatorResult = (function () { + function ValidatorResult(value, error) { + if (error === void 0) { error = null; } + this.value = value; + this.error = error; + } + return ValidatorResult; +}()); + +var SurveyValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyValidator, _super); + function SurveyValidator() { + var _this = _super.call(this) || this; + _this.text = ""; + return _this; + } + SurveyValidator.prototype.getErrorText = function (name) { + if (this.text) + return this.text; + return this.getDefaultErrorText(name); + }; + SurveyValidator.prototype.getDefaultErrorText = function (name) { + return ""; + }; + SurveyValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + return null; + }; + return SurveyValidator; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var ValidatorRunner = (function () { + function ValidatorRunner() { + } + ValidatorRunner.prototype.run = function (owner) { + for (var i = 0; i < owner.validators.length; i++) { + var validatorResult = owner.validators[i].validate(owner.value, owner.getValidatorTitle()); + if (validatorResult != null) { + if (validatorResult.error) + return validatorResult.error; + if (validatorResult.value) { + owner.value = validatorResult.value; + } + } + } + return null; + }; + return ValidatorRunner; +}()); + +var NumericValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](NumericValidator, _super); + function NumericValidator(minValue, maxValue) { + if (minValue === void 0) { minValue = null; } + if (maxValue === void 0) { maxValue = null; } + var _this = _super.call(this) || this; + _this.minValue = minValue; + _this.maxValue = maxValue; + return _this; + } + NumericValidator.prototype.getType = function () { return "numericvalidator"; }; + NumericValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value || !this.isNumber(value)) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["b" /* RequreNumericError */]()); + } + var result = new ValidatorResult(parseFloat(value)); + if (this.minValue && this.minValue > result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name)); + return result; + } + if (this.maxValue && this.maxValue < result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name)); + return result; + } + return (typeof value === 'number') ? null : result; + }; + NumericValidator.prototype.getDefaultErrorText = function (name) { + var vName = name ? name : "value"; + if (this.minValue && this.maxValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMinMax")["format"](vName, this.minValue, this.maxValue); + } + else { + if (this.minValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMin")["format"](vName, this.minValue); + } + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMax")["format"](vName, this.maxValue); + } + }; + NumericValidator.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return NumericValidator; +}(SurveyValidator)); + +var TextValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](TextValidator, _super); + function TextValidator(minLength, maxLength) { + if (minLength === void 0) { minLength = 0; } + if (maxLength === void 0) { maxLength = 0; } + var _this = _super.call(this) || this; + _this.minLength = minLength; + _this.maxLength = maxLength; + return _this; + } + TextValidator.prototype.getType = function () { return "textvalidator"; }; + TextValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (this.minLength > 0 && value.length < this.minLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + } + if (this.maxLength > 0 && value.length > this.maxLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + } + return null; + }; + TextValidator.prototype.getDefaultErrorText = function (name) { + if (this.minLength > 0 && this.maxLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinMaxLength")["format"](this.minLength, this.maxLength); + if (this.minLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinLength")["format"](this.minLength); + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMaxLength")["format"](this.maxLength); + }; + return TextValidator; +}(SurveyValidator)); + +var AnswerCountValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerCountValidator, _super); + function AnswerCountValidator(minCount, maxCount) { + if (minCount === void 0) { minCount = null; } + if (maxCount === void 0) { maxCount = null; } + var _this = _super.call(this) || this; + _this.minCount = minCount; + _this.maxCount = maxCount; + return _this; + } + AnswerCountValidator.prototype.getType = function () { return "answercountvalidator"; }; + AnswerCountValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (value == null || value.constructor != Array) + return null; + var count = value.length; + if (this.minCount && count < this.minCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("minSelectError")["format"](this.minCount)))); + } + if (this.maxCount && count > this.maxCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("maxSelectError")["format"](this.maxCount)))); + } + return null; + }; + AnswerCountValidator.prototype.getDefaultErrorText = function (name) { + return name; + }; + return AnswerCountValidator; +}(SurveyValidator)); + +var RegexValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RegexValidator, _super); + function RegexValidator(regex) { + if (regex === void 0) { regex = null; } + var _this = _super.call(this) || this; + _this.regex = regex; + return _this; + } + RegexValidator.prototype.getType = function () { return "regexvalidator"; }; + RegexValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!this.regex || !value) + return null; + var re = new RegExp(this.regex); + if (re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + }; + return RegexValidator; +}(SurveyValidator)); + +var EmailValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](EmailValidator, _super); + function EmailValidator() { + var _this = _super.call(this) || this; + _this.re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; + return _this; + } + EmailValidator.prototype.getType = function () { return "emailvalidator"; }; + EmailValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value) + return null; + if (this.re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + }; + EmailValidator.prototype.getDefaultErrorText = function (name) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("invalidEmail"); + }; + return EmailValidator; +}(SurveyValidator)); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("surveyvalidator", ["text"]); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("numericvalidator", ["minValue:number", "maxValue:number"], function () { return new NumericValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("textvalidator", ["minLength:number", "maxLength:number"], function () { return new TextValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("answercountvalidator", ["minCount:number", "maxCount:number"], function () { return new AnswerCountValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("regexvalidator", ["regex"], function () { return new RegexValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("emailvalidator", [], function () { return new EmailValidator(); }, "surveyvalidator"); + + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurvey__ = __webpack_require__(16); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindow; }); + + + +var SurveyWindow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindow, _super); + function SurveyWindow(props) { + var _this = _super.call(this, props) || this; + _this.handleOnExpanded = _this.handleOnExpanded.bind(_this); + return _this; + } + SurveyWindow.prototype.handleOnExpanded = function (event) { + this.state.expanded = !this.state.expanded; + this.setState(this.state); + }; + SurveyWindow.prototype.render = function () { + if (this.state.hidden) + return null; + var header = this.renderHeader(); + var body = this.state.expanded ? this.renderBody() : null; + var style = { position: "fixed", bottom: "3px", right: "10px" }; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.root, style: style }, + header, + body); + }; + SurveyWindow.prototype.renderHeader = function () { + var styleA = { width: "100%" }; + var styleTitle = { paddingRight: "10px" }; + var glyphClassName = this.state.expanded ? this.css.window.header.buttonCollapsed : this.css.window.header.buttonExpanded; + glyphClassName = "glyphicon pull-right " + glyphClassName; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.header.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("a", { href: "#", onClick: this.handleOnExpanded, style: styleA }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: this.css.window.header.title, style: styleTitle }, this.title), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: glyphClassName, "aria-hidden": "true" }))); + }; + SurveyWindow.prototype.renderBody = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.body }, this.renderSurvey()); + }; + SurveyWindow.prototype.updateSurvey = function (newProps) { + _super.prototype.updateSurvey.call(this, newProps); + this.title = newProps.title ? newProps.title : this.survey.title; + var hasExpanded = newProps["expanded"] ? newProps.expanded : false; + this.state = { expanded: hasExpanded, hidden: false }; + var self = this; + this.survey.onComplete.add(function (s) { + self.state.hidden = true; + self.setState(self.state); + }); + }; + return SurveyWindow; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurvey__["a" /* Survey */])); + + + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditions__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionsParser; }); + +var ConditionsParser = (function () { + function ConditionsParser() { + } + ConditionsParser.prototype.parse = function (text, root) { + this.text = text; + this.root = root; + this.root.clear(); + this.at = 0; + this.length = this.text.length; + var res = this.parseText(); + return res; + }; + ConditionsParser.prototype.toString = function (root) { + this.root = root; + return this.nodeToString(root); + }; + ConditionsParser.prototype.toStringCore = function (value) { + if (!value) + return ""; + if (value["children"]) + return this.nodeToString(value); + if (value["left"]) + return this.conditionToString(value); + return ""; + }; + ConditionsParser.prototype.nodeToString = function (node) { + if (node.isEmpty) + return ""; + var res = ""; + for (var i = 0; i < node.children.length; i++) { + var nodeText = this.toStringCore(node.children[i]); + if (nodeText) { + if (res) + res += ' ' + node.connective + ' '; + res += nodeText; + } + } + if (node != this.root && node.children.length > 1) { + res = '(' + res + ')'; + } + return res; + }; + ConditionsParser.prototype.conditionToString = function (condition) { + if (!condition.right || !condition.operator) + return ""; + var left = condition.left; + if (left && !this.isNumeric(left)) + left = "'" + left + "'"; + var res = left + ' ' + this.operationToString(condition.operator); + if (this.isNoRightOperation(condition.operator)) + return res; + var right = condition.right; + if (right && !this.isNumeric(right)) + right = "'" + right + "'"; + return res + ' ' + right; + }; + ConditionsParser.prototype.operationToString = function (op) { + if (op == "equal") + return "="; + if (op == "notequal") + return "!="; + if (op == "greater") + return ">"; + if (op == "less") + return "<"; + if (op == "greaterorequal") + return ">="; + if (op == "lessorequal") + return "<="; + return op; + }; + ConditionsParser.prototype.isNumeric = function (value) { + var val = parseFloat(value); + if (isNaN(val)) + return false; + return isFinite(val); + }; + ConditionsParser.prototype.parseText = function () { + this.node = this.root; + this.expressionNodes = []; + this.expressionNodes.push(this.node); + var res = this.readConditions(); + return res && this.at >= this.length; + }; + ConditionsParser.prototype.readConditions = function () { + var res = this.readCondition(); + if (!res) + return res; + var connective = this.readConnective(); + if (connective) { + this.addConnective(connective); + return this.readConditions(); + } + return true; + }; + ConditionsParser.prototype.readCondition = function () { + var expRes = this.readExpression(); + if (expRes < 0) + return false; + if (expRes == 1) + return true; + var left = this.readString(); + if (!left) + return false; + var op = this.readOperator(); + if (!op) + return false; + var c = new __WEBPACK_IMPORTED_MODULE_0__conditions__["b" /* Condition */](); + c.left = left; + c.operator = op; + if (!this.isNoRightOperation(op)) { + var right = this.readString(); + if (!right) + return false; + c.right = right; + } + this.addCondition(c); + return true; + }; + ConditionsParser.prototype.readExpression = function () { + this.skip(); + if (this.at >= this.length || this.ch != '(') + return 0; + this.at++; + this.pushExpression(); + var res = this.readConditions(); + if (res) { + this.skip(); + res = this.ch == ')'; + this.at++; + this.popExpression(); + return 1; + } + return -1; + }; + Object.defineProperty(ConditionsParser.prototype, "ch", { + get: function () { return this.text.charAt(this.at); }, + enumerable: true, + configurable: true + }); + ConditionsParser.prototype.skip = function () { + while (this.at < this.length && this.isSpace(this.ch)) + this.at++; + }; + ConditionsParser.prototype.isSpace = function (c) { + return c == ' ' || c == '\n' || c == '\t' || c == '\r'; + }; + ConditionsParser.prototype.isQuotes = function (c) { + return c == "'" || c == '"'; + }; + ConditionsParser.prototype.isOperatorChar = function (c) { + return c == '>' || c == '<' || c == '=' || c == '!'; + }; + ConditionsParser.prototype.isBrackets = function (c) { + return c == '(' || c == ')'; + }; + ConditionsParser.prototype.readString = function () { + this.skip(); + if (this.at >= this.length) + return null; + var start = this.at; + var hasQuotes = this.isQuotes(this.ch); + if (hasQuotes) + this.at++; + var isFirstOpCh = this.isOperatorChar(this.ch); + while (this.at < this.length) { + if (!hasQuotes && this.isSpace(this.ch)) + break; + if (this.isQuotes(this.ch)) { + if (hasQuotes) + this.at++; + break; + } + if (!hasQuotes) { + if (isFirstOpCh != this.isOperatorChar(this.ch)) + break; + if (this.isBrackets(this.ch)) + break; + } + this.at++; + } + if (this.at <= start) + return null; + var res = this.text.substr(start, this.at - start); + if (res) { + if (res.length > 1 && this.isQuotes(res[0])) { + var len = res.length - 1; + if (this.isQuotes(res[res.length - 1])) + len--; + res = res.substr(1, len); + } + } + return res; + }; + ConditionsParser.prototype.isNoRightOperation = function (op) { + return op == "empty" || op == "notempty"; + }; + ConditionsParser.prototype.readOperator = function () { + var op = this.readString(); + if (!op) + return null; + op = op.toLowerCase(); + if (op == '>') + op = "greater"; + if (op == '<') + op = "less"; + if (op == '>=' || op == '=>') + op = "greaterorequal"; + if (op == '<=' || op == '=<') + op = "lessorequal"; + if (op == '=' || op == '==') + op = "equal"; + if (op == '<>' || op == '!=') + op = "notequal"; + if (op == 'contain') + op = "contains"; + if (op == 'notcontain') + op = "notcontains"; + return op; + }; + ConditionsParser.prototype.readConnective = function () { + var con = this.readString(); + if (!con) + return null; + con = con.toLowerCase(); + if (con == "&" || con == "&&") + con = "and"; + if (con == "|" || con == "||") + con = "or"; + if (con != "and" && con != "or") + con = null; + return con; + }; + ConditionsParser.prototype.pushExpression = function () { + var node = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.expressionNodes.push(node); + this.node = node; + }; + ConditionsParser.prototype.popExpression = function () { + var node = this.expressionNodes.pop(); + this.node = this.expressionNodes[this.expressionNodes.length - 1]; + this.node.children.push(node); + }; + ConditionsParser.prototype.addCondition = function (c) { + this.node.children.push(c); + }; + ConditionsParser.prototype.addConnective = function (con) { + if (this.node.children.length < 2) { + this.node.connective = con; + } + else { + if (this.node.connective != con) { + var oldCon = this.node.connective; + var oldChildren = this.node.children; + this.node.clear(); + this.node.connective = con; + var oldNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + oldNode.connective = oldCon; + oldNode.children = oldChildren; + this.node.children.push(oldNode); + var newNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.node.children.push(newNode); + this.node = newNode; + } + } + }; + return ConditionsParser; +}()); + + + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return dxSurveyService; }); +var dxSurveyService = (function () { + //public static serviceUrl: string = "http://localhost:50488/api/Survey"; + function dxSurveyService() { + } + dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', dxSurveyService.serviceUrl + '/getSurvey?surveyId=' + surveyId); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.onload = function () { + var result = JSON.parse(xhr.response); + onLoad(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) { + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + var xhr = new XMLHttpRequest(); + xhr.open('POST', dxSurveyService.serviceUrl + '/post/'); + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + var data = { postId: postId, surveyResult: JSON.stringify(result) }; + if (clientId) + data['clientId'] = clientId; + if (isPartialCompleted) + data['isPartialCompleted'] = true; + var dataStringify = JSON.stringify(data); + var self = this; + xhr.onload = xhr.onerror = function () { + if (!onSendResult) + return; + onSendResult(xhr.status == 200, xhr.response); + }; + xhr.send(dataStringify); + }; + dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) { + var xhr = new XMLHttpRequest(); + xhr.onload = xhr.onerror = function () { + if (!onSendFile) + return; + onSendFile(xhr.status == 200, JSON.parse(xhr.response)); + }; + xhr.open("POST", dxSurveyService.serviceUrl + '/upload/', true); + var formData = new FormData(); + formData.append("file", file); + formData.append("postId", postId); + xhr.send(formData); + }; + dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&name=' + name; + xhr.open('GET', dxSurveyService.serviceUrl + '/getResult?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + var list = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + list = []; + for (var key in result.QuestionResult) { + var el = { name: key, value: result.QuestionResult[key] }; + list.push(el); + } + } + onGetResult(xhr.status == 200, result, list, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&clientId=' + clientId; + xhr.open('GET', dxSurveyService.serviceUrl + '/isCompleted?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + } + onIsCompleted(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + return dxSurveyService; +}()); + +dxSurveyService.serviceUrl = "https://dxsurveyapi.azurewebsites.net/api/Survey"; + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(31); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PageModel; }); + + + + +var PageModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PageModel, _super); + function PageModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.numValue = -1; + _this.navigationButtonsVisibility = "inherit"; + return _this; + } + PageModel.prototype.getType = function () { return "page"; }; + Object.defineProperty(PageModel.prototype, "num", { + get: function () { return this.numValue; }, + set: function (value) { + if (this.numValue == value) + return; + this.numValue = value; + this.onNumChanged(value); + }, + enumerable: true, + configurable: true + }); + PageModel.prototype.focusFirstQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + var question = this.questions[i]; + if (!question.visible || !question.hasInput) + continue; + this.questions[i].focus(); + break; + } + }; + PageModel.prototype.focusFirstErrorQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + if (!this.questions[i].visible || this.questions[i].currentErrorCount == 0) + continue; + this.questions[i].focus(true); + break; + } + }; + PageModel.prototype.scrollToTop = function () { + __WEBPACK_IMPORTED_MODULE_2__base__["a" /* SurveyElement */].ScrollElementToTop(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyPageId */]); + }; + PageModel.prototype.onNumChanged = function (value) { + }; + PageModel.prototype.onVisibleChanged = function () { + _super.prototype.onVisibleChanged.call(this); + if (this.data != null) { + this.data.pageVisibilityChanged(this, this.visible); + } + }; + return PageModel; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["a" /* PanelModelBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("page", [{ name: "navigationButtonsVisibility", default: "inherit", choices: ["iherit", "show", "hide"] }], function () { return new PageModel(); }, "panel"); + + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return QuestionRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanelModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PanelModel; }); + + + + + + +var QuestionRowModel = (function () { + function QuestionRowModel(panel) { + this.panel = panel; + this.elements = []; + this.visibleValue = panel.data && panel.data.isDesignMode; + } + Object.defineProperty(QuestionRowModel.prototype, "questions", { + //TODO remove after updating react and vue + get: function () { return this.elements; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRowModel.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionRowModel.prototype.updateVisible = function () { + this.visible = this.calcVisible(); + this.setWidth(); + }; + QuestionRowModel.prototype.addElement = function (q) { + this.elements.push(q); + this.updateVisible(); + }; + QuestionRowModel.prototype.onVisibleChanged = function () { + if (this.visibilityChangedCallback) + this.visibilityChangedCallback(); + }; + QuestionRowModel.prototype.setWidth = function () { + var visCount = this.getVisibleCount(); + if (visCount == 0) + return; + var counter = 0; + for (var i = 0; i < this.elements.length; i++) + if (this.elements[i].isVisible) { + var q = this.elements[i]; + q.renderWidth = q.width ? q.width : Math.floor(100 / visCount) + '%'; + q.rightIndent = counter < visCount - 1 ? 1 : 0; + counter++; + } + }; + QuestionRowModel.prototype.getVisibleCount = function () { + var res = 0; + for (var i = 0; i < this.elements.length; i++) { + if (this.elements[i].isVisible) + res++; + } + return res; + }; + QuestionRowModel.prototype.calcVisible = function () { return this.getVisibleCount() > 0; }; + return QuestionRowModel; +}()); + +var PanelModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModelBase, _super); + function PanelModelBase(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this) || this; + _this.name = name; + _this.dataValue = null; + _this.rowValues = null; + _this.conditionRunner = null; + _this.elementsValue = new Array(); + _this.isQuestionsReady = false; + _this.questionsValue = new Array(); + _this.parent = null; + _this.visibleIf = ""; + _this.visibleIndex = -1; + _this.visibleValue = true; + _this.idValue = PanelModelBase.getPanelId(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.elementsValue.push = function (value) { return self.doOnPushElement(this, value); }; + _this.elementsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + return self.doSpliceElements.apply(self, [this, start, deleteCount].concat(items)); + }; + return _this; + } + PanelModelBase.getPanelId = function () { + return "sp_" + PanelModelBase.panelCounter++; + }; + Object.defineProperty(PanelModelBase.prototype, "data", { + get: function () { return this.dataValue; }, + set: function (value) { + if (this.dataValue === value) + return; + this.dataValue = value; + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].setData(value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (newValue) { + this.locTitle.text = newValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + Object.defineProperty(PanelModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "questions", { + get: function () { + if (!this.isQuestionsReady) { + this.questionsValue = []; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel) { + var qs = el.questions; + for (var j = 0; j < qs.length; j++) { + this.questionsValue.push(qs[j]); + } + } + else { + this.questionsValue.push(el); + } + } + this.isQuestionsReady = true; + } + return this.questionsValue; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.markQuestionListDirty = function () { + this.isQuestionsReady = false; + if (this.parent) + this.parent.markQuestionListDirty(); + }; + Object.defineProperty(PanelModelBase.prototype, "elements", { + get: function () { return this.elementsValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.containsElement = function (element) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el == element) + return true; + if (el.isPanel) { + if (el.containsElement(element)) + return true; + } + } + return false; + }; + PanelModelBase.prototype.hasErrors = function (fireCallback, focuseOnFirstError) { + if (fireCallback === void 0) { fireCallback = true; } + if (focuseOnFirstError === void 0) { focuseOnFirstError = false; } + var result = false; + var firstErrorQuestion = null; + var visibleQuestions = []; + this.addQuestionsToList(visibleQuestions, true); + for (var i = 0; i < visibleQuestions.length; i++) { + var question = visibleQuestions[i]; + if (question.isReadOnly) + continue; + if (question.hasErrors(fireCallback)) { + if (focuseOnFirstError && firstErrorQuestion == null) { + firstErrorQuestion = question; + } + result = true; + } + } + if (firstErrorQuestion) + firstErrorQuestion.focus(true); + return result; + }; + PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + if (visibleOnly && !this.visible) + return; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (visibleOnly && !el.visible) + continue; + if (el.isPanel) { + el.addQuestionsToList(list, visibleOnly); + } + else { + list.push(el); + } + } + }; + Object.defineProperty(PanelModelBase.prototype, "rows", { + get: function () { + if (!this.rowValues) { + this.rowValues = this.buildRows(); + } + return this.rowValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isActive", { + get: function () { return (!this.data) || this.data.currentPage == this.root; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "root", { + get: function () { + var res = this; + while (res.parent) + res = res.parent; + return res; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.createRow = function () { return new QuestionRowModel(this); }; + PanelModelBase.prototype.onSurveyLoad = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onSurveyLoad(); + } + if (this.rowsChangedCallback) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isLoadingFromJson", { + get: function () { return this.data && this.data.isLoadingFromJson; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onRowsChanged = function () { + this.rowValues = null; + if (this.rowsChangedCallback && !this.isLoadingFromJson) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isDesignMode", { + get: function () { return this.data && this.data.isDesignMode; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.doOnPushElement = function (list, value) { + var result = Array.prototype.push.call(list, value); + this.markQuestionListDirty(); + this.onAddElement(value, list.length); + this.onRowsChanged(); + return result; + }; + PanelModelBase.prototype.doSpliceElements = function (list, start, deleteCount) { + var items = []; + for (var _i = 3; _i < arguments.length; _i++) { + items[_i - 3] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var deletedQuestions = []; + for (var i = 0; i < deleteCount; i++) { + if (i + start >= list.length) + continue; + deletedQuestions.push(list[i + start]); + } + var result = (_a = Array.prototype.splice).call.apply(_a, [list, start, deleteCount].concat(items)); + this.markQuestionListDirty(); + if (!items) + items = []; + for (var i = 0; i < deletedQuestions.length; i++) { + this.onRemoveElement(deletedQuestions[i]); + } + for (var i = 0; i < items.length; i++) { + this.onAddElement(items[i], start + i); + } + this.onRowsChanged(); + return result; + var _a; + }; + PanelModelBase.prototype.onAddElement = function (element, index) { + if (element.isPanel) { + var p = element; + p.data = this.data; + p.parent = this; + if (this.data) { + this.data.panelAdded(p, index, this, this.root); + } + } + else { + if (this.data) { + var q = element; + q.setData(this.data); + this.data.questionAdded(q, index, this, this.root); + } + } + var self = this; + element.rowVisibilityChangedCallback = function () { self.onElementVisibilityChanged(element); }; + element.startWithNewLineChangedCallback = function () { self.onElementStartWithNewLineChanged(element); }; + }; + PanelModelBase.prototype.onRemoveElement = function (element) { + if (!element.isPanel) { + if (this.data) + this.data.questionRemoved(element); + } + else { + if (this.data) + this.data.panelRemoved(element); + } + }; + PanelModelBase.prototype.onElementVisibilityChanged = function (element) { + if (this.rowValues) { + this.updateRowsVisibility(element); + } + if (this.parent) { + this.parent.onElementVisibilityChanged(this); + } + }; + PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) { + this.onRowsChanged(); + }; + PanelModelBase.prototype.updateRowsVisibility = function (element) { + for (var i = 0; i < this.rowValues.length; i++) { + var row = this.rowValues[i]; + if (row.elements.indexOf(element) > -1) { + row.updateVisible(); + break; + } + } + }; + PanelModelBase.prototype.buildRows = function () { + var result = new Array(); + var lastRowVisibleIndex = -1; + var self = this; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + var isNewRow = i == 0 || el.startWithNewLine; + var row = isNewRow ? this.createRow() : result[result.length - 1]; + if (isNewRow) + result.push(row); + row.addElement(el); + } + for (var i = 0; i < result.length; i++) { + result[i].updateVisible(); + } + return result; + }; + Object.defineProperty(PanelModelBase.prototype, "processedTitle", { + get: function () { + var str = this.title; + if (!str && this.isPanel && this.isDesignMode) + return "[" + this.name + "]"; + return this.data != null ? this.data.processText(str) : str; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (value) { + if (value === this.visible) + return; + this.visibleValue = value; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onVisibleChanged = function () { + }; + Object.defineProperty(PanelModelBase.prototype, "isVisible", { + get: function () { return (this.data && this.data.isDesignMode) || this.getIsPageVisible(null); }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) { + if (!this.visible) + return false; + for (var i = 0; i < this.questions.length; i++) { + if (this.questions[i] == exceptionQuestion) + continue; + if (this.questions[i].visible) + return true; + } + return false; + }; + PanelModelBase.prototype.addElement = function (element, index) { + if (index === void 0) { index = -1; } + if (element == null) + return; + if (index < 0 || index >= this.elements.length) { + this.elements.push(element); + } + else { + this.elements.splice(index, 0, element); + } + }; + PanelModelBase.prototype.addQuestion = function (question, index) { + if (index === void 0) { index = -1; } + this.addElement(question, index); + }; + PanelModelBase.prototype.addPanel = function (panel, index) { + if (index === void 0) { index = -1; } + this.addElement(panel, index); + }; + PanelModelBase.prototype.addNewQuestion = function (questionType, name) { + var question = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + this.addQuestion(question); + return question; + }; + PanelModelBase.prototype.addNewPanel = function (name) { + var panel = this.createNewPanel(name); + this.addPanel(panel); + return panel; + }; + PanelModelBase.prototype.createNewPanel = function (name) { + return new PanelModel(name); + }; + PanelModelBase.prototype.removeElement = function (element) { + var index = this.elements.indexOf(element); + if (index < 0) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel && el.removeElement(element)) + return true; + } + return false; + } + this.elements.splice(index, 1); + return true; + }; + PanelModelBase.prototype.removeQuestion = function (question) { + this.removeElement(question); + }; + PanelModelBase.prototype.runCondition = function (values) { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].runCondition(values); + } + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + PanelModelBase.prototype.onLocaleChanged = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onLocaleChanged(); + } + }; + return PanelModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__base__["b" /* Base */])); + +PanelModelBase.panelCounter = 100; +//export class +var PanelModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModel, _super); + function PanelModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.innerIndentValue = 0; + _this.startWithNewLineValue = true; + return _this; + } + PanelModel.prototype.getType = function () { return "panel"; }; + PanelModel.prototype.setData = function (newValue) { + this.data = newValue; + }; + Object.defineProperty(PanelModel.prototype, "isPanel", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "innerIndent", { + get: function () { return this.innerIndentValue; }, + set: function (val) { + if (val == this.innerIndentValue) + return; + this.innerIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + PanelModel.prototype.onVisibleChanged = function () { + if (this.rowVisibilityChangedCallback) + this.rowVisibilityChangedCallback(); + }; + return PanelModel; +}(PanelModelBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("panel", ["name", { name: "elements", alternativeName: "questions", baseClassName: "question", visible: false }, + { name: "visible:boolean", default: true }, "visibleIf:expression", { name: "title:text", serializationProperty: "locTitle" }, + { name: "innerIndent:number", default: 0, choices: [0, 1, 2, 3] }], function () { return new PanelModel(); }); + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionCustomWidget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomWidgetCollection; }); + +var QuestionCustomWidget = (function () { + function QuestionCustomWidget(name, widgetJson) { + this.name = name; + this.widgetJson = widgetJson; + this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : ""; + } + QuestionCustomWidget.prototype.afterRender = function (question, el) { + if (this.widgetJson.afterRender) + this.widgetJson.afterRender(question, el); + }; + QuestionCustomWidget.prototype.willUnmount = function (question, el) { + if (this.widgetJson.willUnmount) + this.widgetJson.willUnmount(question, el); + }; + QuestionCustomWidget.prototype.isFit = function (question) { + if (this.widgetJson.isFit) + return this.widgetJson.isFit(question); + return false; + }; + return QuestionCustomWidget; +}()); + +var CustomWidgetCollection = (function () { + function CustomWidgetCollection() { + this.widgetsValues = []; + this.onCustomWidgetAdded = new __WEBPACK_IMPORTED_MODULE_0__base__["d" /* Event */](); + } + Object.defineProperty(CustomWidgetCollection.prototype, "widgets", { + get: function () { return this.widgetsValues; }, + enumerable: true, + configurable: true + }); + CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson) { + var name = widgetJson.name; + if (!name) { + name = "widget_" + this.widgets.length + 1; + } + var customWidget = new QuestionCustomWidget(name, widgetJson); + this.widgetsValues.push(customWidget); + this.onCustomWidgetAdded.fire(customWidget, null); + }; + CustomWidgetCollection.prototype.clear = function () { this.widgetsValues = []; }; + CustomWidgetCollection.prototype.getCustomWidget = function (question) { + for (var i = 0; i < this.widgetsValues.length; i++) { + if (this.widgetsValues[i].isFit(question)) + return this.widgetsValues[i]; + } + return null; + }; + return CustomWidgetCollection; +}()); + +CustomWidgetCollection.Instance = new CustomWidgetCollection(); + + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__ = __webpack_require__(22); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNavigation; }); + + + +var SurveyNavigation = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyNavigation, _super); + function SurveyNavigation(props) { + var _this = _super.call(this, props) || this; + _this.handlePrevClick = _this.handlePrevClick.bind(_this); + _this.handleNextClick = _this.handleNextClick.bind(_this); + _this.handleCompleteClick = _this.handleCompleteClick.bind(_this); + return _this; + } + SurveyNavigation.prototype.handlePrevClick = function (event) { + this.survey.prevPage(); + }; + SurveyNavigation.prototype.handleNextClick = function (event) { + this.survey.nextPage(); + }; + SurveyNavigation.prototype.handleCompleteClick = function (event) { + this.survey.completeLastPage(); + }; + SurveyNavigation.prototype.render = function () { + if (!this.survey || !this.survey.isNavigationButtonsShowing) + return null; + var prevButton = !this.survey.isFirstPage ? this.renderButton(this.handlePrevClick, this.survey.pagePrevText, this.css.navigation.prev) : null; + var nextButton = !this.survey.isLastPage ? this.renderButton(this.handleNextClick, this.survey.pageNextText, this.css.navigation.next) : null; + var completeButton = this.survey.isLastPage && this.survey.isEditMode ? this.renderButton(this.handleCompleteClick, this.survey.completeText, this.css.navigation.complete) : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.footer }, + prevButton, + nextButton, + completeButton)); + }; + SurveyNavigation.prototype.renderButton = function (click, text, btnClassName) { + var style = { marginRight: "5px" }; + var className = this.css.navigationButton + (btnClassName ? ' ' + btnClassName : ""); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: className, style: style, type: "button", onClick: click, value: text }); + }; + return SurveyNavigation; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__["a" /* SurveyNavigationBase */])); + + + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__ = __webpack_require__(22); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyProgress; }); + + + +var SurveyProgress = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyProgress, _super); + function SurveyProgress(props) { + var _this = _super.call(this, props) || this; + _this.isTop = props.isTop; + return _this; + } + SurveyProgress.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.isTop = nextProps.isTop; + }; + Object.defineProperty(SurveyProgress.prototype, "progress", { + get: function () { return this.survey.getProgress(); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyProgress.prototype, "progressText", { + get: function () { return this.survey.progressText; }, + enumerable: true, + configurable: true + }); + SurveyProgress.prototype.render = function () { + var style = this.isTop ? { width: "60%" } : { width: "60%", marginTop: "10px" }; + var progressStyle = { width: this.progress + "%" }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.progress, style: style }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: progressStyle, className: this.css.progressBar, role: "progressbar", "aria-valuemin": "0", "aria-valuemax": "100" }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.progressText)))); + }; + return SurveyProgress; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__["a" /* SurveyNavigationBase */])); + + + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestion__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPage; }); +/* unused harmony export SurveyPanel */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyRow; }); + + + +var SurveyPage = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyPage, _super); + function SurveyPage(props) { + var _this = _super.call(this, props) || this; + _this.page = props.page; + _this.survey = props.survey; + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyPage.prototype.componentWillReceiveProps = function (nextProps) { + this.page = nextProps.page; + this.survey = nextProps.survey; + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyPage.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.afterRenderPage(el); + }; + SurveyPage.prototype.render = function () { + if (this.page == null || this.survey == null || this.creator == null) + return null; + var title = this.renderTitle(); + var rows = []; + var questionRows = this.page.rows; + for (var i = 0; i < questionRows.length; i++) { + rows.push(this.createRow(questionRows[i], i)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root" }, + title, + rows)); + }; + SurveyPage.prototype.createRow = function (row, index) { + var rowName = "row" + (index + 1); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyRow, { key: rowName, row: row, survey: this.survey, creator: this.creator, css: this.css }); + }; + SurveyPage.prototype.renderTitle = function () { + if (!this.page.title || !this.survey.showPageTitles) + return null; + var text = this.page.processedTitle; + if (this.page.num > 0) { + text = this.page.num + ". " + text; + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h4", { className: this.css.pageTitle }, text)); + }; + return SurveyPage; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyPanel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyPanel, _super); + function SurveyPanel(props) { + var _this = _super.call(this, props) || this; + _this.panel = props.panel; + _this.survey = props.survey; + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyPanel.prototype.componentWillReceiveProps = function (nextProps) { + this.panel = nextProps.panel; + this.survey = nextProps.survey; + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyPanel.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.afterRenderPage(el); + }; + SurveyPanel.prototype.render = function () { + if (this.panel == null || this.survey == null || this.creator == null) + return null; + var title = this.renderTitle(); + var rows = []; + var questionRows = this.panel.rows; + for (var i = 0; i < questionRows.length; i++) { + rows.push(this.createRow(questionRows[i], i)); + } + var style = { "marginLeft": this.panel.innerIndent * this.css.question.indent + 'px' }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root" }, + title, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: style }, rows))); + }; + SurveyPanel.prototype.createRow = function (row, index) { + var rowName = "row" + (index + 1); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyRow, { key: rowName, row: row, survey: this.survey, creator: this.creator, css: this.css }); + }; + SurveyPanel.prototype.renderTitle = function () { + if (!this.panel.title) + return null; + var text = this.panel.processedTitle; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h4", { className: this.css.pageTitle }, text)); + }; + return SurveyPanel; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyRow, _super); + function SurveyRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyRow.prototype.componentWillReceiveProps = function (nextProps) { + this.setProperties(nextProps); + }; + SurveyRow.prototype.setProperties = function (props) { + this.row = props.row; + if (this.row) { + var self = this; + this.row.visibilityChangedCallback = function () { self.setState({ visible: self.row.visible }); }; + } + this.survey = props.survey; + this.creator = props.creator; + this.css = props.css; + }; + SurveyRow.prototype.render = function () { + if (this.row == null || this.survey == null || this.creator == null) + return null; + var questions = null; + if (this.row.visible) { + questions = []; + for (var i = 0; i < this.row.elements.length; i++) { + var question = this.row.elements[i]; + questions.push(this.createQuestion(question)); + } + } + var style = this.row.visible ? {} : { display: "none" }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.row, style: style }, questions)); + }; + SurveyRow.prototype.createQuestion = function (question) { + if (question.isPanel) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyPanel, { key: question.name, panel: question, creator: this.creator, survey: this.survey, css: this.css }); + } + else { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_2__reactquestion__["a" /* SurveyQuestion */], { key: question.name, question: question, creator: this.creator, css: this.css }); + } + }; + return SurveyRow; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__chunks_model__ = __webpack_require__(44); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["a"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["b"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["c"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["d"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["e"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["f"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["g"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["h"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["i"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["j"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["k"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["l"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["m"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["n"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["o"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["p"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["q"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["r"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["s"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["t"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["u"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["v"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["w"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["x"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["y"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["z"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["A"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["B"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["C"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["D"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["E"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["F"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["G"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["H"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["I"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["J"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["K"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["L"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["M"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["N"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_23", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["O"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_24", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["P"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_25", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Q"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_26", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["R"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_27", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["S"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_28", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["T"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_29", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["U"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_30", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["V"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_31", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["W"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_32", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["X"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_33", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Y"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_34", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Z"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_35", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_0"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_36", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_1"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_37", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_2"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_38", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_3"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_39", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_4"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_40", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_5"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_41", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_6"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_42", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_7"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_43", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_8"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_44", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_9"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_45", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_10"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_46", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_11"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_47", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_12"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_48", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_13"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_49", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_14"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_50", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_15"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_51", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_16"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_52", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_17"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_53", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_18"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_54", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_19"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_55", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_20"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_56", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_21"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_57", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_22"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__chunks_localization__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__ = __webpack_require__(0); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_58", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["a"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_59", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["b"]; }); +/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "_60", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(19); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__ = __webpack_require__(42); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__react_reactSurvey__ = __webpack_require__(16); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_5__react_reactSurvey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__ = __webpack_require__(23); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__react_reactSurveyNavigationBase__ = __webpack_require__(22); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_7__react_reactSurveyNavigationBase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__react_reactSurveyNavigation__ = __webpack_require__(33); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_8__react_reactSurveyNavigation__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__react_reactpage__ = __webpack_require__(35); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_9__react_reactpage__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_9__react_reactpage__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__ = __webpack_require__(15); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__ = __webpack_require__(8); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__ = __webpack_require__(69); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__react_reactquestiondropdown__ = __webpack_require__(70); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_14__react_reactquestiondropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__ = __webpack_require__(74); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__ = __webpack_require__(73); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__react_reactquestionhtml__ = __webpack_require__(72); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_17__react_reactquestionhtml__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__react_reactquestionfile__ = __webpack_require__(71); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_18__react_reactquestionfile__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__ = __webpack_require__(76); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__react_reactquestionradiogroup__ = __webpack_require__(77); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_20__react_reactquestionradiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__react_reactquestiontext__ = __webpack_require__(79); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_21__react_reactquestiontext__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__ = __webpack_require__(75); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__react_reactSurveyProgress__ = __webpack_require__(34); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_23__react_reactSurveyProgress__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__react_reactquestionrating__ = __webpack_require__(78); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_24__react_reactquestionrating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__react_reactSurveyWindow__ = __webpack_require__(27); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_25__react_reactSurveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__ = __webpack_require__(6); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__["a"]; }); +// model + +// localization + +// helpers + +// css standard + +// css bootstrap + +// react + + // TODO need to remove someday + + + + + + + + + + + + + + + + + + + + + // TODO need to remove someday + +//Uncomment to include the "date" question type. +//export {default as SurveyQuestionDate} from "../plugins/react/reactquestiondate"; + + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_37__; + +/***/ }), +/* 38 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +!function(global, factory) { + true ? factory(exports) : 'function' == typeof define && define.amd ? define([ 'exports' ], factory) : factory(global.preact = global.preact || {}); +}(this, function(exports) { + function VNode(nodeName, attributes, children) { + this.nodeName = nodeName; + this.attributes = attributes; + this.children = children; + this.key = attributes && attributes.key; + } + function h(nodeName, attributes) { + var children, lastSimple, child, simple, i; + for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]); + if (attributes && attributes.children) { + if (!stack.length) stack.push(attributes.children); + delete attributes.children; + } + while (stack.length) if ((child = stack.pop()) instanceof Array) for (i = child.length; i--; ) stack.push(child[i]); else if (null != child && child !== !0 && child !== !1) { + if ('number' == typeof child) child = String(child); + simple = 'string' == typeof child; + if (simple && lastSimple) children[children.length - 1] += child; else { + (children || (children = [])).push(child); + lastSimple = simple; + } + } + var p = new VNode(nodeName, attributes || void 0, children || EMPTY_CHILDREN); + if (options.vnode) options.vnode(p); + return p; + } + function extend(obj, props) { + if (props) for (var i in props) obj[i] = props[i]; + return obj; + } + function clone(obj) { + return extend({}, obj); + } + function delve(obj, key) { + for (var p = key.split('.'), i = 0; i < p.length && obj; i++) obj = obj[p[i]]; + return obj; + } + function isFunction(obj) { + return 'function' == typeof obj; + } + function isString(obj) { + return 'string' == typeof obj; + } + function hashToClassName(c) { + var str = ''; + for (var prop in c) if (c[prop]) { + if (str) str += ' '; + str += prop; + } + return str; + } + function cloneElement(vnode, props) { + return h(vnode.nodeName, extend(clone(vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children); + } + function createLinkedState(component, key, eventPath) { + var path = key.split('.'); + return function(e) { + var t = e && e.target || this, state = {}, obj = state, v = isString(eventPath) ? delve(e, eventPath) : t.nodeName ? t.type.match(/^che|rad/) ? t.checked : t.value : e, i = 0; + for (;i < path.length - 1; i++) obj = obj[path[i]] || (obj[path[i]] = !i && component.state[path[i]] || {}); + obj[path[i]] = v; + component.setState(state); + }; + } + function enqueueRender(component) { + if (!component._dirty && (component._dirty = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender); + } + function rerender() { + var p, list = items; + items = []; + while (p = list.pop()) if (p._dirty) renderComponent(p); + } + function isFunctionalComponent(vnode) { + var nodeName = vnode && vnode.nodeName; + return nodeName && isFunction(nodeName) && !(nodeName.prototype && nodeName.prototype.render); + } + function buildFunctionalComponent(vnode, context) { + return vnode.nodeName(getNodeProps(vnode), context || EMPTY); + } + function isSameNodeType(node, vnode) { + if (isString(vnode)) return node instanceof Text; + if (isString(vnode.nodeName)) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); + if (isFunction(vnode.nodeName)) return (node._componentConstructor ? node._componentConstructor === vnode.nodeName : !0) || isFunctionalComponent(vnode); else ; + } + function isNamedNode(node, nodeName) { + return node.normalizedNodeName === nodeName || toLowerCase(node.nodeName) === toLowerCase(nodeName); + } + function getNodeProps(vnode) { + var props = clone(vnode.attributes); + props.children = vnode.children; + var defaultProps = vnode.nodeName.defaultProps; + if (defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i]; + return props; + } + function removeNode(node) { + var p = node.parentNode; + if (p) p.removeChild(node); + } + function setAccessor(node, name, old, value, isSvg) { + if ('className' === name) name = 'class'; + if ('class' === name && value && 'object' == typeof value) value = hashToClassName(value); + if ('key' === name) ; else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) { + if (!value || isString(value) || isString(old)) node.style.cssText = value || ''; + if (value && 'object' == typeof value) { + if (!isString(old)) for (var i in old) if (!(i in value)) node.style[i] = ''; + for (var i in value) node.style[i] = 'number' == typeof value[i] && !NON_DIMENSION_PROPS[i] ? value[i] + 'px' : value[i]; + } + } else if ('dangerouslySetInnerHTML' === name) { + if (value) node.innerHTML = value.__html || ''; + } else if ('o' == name[0] && 'n' == name[1]) { + var l = node._listeners || (node._listeners = {}); + name = toLowerCase(name.substring(2)); + if (value) { + if (!l[name]) node.addEventListener(name, eventProxy, !!NON_BUBBLING_EVENTS[name]); + } else if (l[name]) node.removeEventListener(name, eventProxy, !!NON_BUBBLING_EVENTS[name]); + l[name] = value; + } else if ('list' !== name && 'type' !== name && !isSvg && name in node) { + setProperty(node, name, null == value ? '' : value); + if (null == value || value === !1) node.removeAttribute(name); + } else { + var ns = isSvg && name.match(/^xlink\:?(.+)/); + if (null == value || value === !1) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', toLowerCase(ns[1])); else node.removeAttribute(name); else if ('object' != typeof value && !isFunction(value)) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', toLowerCase(ns[1]), value); else node.setAttribute(name, value); + } + } + function setProperty(node, name, value) { + try { + node[name] = value; + } catch (e) {} + } + function eventProxy(e) { + return this._listeners[e.type](options.event && options.event(e) || e); + } + function collectNode(node) { + removeNode(node); + if (node instanceof Element) { + node._component = node._componentConstructor = null; + var _name = node.normalizedNodeName || toLowerCase(node.nodeName); + (nodes[_name] || (nodes[_name] = [])).push(node); + } + } + function createNode(nodeName, isSvg) { + var name = toLowerCase(nodeName), node = nodes[name] && nodes[name].pop() || (isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName)); + node.normalizedNodeName = name; + return node; + } + function flushMounts() { + var c; + while (c = mounts.pop()) { + if (options.afterMount) options.afterMount(c); + if (c.componentDidMount) c.componentDidMount(); + } + } + function diff(dom, vnode, context, mountAll, parent, componentRoot) { + if (!diffLevel++) { + isSvgMode = parent && 'undefined' != typeof parent.ownerSVGElement; + hydrating = dom && !(ATTR_KEY in dom); + } + var ret = idiff(dom, vnode, context, mountAll); + if (parent && ret.parentNode !== parent) parent.appendChild(ret); + if (!--diffLevel) { + hydrating = !1; + if (!componentRoot) flushMounts(); + } + return ret; + } + function idiff(dom, vnode, context, mountAll) { + var ref = vnode && vnode.attributes && vnode.attributes.ref; + while (isFunctionalComponent(vnode)) vnode = buildFunctionalComponent(vnode, context); + if (null == vnode) vnode = ''; + if (isString(vnode)) { + if (dom && dom instanceof Text && dom.parentNode) { + if (dom.nodeValue != vnode) dom.nodeValue = vnode; + } else { + if (dom) recollectNodeTree(dom); + dom = document.createTextNode(vnode); + } + return dom; + } + if (isFunction(vnode.nodeName)) return buildComponentFromVNode(dom, vnode, context, mountAll); + var out = dom, nodeName = String(vnode.nodeName), prevSvgMode = isSvgMode, vchildren = vnode.children; + isSvgMode = 'svg' === nodeName ? !0 : 'foreignObject' === nodeName ? !1 : isSvgMode; + if (!dom) out = createNode(nodeName, isSvgMode); else if (!isNamedNode(dom, nodeName)) { + out = createNode(nodeName, isSvgMode); + while (dom.firstChild) out.appendChild(dom.firstChild); + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + recollectNodeTree(dom); + } + var fc = out.firstChild, props = out[ATTR_KEY]; + if (!props) { + out[ATTR_KEY] = props = {}; + for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value; + } + if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && fc && fc instanceof Text && !fc.nextSibling) { + if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0]; + } else if (vchildren && vchildren.length || fc) innerDiffNode(out, vchildren, context, mountAll, !!props.dangerouslySetInnerHTML); + diffAttributes(out, vnode.attributes, props); + if (ref) (props.ref = ref)(out); + isSvgMode = prevSvgMode; + return out; + } + function innerDiffNode(dom, vchildren, context, mountAll, absorb) { + var j, c, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren && vchildren.length; + if (len) for (var i = 0; i < len; i++) { + var _child = originalChildren[i], props = _child[ATTR_KEY], key = vlen ? (c = _child._component) ? c.__key : props ? props.key : null : null; + if (null != key) { + keyedLen++; + keyed[key] = _child; + } else if (hydrating || absorb || props || _child instanceof Text) children[childrenLen++] = _child; + } + if (vlen) for (var i = 0; i < vlen; i++) { + vchild = vchildren[i]; + child = null; + var key = vchild.key; + if (null != key) { + if (keyedLen && key in keyed) { + child = keyed[key]; + keyed[key] = void 0; + keyedLen--; + } + } else if (!child && min < childrenLen) for (j = min; j < childrenLen; j++) { + c = children[j]; + if (c && isSameNodeType(c, vchild)) { + child = c; + children[j] = void 0; + if (j === childrenLen - 1) childrenLen--; + if (j === min) min++; + break; + } + } + child = idiff(child, vchild, context, mountAll); + if (child && child !== dom) if (i >= len) dom.appendChild(child); else if (child !== originalChildren[i]) { + if (child === originalChildren[i + 1]) removeNode(originalChildren[i]); + dom.insertBefore(child, originalChildren[i] || null); + } + } + if (keyedLen) for (var i in keyed) if (keyed[i]) recollectNodeTree(keyed[i]); + while (min <= childrenLen) { + child = children[childrenLen--]; + if (child) recollectNodeTree(child); + } + } + function recollectNodeTree(node, unmountOnly) { + var component = node._component; + if (component) unmountComponent(component, !unmountOnly); else { + if (node[ATTR_KEY] && node[ATTR_KEY].ref) node[ATTR_KEY].ref(null); + if (!unmountOnly) collectNode(node); + var c; + while (c = node.lastChild) recollectNodeTree(c, unmountOnly); + } + } + function diffAttributes(dom, attrs, old) { + var name; + for (name in old) if (!(attrs && name in attrs) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode); + if (attrs) for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode); + } + function collectComponent(component) { + var name = component.constructor.name, list = components[name]; + if (list) list.push(component); else components[name] = [ component ]; + } + function createComponent(Ctor, props, context) { + var inst = new Ctor(props, context), list = components[Ctor.name]; + Component.call(inst, props, context); + if (list) for (var i = list.length; i--; ) if (list[i].constructor === Ctor) { + inst.nextBase = list[i].nextBase; + list.splice(i, 1); + break; + } + return inst; + } + function setComponentProps(component, props, opts, context, mountAll) { + if (!component._disable) { + component._disable = !0; + if (component.__ref = props.ref) delete props.ref; + if (component.__key = props.key) delete props.key; + if (!component.base || mountAll) { + if (component.componentWillMount) component.componentWillMount(); + } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context); + if (context && context !== component.context) { + if (!component.prevContext) component.prevContext = component.context; + component.context = context; + } + if (!component.prevProps) component.prevProps = component.props; + component.props = props; + component._disable = !1; + if (0 !== opts) if (1 === opts || options.syncComponentUpdates !== !1 || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component); + if (component.__ref) component.__ref(component); + } + } + function renderComponent(component, opts, mountAll, isChild) { + if (!component._disable) { + var skip, rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.prevProps || props, previousState = component.prevState || state, previousContext = component.prevContext || context, isUpdate = component.base, nextBase = component.nextBase, initialBase = isUpdate || nextBase, initialChildComponent = component._component; + if (isUpdate) { + component.props = previousProps; + component.state = previousState; + component.context = previousContext; + if (2 !== opts && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === !1) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context); + component.props = props; + component.state = state; + component.context = context; + } + component.prevProps = component.prevState = component.prevContext = component.nextBase = null; + component._dirty = !1; + if (!skip) { + if (component.render) rendered = component.render(props, state, context); + if (component.getChildContext) context = extend(clone(context), component.getChildContext()); + while (isFunctionalComponent(rendered)) rendered = buildFunctionalComponent(rendered, context); + var toUnmount, base, childComponent = rendered && rendered.nodeName; + if (isFunction(childComponent)) { + var childProps = getNodeProps(rendered); + inst = initialChildComponent; + if (inst && inst.constructor === childComponent && childProps.key == inst.__key) setComponentProps(inst, childProps, 1, context); else { + toUnmount = inst; + inst = createComponent(childComponent, childProps, context); + inst.nextBase = inst.nextBase || nextBase; + inst._parentComponent = component; + component._component = inst; + setComponentProps(inst, childProps, 0, context); + renderComponent(inst, 1, mountAll, !0); + } + base = inst.base; + } else { + cbase = initialBase; + toUnmount = initialChildComponent; + if (toUnmount) cbase = component._component = null; + if (initialBase || 1 === opts) { + if (cbase) cbase._component = null; + base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0); + } + } + if (initialBase && base !== initialBase && inst !== initialChildComponent) { + var baseParent = initialBase.parentNode; + if (baseParent && base !== baseParent) { + baseParent.replaceChild(base, initialBase); + if (!toUnmount) { + initialBase._component = null; + recollectNodeTree(initialBase); + } + } + } + if (toUnmount) unmountComponent(toUnmount, base !== initialBase); + component.base = base; + if (base && !isChild) { + var componentRef = component, t = component; + while (t = t._parentComponent) (componentRef = t).base = base; + base._component = componentRef; + base._componentConstructor = componentRef.constructor; + } + } + if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) { + if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, previousContext); + if (options.afterUpdate) options.afterUpdate(component); + } + var fn, cb = component._renderCallbacks; + if (cb) while (fn = cb.pop()) fn.call(component); + if (!diffLevel && !isChild) flushMounts(); + } + } + function buildComponentFromVNode(dom, vnode, context, mountAll) { + var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode); + while (c && !isOwner && (c = c._parentComponent)) isOwner = c.constructor === vnode.nodeName; + if (c && isOwner && (!mountAll || c._component)) { + setComponentProps(c, props, 3, context, mountAll); + dom = c.base; + } else { + if (originalComponent && !isDirectOwner) { + unmountComponent(originalComponent, !0); + dom = oldDom = null; + } + c = createComponent(vnode.nodeName, props, context); + if (dom && !c.nextBase) { + c.nextBase = dom; + oldDom = null; + } + setComponentProps(c, props, 1, context, mountAll); + dom = c.base; + if (oldDom && dom !== oldDom) { + oldDom._component = null; + recollectNodeTree(oldDom); + } + } + return dom; + } + function unmountComponent(component, remove) { + if (options.beforeUnmount) options.beforeUnmount(component); + var base = component.base; + component._disable = !0; + if (component.componentWillUnmount) component.componentWillUnmount(); + component.base = null; + var inner = component._component; + if (inner) unmountComponent(inner, remove); else if (base) { + if (base[ATTR_KEY] && base[ATTR_KEY].ref) base[ATTR_KEY].ref(null); + component.nextBase = base; + if (remove) { + removeNode(base); + collectComponent(component); + } + var c; + while (c = base.lastChild) recollectNodeTree(c, !remove); + } + if (component.__ref) component.__ref(null); + if (component.componentDidUnmount) component.componentDidUnmount(); + } + function Component(props, context) { + this._dirty = !0; + this.context = context; + this.props = props; + if (!this.state) this.state = {}; + } + function render(vnode, parent, merge) { + return diff(merge, vnode, {}, !1, parent); + } + var options = {}; + var stack = []; + var EMPTY_CHILDREN = []; + var lcCache = {}; + var toLowerCase = function(s) { + return lcCache[s] || (lcCache[s] = s.toLowerCase()); + }; + var resolved = 'undefined' != typeof Promise && Promise.resolve(); + var defer = resolved ? function(f) { + resolved.then(f); + } : setTimeout; + var EMPTY = {}; + var ATTR_KEY = 'undefined' != typeof Symbol ? Symbol.for('preactattr') : '__preactattr_'; + var NON_DIMENSION_PROPS = { + boxFlex: 1, + boxFlexGroup: 1, + columnCount: 1, + fillOpacity: 1, + flex: 1, + flexGrow: 1, + flexPositive: 1, + flexShrink: 1, + flexNegative: 1, + fontWeight: 1, + lineClamp: 1, + lineHeight: 1, + opacity: 1, + order: 1, + orphans: 1, + strokeOpacity: 1, + widows: 1, + zIndex: 1, + zoom: 1 + }; + var NON_BUBBLING_EVENTS = { + blur: 1, + error: 1, + focus: 1, + load: 1, + resize: 1, + scroll: 1 + }; + var items = []; + var nodes = {}; + var mounts = []; + var diffLevel = 0; + var isSvgMode = !1; + var hydrating = !1; + var components = {}; + extend(Component.prototype, { + linkState: function(key, eventPath) { + var c = this._linkedStates || (this._linkedStates = {}); + return c[key + eventPath] || (c[key + eventPath] = createLinkedState(this, key, eventPath)); + }, + setState: function(state, callback) { + var s = this.state; + if (!this.prevState) this.prevState = clone(s); + extend(s, isFunction(state) ? state(s, this.props) : state); + if (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback); + enqueueRender(this); + }, + forceUpdate: function() { + renderComponent(this, 2); + }, + render: function() {} + }); + exports.h = h; + exports.cloneElement = cloneElement; + exports.Component = Component; + exports.render = render; + exports.rerender = rerender; + exports.options = options; +}); +//# sourceMappingURL=preact.js.map + +/***/ }), +/* 40 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod); + global.PropTypes = mod.exports; + } +})(this, function (exports, module) { + + 'use strict'; + + var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7; + + var ReactElement = {}; + + ReactElement.isValidElement = function (object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + }; + + var ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; + + var emptyFunction = { + thatReturns: function thatReturns(what) { + return function () { + return what; + }; + } + }; + + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + var ANONYMOUS = '<>'; + + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker + }; + + function createChainableTypeChecker(validate) { + function checkType(isRequired, props, propName, componentName, location, propFullName) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + if (props[propName] == null) { + var locationName = ReactPropTypeLocationNames[location]; + if (isRequired) { + return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + var locationName = ReactPropTypeLocationNames[location]; + + var preciseType = getPreciseType(propValue); + + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunction.thatReturns(null)); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var locationName = ReactPropTypeLocationNames[location]; + var propType = getPropType(propValue); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']'); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!ReactElement.isValidElement(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var locationName = ReactPropTypeLocationNames[location]; + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOf, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (propValue === expectedValues[i]) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + var valuesString = JSON.stringify(expectedValues); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (propValue.hasOwnProperty(key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOfType, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName) == null) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || ReactElement.isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + function isSymbol(propType, propValue) { + if (propType === 'symbol') { + return true; + } + + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } + + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } + + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + return 'object'; + } + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + return propType; + } + + function getPreciseType(propValue) { + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + return propValue.constructor.name; + } + + module.exports = ReactPropTypes; +}); + +//# sourceMappingURL=index.js.map + +/***/ }), +/* 42 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(19); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultBootstrapCss; }); + +var defaultBootstrapCss = { + root: "", + header: "panel-heading", + body: "panel-body", + footer: "panel-footer", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "progress center-block", progressBar: "progress-bar", + pageTitle: "", + row: "", + question: { root: "", title: "", comment: "form-control", indent: 20 }, + error: { root: "alert alert-danger", icon: "glyphicon glyphicon-exclamation-sign", item: "" }, + checkbox: { root: "form-inline", item: "checkbox", other: "" }, + comment: "form-control", + dropdown: { root: "", control: "form-control" }, + matrix: { root: "table" }, + matrixdropdown: { root: "table" }, + matrixdynamic: { root: "table", button: "button" }, + multipletext: { root: "table", itemTitle: "", itemValue: "form-control" }, + radiogroup: { root: "form-inline", item: "radio", label: "", other: "" }, + rating: { root: "btn-group", item: "btn btn-default" }, + text: "form-control", + window: { + root: "modal-content", body: "modal-body", + header: { + root: "modal-header panel-title", title: "pull-left", button: "glyphicon pull-right", + buttonExpanded: "glyphicon pull-right glyphicon-chevron-up", buttonCollapsed: "glyphicon pull-right glyphicon-chevron-down" + } + } +}; +__WEBPACK_IMPORTED_MODULE_0__cssstandard__["b" /* surveyCss */]["bootstrap"] = defaultBootstrapCss; + + +/***/ }), +/* 43 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_czech__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localization_danish__ = __webpack_require__(46); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localization_dutch__ = __webpack_require__(47); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__localization_finnish__ = __webpack_require__(48); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_french__ = __webpack_require__(49); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localization_german__ = __webpack_require__(50); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localization_greek__ = __webpack_require__(51); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localization_polish__ = __webpack_require__(52); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localization_romanian__ = __webpack_require__(53); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localization_russian__ = __webpack_require__(54); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localization_swedish__ = __webpack_require__(55); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localization_turkish__ = __webpack_require__(56); + + + + + + + + + + + + + + +/***/ }), +/* 44 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(38); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__validator__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__ = __webpack_require__(17); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditions__ = __webpack_require__(14); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__conditionsParser__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_7__conditionsParser__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__ = __webpack_require__(18); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__error__ = __webpack_require__(9); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__jsonobject__ = __webpack_require__(3); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["i"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["j"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__ = __webpack_require__(20); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["d"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__ = __webpack_require__(63); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__ = __webpack_require__(64); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__question_matrix__ = __webpack_require__(62); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__question_multipletext__ = __webpack_require__(65); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__panel__ = __webpack_require__(31); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__page__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_17__page__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__question__ = __webpack_require__(10); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_18__question__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__questionbase__ = __webpack_require__(21); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_19__questionbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__question_baseselect__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__question_checkbox__ = __webpack_require__(57); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_21__question_checkbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__question_comment__ = __webpack_require__(58); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_22__question_comment__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__question_dropdown__ = __webpack_require__(59); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_23__question_dropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__questionfactory__ = __webpack_require__(5); +/* unused harmony reexport QuestionFactory */ +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__question_file__ = __webpack_require__(60); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_25__question_file__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__question_html__ = __webpack_require__(61); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_26__question_html__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__ = __webpack_require__(66); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__question_rating__ = __webpack_require__(67); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_28__question_rating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__question_text__ = __webpack_require__(68); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_29__question_text__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__survey__ = __webpack_require__(24); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_30__survey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__trigger__ = __webpack_require__(81); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__surveyWindow__ = __webpack_require__(80); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__ = __webpack_require__(25); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__ = __webpack_require__(29); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__surveyStrings__ = __webpack_require__(1); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__ = __webpack_require__(32); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["a"]; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Version; }); +// styles + +var Version; +Version = "" + "0.12.8"; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//Uncomment to include the "date" question type. +//export {default as QuestionDateModel} from "../../plugins/question_date"; + + +/***/ }), +/* 45 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export czechSurveyStrings */ + +var czechSurveyStrings = { + pagePrevText: "Předchozí", + pageNextText: "Další", + completeText: "Hotovo", + otherItemText: "Jiná odpověď (napište)", + progressText: "Strana {0} z {1}", + emptySurvey: "Průzkumu neobsahuje žádné otázky.", + completingSurvey: "Děkujeme za vyplnění průzkumu!", + loadingSurvey: "Probíhá načítání průzkumu...", + optionsCaption: "Vyber...", + requiredError: "Odpovězte prosím na otázku.", + requiredInAllRowsError: "Odpovězte prosím na všechny otázky.", + numericError: "V tomto poli lze zadat pouze čísla.", + textMinLength: "Zadejte prosím alespoň {0} znaků.", + textMaxLength: "Zadejte prosím méně než {0} znaků.", + textMinMaxLength: "Zadejte prosím více než {0} a méně než {1} znaků.", + minRowCountError: "Vyplňte prosím alespoň {0} řádků.", + minSelectError: "Vyberte prosím alespoň {0} varianty.", + maxSelectError: "Nevybírejte prosím více než {0} variant.", + numericMinMax: "Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}", + numericMin: "Odpověď '{0}' by mělo být větší nebo rovno {1}", + numericMax: "Odpověď '{0}' by mělo být menší nebo rovno {1}", + invalidEmail: "Zadejte prosím platnou e-mailovou adresu.", + urlRequestError: "Požadavek vrátil chybu '{0}'. {1}", + urlGetChoicesError: "Požadavek nevrátil data nebo cesta je neplatná", + exceedMaxSize: "Velikost souboru by neměla být větší než {0}.", + otherRequiredError: "Zadejte prosím jinou hodnotu.", + uploadingFile: "Váš soubor se nahrává. Zkuste to prosím za několik sekund.", + addRow: "Přidat řádek", + removeRow: "Odstranit" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["cz"] = czechSurveyStrings; + + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export danishSurveyStrings */ + +var danishSurveyStrings = { + pagePrevText: "Tilbage", + pageNextText: "Videre", + completeText: "Færdig", + progressText: "Side {0} af {1}", + emptySurvey: "Der er ingen synlige spørgsmål.", + completingSurvey: "Mange tak for din besvarelse!", + loadingSurvey: "Spørgeskemaet hentes fra serveren...", + otherItemText: "Valgfrit svar...", + optionsCaption: "Vælg...", + requiredError: "Besvar venligst spørgsmålet.", + numericError: "Angiv et tal.", + textMinLength: "Angiv mindst {0} tegn.", + minSelectError: "Vælg venligst mindst {0} svarmulighed(er).", + maxSelectError: "Vælg venligst færre {0} svarmuligheder(er).", + numericMinMax: "'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}", + numericMin: "'{0}' skal være lig med eller større end {1}", + numericMax: "'{0}' skal være lig med eller mindre end {1}", + invalidEmail: "Angiv venligst en gyldig e-mail adresse.", + exceedMaxSize: "Filstørrelsen må ikke overstige {0}.", + otherRequiredError: "Angiv en værdi for dit valgfrie svar." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["da"] = danishSurveyStrings; + + +/***/ }), +/* 47 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export dutchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var dutchSurveyStrings = { + pagePrevText: "Vorige", + pageNextText: "Volgende", + completeText: "Afsluiten", + otherItemText: "Andere", + progressText: "Pagina {0} van {1}", + emptySurvey: "Er is geen zichtbare pagina of vraag in deze vragenlijst", + completingSurvey: "Bedankt om deze vragenlijst in te vullen", + loadingSurvey: "De vragenlijst is aan het laden...", + optionsCaption: "Kies...", + requiredError: "Gelieve een antwoord in te vullen", + numericError: "Het antwoord moet een getal zijn", + textMinLength: "Gelieve minsten {0} karakters in te vullen.", + minSelectError: "Gelieve minimum {0} antwoorden te selecteren.", + maxSelectError: "Gelieve niet meer dan {0} antwoorden te selecteren.", + numericMinMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}", + numericMin: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + numericMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + invalidEmail: "Gelieve een geldig e-mailadres in te vullen.", + exceedMaxSize: "De grootte van het bestand mag niet groter zijn dan {0}.", + otherRequiredError: "Gelieve het veld 'Andere' in te vullen" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["nl"] = dutchSurveyStrings; + + +/***/ }), +/* 48 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export finnishSurveyStrings */ + +var finnishSurveyStrings = { + pagePrevText: "Edellinen", + pageNextText: "Seuraava", + completeText: "Valmis", + otherItemText: "Muu (kuvaile)", + progressText: "Sivu {0}/{1}", + emptySurvey: "Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.", + completingSurvey: "Kiitos kyselyyn vastaamisesta!", + loadingSurvey: "Kyselyä ladataan palvelimelta...", + optionsCaption: "Valitse...", + requiredError: "Vastaa kysymykseen, kiitos.", + numericError: "Arvon tulee olla numeerinen.", + textMinLength: "Ole hyvä ja syötä vähintään {0} merkkiä.", + minSelectError: "Ole hyvä ja valitse vähintään {0} vaihtoehtoa.", + maxSelectError: "Ole hyvä ja valitse enintään {0} vaihtoehtoa.", + numericMinMax: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}", + numericMin: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}", + numericMax: "'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}", + invalidEmail: "Syötä validi sähköpostiosoite.", + otherRequiredError: "Ole hyvä ja syötä \"Muu (kuvaile)\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fi"] = finnishSurveyStrings; + + +/***/ }), +/* 49 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export frenchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var frenchSurveyStrings = { + pagePrevText: "Pr\u00e9c\u00e9dent", + pageNextText: "Suivant", + completeText: "Terminer", + otherItemText: "Autre (pr\u00e9ciser)", + progressText: "Page {0} sur {1}", + emptySurvey: "Il n'y a ni page visible ni question visible dans ce questionnaire", + completingSurvey: "Merci d'avoir r\u00e9pondu au questionnaire!", + loadingSurvey: "Le questionnaire est en cours de chargement...", + optionsCaption: "Choisissez...", + requiredError: "La r\u00e9ponse \u00e0 cette question est obligatoire.", + requiredInAllRowsError: "Toutes les lignes sont obligatoires", + numericError: "La r\u00e9ponse doit \u00eatre un nombre.", + textMinLength: "Merci d'entrer au moins {0} symboles.", + minSelectError: "Merci de s\u00e9lectionner au moins {0}r\u00e9ponses.", + maxSelectError: "Merci de s\u00e9lectionner au plus {0}r\u00e9ponses.", + numericMinMax: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1} et inf\u00e9rieure ou\u00e9gale \u00e0 {2}", + numericMin: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1}", + numericMax: "Votre r\u00e9ponse '{0}' doit \u00eatreinf\u00e9rieure ou \u00e9gale \u00e0 {1}", + invalidEmail: "Merci d'entrer une adresse mail valide.", + exceedMaxSize: "La taille du fichier ne doit pas exc\u00e9der {0}.", + otherRequiredError: "Merci de pr\u00e9ciser le champ 'Autre'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fr"] = frenchSurveyStrings; + + +/***/ }), +/* 50 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export germanSurveyStrings */ + +var germanSurveyStrings = { + pagePrevText: "Zurück", + pageNextText: "Weiter", + completeText: "Fertig", + progressText: "Seite {0} von {1}", + emptySurvey: "Es gibt keine sichtbare Frage.", + completingSurvey: "Vielen Dank für das Ausfüllen des Fragebogens!", + loadingSurvey: "Der Fragebogen wird vom Server geladen...", + otherItemText: "Benutzerdefinierte Antwort...", + optionsCaption: "Wählen...", + requiredError: "Bitte antworten Sie auf die Frage.", + numericError: "Der Wert sollte eine Zahl sein.", + textMinLength: "Bitte geben Sie mindestens {0} Symbole.", + minSelectError: "Bitte wählen Sie mindestens {0} Varianten.", + maxSelectError: "Bitte wählen Sie nicht mehr als {0} Varianten.", + numericMinMax: "'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}", + numericMin: "'{0}' sollte gleich oder größer sein als {1}", + numericMax: "'{0}' sollte gleich oder kleiner als {1}", + invalidEmail: "Bitte geben Sie eine gültige Email-Adresse ein.", + exceedMaxSize: "Die Dateigröße soll nicht mehr als {0}.", + otherRequiredError: "Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["de"] = germanSurveyStrings; + + +/***/ }), +/* 51 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export greekSurveyStrings */ +//Created by https://github.com/agelospanagiotakis + +var greekSurveyStrings = { + pagePrevText: "Προηγούμενο", + pageNextText: "Επόμενο", + completeText: "Ολοκλήρωση", + otherItemText: "Άλλο (παρακαλώ διευκρινίστε)", + progressText: "Σελίδα {0} από {1}", + emptySurvey: "Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.", + completingSurvey: "Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!", + loadingSurvey: "Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...", + optionsCaption: "Επιλέξτε...", + requiredError: "Παρακαλώ απαντήστε στην ερώτηση.", + requiredInAllRowsError: "Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.", + numericError: "Η τιμή πρέπει να είναι αριθμιτική.", + textMinLength: "Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.", + minRowCountError: "Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.", + minSelectError: "Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.", + maxSelectError: "Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.", + numericMinMax: "Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}", + numericMin: "Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}", + numericMax: "Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}", + invalidEmail: "Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.", + urlRequestError: "Η αίτηση επέστρεψε σφάλμα '{0}'. {1}", + urlGetChoicesError: "Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη", + exceedMaxSize: "Το μέγεθος δεν μπορεί να υπερβένει τα {0}.", + otherRequiredError: "Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.", + uploadingFile: "Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.", + addRow: "Προσθήκη γραμμής", + removeRow: "Αφαίρεση" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["gr"] = greekSurveyStrings; + + +/***/ }), +/* 52 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export polishSurveyStrings */ + +var polishSurveyStrings = { + pagePrevText: "Wstecz", + pageNextText: "Dalej", + completeText: "Gotowe", + otherItemText: "Inna odpowiedź (wpisz)", + progressText: "Strona {0} z {1}", + emptySurvey: "Nie ma widocznych pytań.", + completingSurvey: "Dziękujemy za wypełnienie ankiety!", + loadingSurvey: "Trwa wczytywanie ankiety...", + optionsCaption: "Wybierz...", + requiredError: "Proszę odpowiedzieć na to pytanie.", + requiredInAllRowsError: "Proszę odpowiedzieć na wszystkie pytania.", + numericError: "W tym polu można wpisać tylko liczby.", + textMinLength: "Proszę wpisać co najmniej {0} znaków.", + textMaxLength: "Proszę wpisać mniej niż {0} znaków.", + textMinMaxLength: "Proszę wpisać więcej niż {0} i mniej niż {1} znaków.", + minRowCountError: "Proszę uzupełnić przynajmniej {0} wierszy.", + minSelectError: "Proszę wybrać co najmniej {0} pozycji.", + maxSelectError: "Proszę wybrać nie więcej niż {0} pozycji.", + numericMinMax: "Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}", + numericMin: "Odpowiedź '{0}' powinna być większa lub równa {1}", + numericMax: "Odpowiedź '{0}' powinna być mniejsza lub równa {1}", + invalidEmail: "Proszę podać prawidłowy adres email.", + urlRequestError: "Żądanie zwróciło błąd '{0}'. {1}", + urlGetChoicesError: "Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa", + exceedMaxSize: "Rozmiar przesłanego pliku nie może przekraczać {0}.", + otherRequiredError: "Proszę podać inną odpowiedź.", + uploadingFile: "Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.", + addRow: "Dodaj wiersz", + removeRow: "Usuń" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["pl"] = polishSurveyStrings; + + +/***/ }), +/* 53 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export romanianSurveyStrings */ + +var romanianSurveyStrings = { + pagePrevText: "Precedent", + pageNextText: "Următor", + completeText: "Finalizare", + otherItemText: "Altul(precizaţi)", + progressText: "Pagina {0} din {1}", + emptySurvey: "Nu sunt întrebări pentru acest chestionar", + completingSurvey: "Vă mulţumim pentru timpul acordat!", + loadingSurvey: "Chestionarul se încarcă...", + optionsCaption: "Alegeţi...", + requiredError: "Răspunsul la această întrebare este obligatoriu.", + requiredInAllRowsError: "Toate răspunsurile sunt obligatorii", + numericError: "Răspunsul trebuie să fie numeric.", + textMinLength: "Trebuie să introduci minim {0} caractere.", + minSelectError: "Trebuie să selectezi minim {0} opţiuni.", + maxSelectError: "Trebuie să selectezi maxim {0} opţiuni.", + numericMinMax: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}", + numericMin: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}", + numericMax: "Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}", + invalidEmail: "Trebuie să introduceţi o adresa de email validă.", + exceedMaxSize: "Dimensiunea fişierului nu trebuie să depăşească {0}.", + otherRequiredError: "Trebuie să completezi câmpul 'Altul'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ro"] = romanianSurveyStrings; + + +/***/ }), +/* 54 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export russianSurveyStrings */ + +var russianSurveyStrings = { + pagePrevText: "Назад", + pageNextText: "Далее", + completeText: "Готово", + progressText: "Страница {0} из {1}", + emptySurvey: "Нет ни одного вопроса.", + completingSurvey: "Благодарим Вас за заполнение анкеты!", + loadingSurvey: "Загрузка с сервера...", + otherItemText: "Другое (пожалуйста, опишите)", + optionsCaption: "Выбрать...", + requiredError: "Пожалуйста, ответьте на вопрос.", + numericError: "Ответ должен быть числом.", + textMinLength: "Пожалуйста, введите хотя бы {0} символов.", + minSelectError: "Пожалуйста, выберите хотя бы {0} вариантов.", + maxSelectError: "Пожалуйста, выберите не более {0} вариантов.", + numericMinMax: "'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}", + numericMin: "'{0}' должно быть равным или больше, чем {1}", + numericMax: "'{0}' должно быть равным или меньше, чем {1}", + invalidEmail: "Пожалуйста, введите действительный адрес электронной почты.", + otherRequiredError: "Пожалуйста, введите данные в поле \"Другое\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ru"] = russianSurveyStrings; + + +/***/ }), +/* 55 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export swedishSurveyStrings */ +//Create by Mattias Asplund + +var swedishSurveyStrings = { + pagePrevText: "Föregående", + pageNextText: "Nästa", + completeText: "Färdig", + otherItemText: "Annat (beskriv)", + progressText: "Sida {0} av {1}", + emptySurvey: "Det finns ingen synlig sida eller fråga i enkäten.", + completingSurvey: "Tack för att du genomfört enkäten!!", + loadingSurvey: "Enkäten laddas...", + optionsCaption: "Välj...", + requiredError: "Var vänlig besvara frågan.", + requiredInAllRowsError: "Var vänlig besvara frågorna på alla rader.", + numericError: "Värdet ska vara numeriskt.", + textMinLength: "Var vänlig ange minst {0} tecken.", + minRowCountError: "Var vänlig fyll i minst {0} rader.", + minSelectError: "Var vänlig välj åtminstone {0} varianter.", + maxSelectError: "Var vänlig välj inte fler än {0} varianter.", + numericMinMax: "'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}", + numericMin: "'{0}' ska vara lika med eller mer än {1}", + numericMax: "'{0}' ska vara lika med eller mindre än {1}", + invalidEmail: "Var vänlig ange en korrekt e-postadress.", + urlRequestError: "Förfrågan returnerade felet '{0}'. {1}", + urlGetChoicesError: "Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt", + exceedMaxSize: "Filstorleken får ej överstiga {0}.", + otherRequiredError: "Var vänlig ange det andra värdet.", + uploadingFile: "Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.", + addRow: "Lägg till rad", + removeRow: "Ta bort" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["sv"] = swedishSurveyStrings; + + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export turkishSurveyStrings */ + +var turkishSurveyStrings = { + pagePrevText: "Geri", + pageNextText: "İleri", + completeText: "Anketi Tamamla", + otherItemText: "Diğer (açıklayınız)", + progressText: "Sayfa {0} / {1}", + emptySurvey: "Ankette görüntülenecek sayfa ya da soru mevcut değil.", + completingSurvey: "Anketimizi tamamladığınız için teşekkür ederiz.", + loadingSurvey: "Anket sunucudan yükleniyor ...", + optionsCaption: "Seçiniz ...", + requiredError: "Lütfen soruya cevap veriniz", + numericError: "Girilen değer numerik olmalıdır", + textMinLength: "En az {0} sembol giriniz.", + minRowCountError: "Lütfen en az {0} satırı doldurun.", + minSelectError: "Lütfen en az {0} seçeneği seçiniz.", + maxSelectError: "Lütfen {0} adetten fazla seçmeyiniz.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "'{0}' değeri {1} değerine eşit veya büyük olmalıdır", + numericMax: "'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.", + invalidEmail: "Lütfen geçerli bir eposta adresi giriniz.", + urlRequestError: "Talebi şu hatayı döndü '{0}'. {1}", + urlGetChoicesError: "Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.", + exceedMaxSize: "Dosya boyutu {0} değerini geçemez.", + otherRequiredError: "Lütfen diğer değerleri giriniz.", + uploadingFile: "Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.", + addRow: "Satır Ekle", + removeRow: "Kaldır" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["tr"] = turkishSurveyStrings; + + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxModel; }); + + + + +var QuestionCheckboxModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxModel, _super); + function QuestionCheckboxModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionCheckboxModel.prototype.getHasOther = function (val) { + if (!val || !Array.isArray(val)) + return false; + return val.indexOf(this.otherItem.value) >= 0; + }; + QuestionCheckboxModel.prototype.valueFromDataCore = function (val) { + if (!val || !Array.isArray(val)) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) + return val; + if (this.hasUnknownValue(val[i])) { + this.comment = val[i]; + var newVal = val.slice(); + newVal[i] = this.otherItem.value; + return newVal; + } + } + return val; + }; + QuestionCheckboxModel.prototype.valueToDataCore = function (val) { + if (!val || !val.length) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) { + if (this.getComment()) { + var newVal = val.slice(); + newVal[i] = this.getComment(); + return newVal; + } + } + } + return val; + }; + QuestionCheckboxModel.prototype.getType = function () { + return "checkbox"; + }; + return QuestionCheckboxModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkbox", [], function () { return new QuestionCheckboxModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("checkbox", function (name) { var q = new QuestionCheckboxModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCommentModel; }); + + + + + +var QuestionCommentModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCommentModel, _super); + function QuestionCommentModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rows = 4; + _this.cols = 50; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionCommentModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionCommentModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionCommentModel.prototype.getType = function () { + return "comment"; + }; + QuestionCommentModel.prototype.isEmpty = function () { + return _super.prototype.isEmpty.call(this) || this.value == ""; + }; + return QuestionCommentModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("comment", [{ name: "cols:number", default: 50 }, { name: "rows:number", default: 4 }, + { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionCommentModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("comment", function (name) { return new QuestionCommentModel(name); }); + + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionDropdownModel; }); + + + + + + +var QuestionDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionDropdownModel, _super); + function QuestionDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionDropdownModel.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionDropdownModel.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionDropdownModel.prototype.getType = function () { + return "dropdown"; + }; + QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["b" /* QuestionSelectBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("dropdown", [{ name: "optionsCaption", serializationProperty: "locOptionsCaption" }], function () { return new QuestionDropdownModel(""); }, "selectbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("dropdown", function (name) { var q = new QuestionDropdownModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFileModel; }); + + + + + + +var QuestionFileModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFileModel, _super); + function QuestionFileModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.showPreviewValue = false; + _this.isUploading = false; + return _this; + } + QuestionFileModel.prototype.getType = function () { + return "file"; + }; + Object.defineProperty(QuestionFileModel.prototype, "showPreview", { + get: function () { return this.showPreviewValue; }, + set: function (value) { this.showPreviewValue = value; }, + enumerable: true, + configurable: true + }); + QuestionFileModel.prototype.loadFile = function (file) { + var self = this; + if (this.survey && !this.survey.uploadFile(this.name, file, this.storeDataAsText, function (status) { self.isUploading = status == "uploading"; })) + return; + this.setFileValue(file); + }; + QuestionFileModel.prototype.setFileValue = function (file) { + if (!FileReader) + return; + if (!this.showPreview && !this.storeDataAsText) + return; + if (this.checkFileForErrors(file)) + return; + var fileReader = new FileReader(); + var self = this; + fileReader.onload = function (e) { + if (self.showPreview) { + self.previewValue = self.isFileImage(file) ? fileReader.result : null; + self.fireCallback(self.previewValueLoadedCallback); + } + if (self.storeDataAsText) { + self.value = fileReader.result; + } + }; + fileReader.readAsDataURL(file); + }; + QuestionFileModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.isUploading) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("uploadingFile"))); + } + }; + QuestionFileModel.prototype.checkFileForErrors = function (file) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + if (this.maxSize > 0 && file.size > this.maxSize) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["d" /* ExceedSizeError */](this.maxSize)); + } + if (errorLength != this.errors.length || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + return this.errors.length > 0; + }; + QuestionFileModel.prototype.isFileImage = function (file) { + if (!file || !file.type) + return; + var str = file.type.toLowerCase(); + return str.indexOf("image") == 0; + }; + return QuestionFileModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("file", ["showPreview:boolean", "imageHeight", "imageWidth", "storeDataAsText:boolean", "maxSize:number"], function () { return new QuestionFileModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("file", function (name) { return new QuestionFileModel(name); }); + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionbase__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionHtmlModel; }); + + + + + +var QuestionHtmlModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionHtmlModel, _super); + function QuestionHtmlModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locHtmlValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionHtmlModel.prototype.getType = function () { + return "html"; + }; + Object.defineProperty(QuestionHtmlModel.prototype, "html", { + get: function () { return this.locHtml.text; }, + set: function (value) { this.locHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "locHtml", { + get: function () { return this.locHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "processedHtml", { + get: function () { return this.survey ? this.survey.processHtml(this.html) : this.html; }, + enumerable: true, + configurable: true + }); + return QuestionHtmlModel; +}(__WEBPACK_IMPORTED_MODULE_1__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("html", [{ name: "html:html", serializationProperty: "locHtml" }], function () { return new QuestionHtmlModel(""); }, "questionbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("html", function (name) { return new QuestionHtmlModel(name); }); + + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionfactory__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixModel; }); + + + + + + + + +var MatrixRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixRowModel, _super); + function MatrixRowModel(name, text, fullName, data, value) { + var _this = _super.call(this) || this; + _this.name = name; + _this.text = text; + _this.fullName = fullName; + _this.data = data; + _this.rowValue = value; + return _this; + } + Object.defineProperty(MatrixRowModel.prototype, "value", { + get: function () { return this.rowValue; }, + set: function (newValue) { + this.rowValue = newValue; + if (this.data) + this.data.onMatrixRowChanged(this); + this.onValueChanged(); + }, + enumerable: true, + configurable: true + }); + MatrixRowModel.prototype.onValueChanged = function () { + }; + return MatrixRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var QuestionMatrixModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixModel, _super); + function QuestionMatrixModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRowChanging = false; + _this.isAllRowRequired = false; + _this.columnsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixModel.prototype.getType = function () { + return "matrix"; + }; + Object.defineProperty(QuestionMatrixModel.prototype, "hasRows", { + get: function () { + return this.rowsValue.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.columnsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "visibleRows", { + get: function () { + var result = new Array(); + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, this.name + '_' + this.rows[i].value.toString(), val[this.rows[i].value])); + } + if (result.length == 0) { + result.push(this.createMatrixRow(null, "", this.name, val)); + } + this.generatedVisibleRows = result; + return result; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () { return this.hasValuesInAllRows(); }; + QuestionMatrixModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("requiredInAllRowsError"))); + } + }; + QuestionMatrixModel.prototype.hasErrorInRows = function () { + if (!this.isAllRowRequired) + return false; + return !this.hasValuesInAllRows(); + }; + QuestionMatrixModel.prototype.hasValuesInAllRows = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var val = rows[i].value; + if (!val) + return false; + } + return true; + }; + QuestionMatrixModel.prototype.createMatrixRow = function (name, text, fullName, value) { + return new MatrixRowModel(name, text, fullName, this, value); + }; + QuestionMatrixModel.prototype.onValueChanged = function () { + if (this.isRowChanging || !(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.value; + if (!val) + val = {}; + if (this.rows.length == 0) { + this.generatedVisibleRows[0].value = val; + } + else { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + var rowVal = val[row.name] ? val[row.name] : null; + this.generatedVisibleRows[i].value = rowVal; + } + } + this.isRowChanging = false; + }; + //IMatrixData + QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) { + if (this.isRowChanging) + return; + this.isRowChanging = true; + if (!this.hasRows) { + this.setNewValue(row.value); + } + else { + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[row.name] = row.value; + this.setNewValue(newValue); + } + this.isRowChanging = false; + }; + return QuestionMatrixModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("matrix", [{ name: "columns:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.columns); }, onSetValue: function (obj, value) { obj.columns = value; } }, + { name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }, + "isAllRowRequired:boolean"], function () { return new QuestionMatrixModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrix", function (name) { var q = new QuestionMatrixModel(name); q.rows = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultRows; q.columns = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultColums; return q; }); + + +/***/ }), +/* 63 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDropdownModel; }); + + + + + +var MatrixDropdownRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownRowModel, _super); + function MatrixDropdownRowModel(name, text, data, value) { + var _this = _super.call(this, data, value) || this; + _this.name = name; + _this.text = text; + return _this; + } + Object.defineProperty(MatrixDropdownRowModel.prototype, "rowName", { + get: function () { return this.name; }, + enumerable: true, + configurable: true + }); + return MatrixDropdownRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModel, _super); + function QuestionMatrixDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixDropdownModel.prototype.getType = function () { + return "matrixdropdown"; + }; + Object.defineProperty(QuestionMatrixDropdownModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModel.prototype.generateRows = function () { + var result = new Array(); + if (!this.rows || this.rows.length === 0) + return result; + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, val[this.rows[i].value])); + } + return result; + }; + QuestionMatrixDropdownModel.prototype.createMatrixRow = function (name, text, value) { + return new MatrixDropdownRowModel(name, text, this, value); + }; + return QuestionMatrixDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdown", [{ name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }], function () { return new QuestionMatrixDropdownModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdropdown", function (name) { var q = new QuestionMatrixDropdownModel(name); q.choices = [1, 2, 3, 4, 5]; q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultColums; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 64 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDynamicRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDynamicModel; }); + + + + + + + +var MatrixDynamicRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDynamicRowModel, _super); + function MatrixDynamicRowModel(index, data, value) { + var _this = _super.call(this, data, value) || this; + _this.index = index; + return _this; + } + Object.defineProperty(MatrixDynamicRowModel.prototype, "rowName", { + get: function () { return "row" + this.index; }, + enumerable: true, + configurable: true + }); + return MatrixDynamicRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDynamicModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamicModel, _super); + function QuestionMatrixDynamicModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowCounter = 0; + _this.rowCountValue = 2; + _this.minRowCount = 0; + _this.locAddRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + _this.locRemoveRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionMatrixDynamicModel.prototype.getType = function () { + return "matrixdynamic"; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "rowCount", { + get: function () { return this.rowCountValue; }, + set: function (val) { + if (val < 0 || val > QuestionMatrixDynamicModel.MaxRowCount) + return; + this.rowCountValue = val; + if (this.value && this.value.length > val) { + var qVal = this.value; + qVal.splice(val); + this.value = qVal; + } + this.fireCallback(this.rowCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.addRow = function () { + if (this.generatedVisibleRows) { + this.generatedVisibleRows.push(this.createMatrixRow(null)); + } + this.rowCount++; + }; + QuestionMatrixDynamicModel.prototype.removeRow = function (index) { + if (index < 0 || index >= this.rowCount) + return; + if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) { + this.generatedVisibleRows.splice(index, 1); + } + if (this.value) { + var val = this.createNewValue(this.value); + val.splice(index, 1); + val = this.deleteRowValue(val, null); + this.value = val; + } + this.rowCount--; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "addRowText", { + get: function () { return this.locAddRowText.text ? this.locAddRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("addRow"); }, + set: function (value) { this.locAddRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locAddRowText", { + get: function () { return this.locAddRowTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "removeRowText", { + get: function () { return this.locRemoveRowText.text ? this.locRemoveRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("removeRow"); }, + set: function (value) { this.locRemoveRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locRemoveRowText", { + get: function () { return this.locRemoveRowTextValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () { return false; }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "cachedVisibleRows", { + get: function () { + if (this.generatedVisibleRows && this.generatedVisibleRows.length == this.rowCount) + return this.generatedVisibleRows; + return this.visibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("minRowCountError")["format"](this.minRowCount))); + } + }; + QuestionMatrixDynamicModel.prototype.hasErrorInRows = function () { + if (this.minRowCount <= 0 || !this.generatedVisibleRows) + return false; + var res = false; + var setRowCount = 0; + for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) { + var row = this.generatedVisibleRows[rowIndex]; + if (!row.isEmpty) + setRowCount++; + } + return setRowCount < this.minRowCount; + }; + QuestionMatrixDynamicModel.prototype.generateRows = function () { + var result = new Array(); + if (this.rowCount === 0) + return result; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.rowCount; i++) { + result.push(this.createMatrixRow(this.getRowValueByIndex(val, i))); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) { + return new MatrixDynamicRowModel(this.rowCounter++, this, value); + }; + QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) { + var newRowCount = val && Array.isArray(val) ? val.length : 0; + if (newRowCount <= this.rowCount) + return; + this.rowCountValue = newRowCount; + if (this.generatedVisibleRows) { + this.generatedVisibleRows = this.visibleRows; + } + }; + QuestionMatrixDynamicModel.prototype.createNewValue = function (curValue) { + var result = curValue; + if (!result) + result = []; + var r = []; + if (result.length > this.rowCount) + result.splice(this.rowCount - 1); + for (var i = result.length; i < this.rowCount; i++) { + result.push({}); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) { + var isEmpty = true; + for (var i = 0; i < newValue.length; i++) { + if (Object.keys(newValue[i]).length > 0) { + isEmpty = false; + break; + } + } + return isEmpty ? null : newValue; + }; + QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) { + return index >= 0 && index < questionValue.length ? questionValue[index] : null; + }; + QuestionMatrixDynamicModel.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + return this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row)); + }; + return QuestionMatrixDynamicModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +QuestionMatrixDynamicModel.MaxRowCount = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdynamic", [{ name: "rowCount:number", default: 2 }, { name: "minRowCount:number", default: 0 }, + { name: "addRowText", serializationProperty: "locAddRowText" }, { name: "removeRowText", serializationProperty: "locRemoveRowText" }], function () { return new QuestionMatrixDynamicModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdynamic", function (name) { var q = new QuestionMatrixDynamicModel(name); q.choices = [1, 2, 3, 4, 5]; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 65 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__validator__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MultipleTextItemModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMultipleTextModel; }); + + + + + + + + +var MultipleTextItemModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleTextItemModel, _super); + function MultipleTextItemModel(name, title) { + if (name === void 0) { name = null; } + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.validators = new Array(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.title = title; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + MultipleTextItemModel.prototype.getType = function () { + return "multipletextitem"; + }; + MultipleTextItemModel.prototype.setData = function (data) { + this.data = data; + }; + Object.defineProperty(MultipleTextItemModel.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "fullTitle", { + get: function () { + var res = this.title; + if (this.isRequired && this.data) + res = this.data.getIsRequiredText() + ' ' + res; + return res; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "value", { + get: function () { + return this.data ? this.data.getMultipleTextValue(this.name) : null; + }, + set: function (value) { + if (this.data != null) { + this.data.setMultipleTextValue(this.name, value); + } + }, + enumerable: true, + configurable: true + }); + MultipleTextItemModel.prototype.onValueChanged = function (newValue) { + }; + //IValidatorOwner + MultipleTextItemModel.prototype.getValidatorTitle = function () { return this.title; }; + //ILocalizableOwner + MultipleTextItemModel.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + return MultipleTextItemModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var QuestionMultipleTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleTextModel, _super); + function QuestionMultipleTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + _this.itemSize = 25; + _this.itemsValues = new Array(); + _this.isMultipleItemValueChanging = false; + _this.setItemsOverriddenMethods(); + return _this; + } + QuestionMultipleTextModel.prototype.getType = function () { + return "multipletext"; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "items", { + get: function () { return this.itemsValues; }, + set: function (value) { + this.itemsValues = value; + this.setItemsOverriddenMethods(); + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.addItem = function (name, title) { + if (title === void 0) { title = null; } + var item = this.createTextItem(name, title); + this.items.push(item); + return item; + }; + QuestionMultipleTextModel.prototype.setItemsOverriddenMethods = function () { + var self = this; + this.itemsValues.push = function (value) { + value.setData(self); + var result = Array.prototype.push.call(this, value); + self.fireCallback(self.colCountChangedCallback); + return result; + }; + this.itemsValues.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var result = (_a = Array.prototype.splice).call.apply(_a, [self.itemsValues, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].setData(self); + } + self.fireCallback(self.colCountChangedCallback); + return result; + var _a; + }; + }; + QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () { + for (var i = 0; i < this.items.length; i++) { + if (!this.items[i].value) + return false; + } + return true; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 1 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.getRows = function () { + var colCount = this.colCount; + var items = this.items; + var rows = []; + var index = 0; + for (var i = 0; i < items.length; i++) { + if (index == 0) { + rows.push([]); + } + rows[rows.length - 1].push(items[i]); + index++; + if (index >= colCount) { + index = 0; + } + } + return rows; + }; + QuestionMultipleTextModel.prototype.onValueChanged = function () { + _super.prototype.onValueChanged.call(this); + this.onItemValueChanged(); + }; + QuestionMultipleTextModel.prototype.createTextItem = function (name, title) { + return new MultipleTextItemModel(name, title); + }; + QuestionMultipleTextModel.prototype.onItemValueChanged = function () { + if (this.isMultipleItemValueChanging) + return; + for (var i = 0; i < this.items.length; i++) { + var itemValue = null; + if (this.value && (this.items[i].name in this.value)) { + itemValue = this.value[this.items[i].name]; + } + this.items[i].onValueChanged(itemValue); + } + }; + QuestionMultipleTextModel.prototype.runValidators = function () { + var error = _super.prototype.runValidators.call(this); + if (error != null) + return error; + for (var i = 0; i < this.items.length; i++) { + error = new __WEBPACK_IMPORTED_MODULE_2__validator__["a" /* ValidatorRunner */]().run(this.items[i]); + if (error != null) + return error; + } + return null; + }; + QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var res = _super.prototype.hasErrors.call(this, fireCallback); + if (!res) + res = this.hasErrorInItems(fireCallback); + return res; + }; + QuestionMultipleTextModel.prototype.hasErrorInItems = function (fireCallback) { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.isRequired && !item.value) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["a" /* AnswerRequiredError */]()); + if (fireCallback) { + this.fireCallback(this.errorsChangedCallback); + } + return true; + } + } + return false; + }; + //IMultipleTextData + QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) { + if (!this.value) + return null; + return this.value[name]; + }; + QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) { + this.isMultipleItemValueChanging = true; + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[name] = value; + this.setNewValue(newValue); + this.isMultipleItemValueChanging = false; + }; + QuestionMultipleTextModel.prototype.getIsRequiredText = function () { + return this.survey ? this.survey.requiredText : ""; + }; + return QuestionMultipleTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletextitem", ["name", "isRequired:boolean", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "title", serializationProperty: "locTitle" }, { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], function () { return new MultipleTextItemModel(""); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletext", [{ name: "!items:textitems", className: "multipletextitem" }, + { name: "itemSize:number", default: 25 }, { name: "colCount:number", default: 1, choices: [1, 2, 3, 4] }], function () { return new QuestionMultipleTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("multipletext", function (name) { var q = new QuestionMultipleTextModel(name); q.addItem("text1"); q.addItem("text2"); return q; }); + + +/***/ }), +/* 66 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRadiogroupModel; }); + + + + +var QuestionRadiogroupModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRadiogroupModel, _super); + function QuestionRadiogroupModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionRadiogroupModel.prototype.getType = function () { + return "radiogroup"; + }; + QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionRadiogroupModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("radiogroup", [], function () { return new QuestionRadiogroupModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("radiogroup", function (name) { var q = new QuestionRadiogroupModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 67 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRatingModel; }); + + + + + + +var QuestionRatingModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRatingModel, _super); + function QuestionRatingModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rates = __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locMinRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + _this.locMaxRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionRatingModel.prototype, "rateValues", { + get: function () { return this.rates; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(this.rates, newValue); + this.fireCallback(this.rateValuesChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "visibleRateValues", { + get: function () { + if (this.rateValues.length > 0) + return this.rateValues; + return QuestionRatingModel.defaultRateValues; + }, + enumerable: true, + configurable: true + }); + QuestionRatingModel.prototype.getType = function () { + return "rating"; + }; + QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + QuestionRatingModel.prototype.supportComment = function () { return true; }; + QuestionRatingModel.prototype.supportOther = function () { return true; }; + Object.defineProperty(QuestionRatingModel.prototype, "minRateDescription", { + get: function () { return this.locMinRateDescription.text; }, + set: function (value) { this.locMinRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMinRateDescription", { + get: function () { return this.locMinRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + Object.defineProperty(QuestionRatingModel.prototype, "maxRateDescription", { + get: function () { return this.locMaxRateDescription.text; }, + set: function (value) { this.locMaxRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMaxRateDescription", { + get: function () { return this.locMaxRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + return QuestionRatingModel; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +QuestionRatingModel.defaultRateValues = []; +__WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(QuestionRatingModel.defaultRateValues, [1, 2, 3, 4, 5]); +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("rating", ["hasComment:boolean", { name: "rateValues:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].getData(obj.rateValues); }, onSetValue: function (obj, value) { obj.rateValues = value; } }, + { name: "minRateDescription", alternativeName: "mininumRateDescription", serializationProperty: "locMinRateDescription" }, + { name: "maxRateDescription", alternativeName: "maximumRateDescription", serializationProperty: "locMaxRateDescription" }], function () { return new QuestionRatingModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("rating", function (name) { return new QuestionRatingModel(name); }); + + +/***/ }), +/* 68 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionTextModel; }); + + + + + +var QuestionTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionTextModel, _super); + function QuestionTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.size = 25; + _this.inputType = "text"; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionTextModel.prototype.getType = function () { + return "text"; + }; + QuestionTextModel.prototype.isEmpty = function () { return _super.prototype.isEmpty.call(this) || this.value == ""; }; + QuestionTextModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + Object.defineProperty(QuestionTextModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionTextModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionTextModel.prototype.setNewValue = function (newValue) { + newValue = this.correctValueType(newValue); + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionTextModel.prototype.correctValueType = function (newValue) { + if (!newValue) + return newValue; + if (this.inputType == "number" || this.inputType == "range") { + return this.isNumber(newValue) ? parseFloat(newValue) : ""; + } + return newValue; + }; + QuestionTextModel.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return QuestionTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("text", [{ name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }, + { name: "size:number", default: 25 }, { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_1__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("text", function (name) { return new QuestionTextModel(name); }); + + +/***/ }), +/* 69 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionCheckbox; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionCheckboxItem; }); + + + + + +var SurveyQuestionCheckbox = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCheckbox, _super); + function SurveyQuestionCheckbox(props) { + var _this = _super.call(this, props) || this; + _this.state = { choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + return _this; + } + Object.defineProperty(SurveyQuestionCheckbox.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckbox.prototype.render = function () { + if (!this.question) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, this.getItems())); + }; + SurveyQuestionCheckbox.prototype.getItems = function () { + var items = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + items.push(this.renderItem(key, item, i == 0)); + } + return items; + }; + Object.defineProperty(SurveyQuestionCheckbox.prototype, "textStyle", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckbox.prototype.renderItem = function (key, item, isFirst) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionCheckboxItem, { key: key, question: this.question, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, item: item, textStyle: this.textStyle, isFirst: isFirst }); + }; + return SurveyQuestionCheckbox; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionCheckboxItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCheckboxItem, _super); + function SurveyQuestionCheckboxItem(props) { + var _this = _super.call(this, props) || this; + _this.item = props.item; + _this.question = props.question; + _this.textStyle = props.textStyle; + _this.isFirst = props.isFirst; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + SurveyQuestionCheckboxItem.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.item = nextProps.item; + this.textStyle = nextProps.textStyle; + this.question = nextProps.question; + this.isFirst = nextProps.isFirst; + }; + SurveyQuestionCheckboxItem.prototype.handleOnChange = function (event) { + var newValue = this.question.value; + if (!newValue) { + newValue = []; + } + var index = newValue.indexOf(this.item.value); + if (event.target.checked) { + if (index < 0) { + newValue.push(this.item.value); + } + } + else { + if (index > -1) { + newValue.splice(index, 1); + } + } + this.question.value = newValue; + this.setState({ value: this.question.value }); + }; + SurveyQuestionCheckboxItem.prototype.render = function () { + if (!this.item || !this.question) + return null; + var itemWidth = this.question.colCount > 0 ? (100 / this.question.colCount) + "%" : ""; + var marginRight = this.question.colCount == 0 ? "5px" : "0px"; + var divStyle = { marginRight: marginRight }; + if (itemWidth) { + divStyle["width"] = itemWidth; + } + var isChecked = (this.question.value && this.question.value.indexOf(this.item.value) > -1) || false; + var otherItem = (this.item.value === this.question.otherItem.value && isChecked) ? this.renderOther() : null; + return this.renderCheckbox(isChecked, divStyle, otherItem); + }; + Object.defineProperty(SurveyQuestionCheckboxItem.prototype, "inputStyle", { + get: function () { return { marginRight: "3px" }; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckboxItem.prototype.renderCheckbox = function (isChecked, divStyle, otherItem) { + var id = this.isFirst ? this.question.inputId : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.item, style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { className: this.css.item }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "checkbox", id: id, style: this.inputStyle, disabled: this.isDisplayMode, checked: isChecked, onChange: this.handleOnChange }), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.item.text)), + otherItem)); + }; + SurveyQuestionCheckboxItem.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionCheckboxItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("checkbox", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionCheckbox, props); +}); + + +/***/ }), +/* 70 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils__ = __webpack_require__(82); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionDropdown; }); + + + + + + +var SurveyQuestionDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionDropdown, _super); + function SurveyQuestionDropdown(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value, choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionDropdown.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionDropdown.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state.value = this.question.value; + }; + SurveyQuestionDropdown.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionDropdown.prototype.render = function () { + if (!this.question) + return null; + var comment = this.question.value === this.question.otherItem.value ? this.renderOther() : null; + var select = this.renderSelect(); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, + select, + comment)); + }; + SurveyQuestionDropdown.prototype.renderSelect = function () { + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css.control }, this.question.value)); + var options = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + var option = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("option", { key: key, value: item.value }, item.text); + options.push(option); + } + var onChange = null; + if (__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].msie || (__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].firefox && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils__["b" /* compareVersions */])(__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].version, '51') < 0)) { + onChange = this.handleOnChange; + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("select", { id: this.question.inputId, className: this.css.control, value: this.state.value, onChange: onChange, onInput: this.handleOnChange }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("option", { value: "" }, this.question.optionsCaption), + options)); + }; + SurveyQuestionDropdown.prototype.renderOther = function () { + var style = { marginTop: "3px" }; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: style }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode })); + }; + return SurveyQuestionDropdown; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("dropdown", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionDropdown, props); +}); + + +/***/ }), +/* 71 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionFile; }); + + + + +var SurveyQuestionFile = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionFile, _super); + function SurveyQuestionFile(props) { + var _this = _super.call(this, props) || this; + _this.state = { fileLoaded: 0 }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionFile.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionFile.prototype.handleOnChange = function (event) { + var src = event.target || event.srcElement; + if (!window["FileReader"]) + return; + if (!src || !src.files || src.files.length < 1) + return; + this.question.loadFile(src.files[0]); + this.setState({ fileLoaded: this.state.fileLoaded + 1 }); + }; + SurveyQuestionFile.prototype.render = function () { + if (!this.question) + return null; + var img = this.renderImage(); + var fileInput = null; + if (!this.isDisplayMode) { + fileInput = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.question.inputId, type: "file", onChange: this.handleOnChange }); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + fileInput, + img)); + }; + SurveyQuestionFile.prototype.renderImage = function () { + if (!this.question.previewValue) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + " ", + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("img", { src: this.question.previewValue, height: this.question.imageHeight, width: this.question.imageWidth }))); + }; + return SurveyQuestionFile; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("file", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionFile, props); +}); + + +/***/ }), +/* 72 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionHtml; }); + + + + +var SurveyQuestionHtml = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionHtml, _super); + function SurveyQuestionHtml(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionHtml.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionHtml.prototype.render = function () { + if (!this.question || !this.question.html) + return null; + var htmlValue = { __html: this.question.processedHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + return SurveyQuestionHtml; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("html", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionHtml, props); +}); + + +/***/ }), +/* 73 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrix; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixRow; }); + + + + +var SurveyQuestionMatrix = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrix, _super); + function SurveyQuestionMatrix(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMatrix.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrix.prototype.render = function () { + if (!this.question) + return null; + var firstTH = this.question.hasRows ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null) : null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key }, column.text)); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + var key = "row" + i; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixRow, { key: key, question: this.question, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, row: row, isFirst: i == 0 })); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + firstTH, + headers)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))); + }; + return SurveyQuestionMatrix; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixRow, _super); + function SurveyQuestionMatrixRow(props) { + var _this = _super.call(this, props) || this; + _this.question = props.question; + _this.row = props.row; + _this.isFirst = props.isFirst; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + SurveyQuestionMatrixRow.prototype.handleOnChange = function (event) { + this.row.value = event.target.value; + this.setState({ value: this.row.value }); + }; + SurveyQuestionMatrixRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.question = nextProps.question; + this.row = nextProps.row; + this.isFirst = nextProps.isFirst; + }; + SurveyQuestionMatrixRow.prototype.render = function () { + if (!this.row) + return null; + var firstTD = this.question.hasRows ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", null, this.row.text) : null; + var tds = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "value" + i; + var isChecked = this.row.value == column.value; + var inputId = this.isFirst && i == 0 ? this.question.inputId : null; + var td = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: key }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: inputId, type: "radio", name: this.row.fullName, value: column.value, disabled: this.isDisplayMode, checked: isChecked, onChange: this.handleOnChange })); + tds.push(td); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + firstTD, + tds)); + }; + return SurveyQuestionMatrixRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrix", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrix, props); +}); + + +/***/ }), +/* 74 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestion__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrixDropdown; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixDropdownRow; }); + + + + + +var SurveyQuestionMatrixDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDropdown, _super); + function SurveyQuestionMatrixDropdown(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMatrixDropdown.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrixDropdown.prototype.render = function () { + if (!this.question) + return null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + var minWidth = this.question.getColumnWidth(column); + var columnStyle = minWidth ? { minWidth: minWidth } : {}; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key, style: columnStyle }, this.question.getColumnTitle(column))); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDropdownRow, { row: row, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, creator: this.creator })); + } + var divStyle = this.question.horizontalScroll ? { overflowX: 'scroll' } : {}; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null), + headers)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows)))); + }; + return SurveyQuestionMatrixDropdown; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixDropdownRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDropdownRow, _super); + function SurveyQuestionMatrixDropdownRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyQuestionMatrixDropdownRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDropdownRow.prototype.setProperties = function (nextProps) { + this.row = nextProps.row; + this.creator = nextProps.creator; + }; + SurveyQuestionMatrixDropdownRow.prototype.render = function () { + if (!this.row) + return null; + var tds = []; + for (var i = 0; i < this.row.cells.length; i++) { + var cell = this.row.cells[i]; + var errors = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestion__["b" /* SurveyQuestionErrors */], { question: cell.question, css: this.rootCss, creator: this.creator }); + var select = this.renderSelect(cell); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + i }, + errors, + select)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", null, this.row.text), + tds)); + }; + SurveyQuestionMatrixDropdownRow.prototype.renderSelect = function (cell) { + return this.creator.createQuestionElement(cell.question); + }; + return SurveyQuestionMatrixDropdownRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrixdropdown", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDropdown, props); +}); + + +/***/ }), +/* 75 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestion__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrixDynamic; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixDynamicRow; }); + + + + + +var SurveyQuestionMatrixDynamic = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDynamic, _super); + function SurveyQuestionMatrixDynamic(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + Object.defineProperty(SurveyQuestionMatrixDynamic.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrixDynamic.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDynamic.prototype.setProperties = function (nextProps) { + var self = this; + this.state = { rowCounter: 0 }; + this.question.rowCountChangedCallback = function () { + self.state.rowCounter = self.state.rowCounter + 1; + self.setState(self.state); + }; + this.handleOnRowAddClick = this.handleOnRowAddClick.bind(this); + }; + SurveyQuestionMatrixDynamic.prototype.handleOnRowAddClick = function (event) { + this.question.addRow(); + }; + SurveyQuestionMatrixDynamic.prototype.render = function () { + if (!this.question) + return null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + var minWidth = this.question.getColumnWidth(column); + var columnStyle = minWidth ? { minWidth: minWidth } : {}; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key, style: columnStyle }, this.question.getColumnTitle(column))); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDynamicRow, { row: row, question: this.question, index: i, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, creator: this.creator })); + } + var divStyle = this.question.horizontalScroll ? { overflowX: 'scroll' } : {}; + var btnDeleteTD = !this.isDisplayMode ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null) : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + headers, + btnDeleteTD)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))), + this.renderAddRowButton())); + }; + SurveyQuestionMatrixDynamic.prototype.renderAddRowButton = function () { + if (this.isDisplayMode) + return null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: this.css.button, type: "button", onClick: this.handleOnRowAddClick, value: this.question.addRowText }); + }; + return SurveyQuestionMatrixDynamic; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixDynamicRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDynamicRow, _super); + function SurveyQuestionMatrixDynamicRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyQuestionMatrixDynamicRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDynamicRow.prototype.setProperties = function (nextProps) { + this.row = nextProps.row; + this.question = nextProps.question; + this.index = nextProps.index; + this.creator = nextProps.creator; + this.handleOnRowRemoveClick = this.handleOnRowRemoveClick.bind(this); + }; + SurveyQuestionMatrixDynamicRow.prototype.handleOnRowRemoveClick = function (event) { + this.question.removeRow(this.index); + }; + SurveyQuestionMatrixDynamicRow.prototype.render = function () { + if (!this.row) + return null; + var tds = []; + for (var i = 0; i < this.row.cells.length; i++) { + var cell = this.row.cells[i]; + var errors = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestion__["b" /* SurveyQuestionErrors */], { question: cell.question, css: this.rootCss, creator: this.creator }); + var select = this.renderQuestion(cell); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + i }, + errors, + select)); + } + if (!this.isDisplayMode) { + var removeButton = this.renderButton(); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + this.row.cells.length + 1 }, removeButton)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, tds)); + }; + SurveyQuestionMatrixDynamicRow.prototype.renderQuestion = function (cell) { + return this.creator.createQuestionElement(cell.question); + }; + SurveyQuestionMatrixDynamicRow.prototype.renderButton = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: this.css.button, type: "button", onClick: this.handleOnRowRemoveClick, value: this.question.removeRowText }); + }; + return SurveyQuestionMatrixDynamicRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrixdynamic", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDynamic, props); +}); + + +/***/ }), +/* 76 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMultipleText; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMultipleTextItem; }); + + + + +var SurveyQuestionMultipleText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMultipleText, _super); + function SurveyQuestionMultipleText(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMultipleText.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMultipleText.prototype.render = function () { + if (!this.question) + return null; + var tableRows = this.question.getRows(); + var rows = []; + for (var i = 0; i < tableRows.length; i++) { + rows.push(this.renderRow("item" + i, tableRows[i])); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))); + }; + SurveyQuestionMultipleText.prototype.renderRow = function (key, items) { + var tds = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "label" + i }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: this.css.itemTitle }, item.fullTitle))); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "value" + i }, this.renderItem(item, i == 0))); + } + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", { key: key }, tds); + }; + SurveyQuestionMultipleText.prototype.renderItem = function (item, isFirst) { + var inputId = isFirst ? this.question.inputId : null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMultipleTextItem, { item: item, css: this.css, isDisplayMode: this.isDisplayMode, inputId: inputId }); + }; + return SurveyQuestionMultipleText; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMultipleTextItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMultipleTextItem, _super); + function SurveyQuestionMultipleTextItem(props) { + var _this = _super.call(this, props) || this; + _this.item = props.item; + _this.inputId = props.inputId; + _this.state = { value: _this.item.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + SurveyQuestionMultipleTextItem.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionMultipleTextItem.prototype.handleOnBlur = function (event) { + this.item.value = event.target.value; + this.setState({ value: this.item.value }); + }; + SurveyQuestionMultipleTextItem.prototype.componentWillReceiveProps = function (nextProps) { + this.item = nextProps.item; + this.css = nextProps.css; + }; + SurveyQuestionMultipleTextItem.prototype.render = function () { + if (!this.item) + return null; + var style = { float: "left" }; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.inputId, className: this.css.itemValue, style: style }, this.item.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.inputId, className: this.css.itemValue, style: style, type: "text", value: this.state.value, placeholder: this.item.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange })); + }; + Object.defineProperty(SurveyQuestionMultipleTextItem.prototype, "mainClassName", { + get: function () { return ""; }, + enumerable: true, + configurable: true + }); + return SurveyQuestionMultipleTextItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("multipletext", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMultipleText, props); +}); + + +/***/ }), +/* 77 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionRadiogroup; }); + + + + + +var SurveyQuestionRadiogroup = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionRadiogroup, _super); + function SurveyQuestionRadiogroup(props) { + var _this = _super.call(this, props) || this; + _this.state = { choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionRadiogroup.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRadiogroup.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.handleOnChange = this.handleOnChange.bind(this); + }; + SurveyQuestionRadiogroup.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionRadiogroup.prototype.render = function () { + if (!this.question) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, this.getItems())); + }; + SurveyQuestionRadiogroup.prototype.getItems = function () { + var items = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + items.push(this.renderItem(key, item, i == 0)); + } + return items; + }; + Object.defineProperty(SurveyQuestionRadiogroup.prototype, "textStyle", { + get: function () { return { marginLeft: "3px" }; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRadiogroup.prototype.renderItem = function (key, item, isFirst) { + var itemWidth = this.question.colCount > 0 ? (100 / this.question.colCount) + "%" : ""; + var marginRight = this.question.colCount == 0 ? "5px" : "0px"; + var divStyle = { marginRight: marginRight }; + if (itemWidth) { + divStyle["width"] = itemWidth; + } + var isChecked = this.question.value == item.value; + var otherItem = (isChecked && item.value === this.question.otherItem.value) ? this.renderOther() : null; + return this.renderRadio(key, item, isChecked, divStyle, otherItem, isFirst); + }; + SurveyQuestionRadiogroup.prototype.renderRadio = function (key, item, isChecked, divStyle, otherItem, isFirst) { + var id = isFirst ? this.question.inputId : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { key: key, className: this.css.item, style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { className: this.css.label }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: id, type: "radio", name: this.question.name + "_" + this.questionBase.id, checked: isChecked, value: item.value, disabled: this.isDisplayMode, onChange: this.handleOnChange }), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { style: this.textStyle }, item.text)), + otherItem)); + }; + SurveyQuestionRadiogroup.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionRadiogroup; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("radiogroup", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionRadiogroup, props); +}); + + +/***/ }), +/* 78 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionRating; }); + + + + + +var SurveyQuestionRating = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionRating, _super); + function SurveyQuestionRating(props) { + var _this = _super.call(this, props) || this; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionRating.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRating.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionRating.prototype.render = function () { + if (!this.question) + return null; + var values = []; + var minText = this.question.minRateDescription ? this.question.minRateDescription + " " : ""; + var maxText = this.question.maxRateDescription ? " " + this.question.maxRateDescription : ""; + for (var i = 0; i < this.question.visibleRateValues.length; i++) { + var minTextValue = i == 0 ? minText : ""; + var maxTextValue = i == this.question.visibleRateValues.length - 1 ? maxText : ""; + values.push(this.renderItem("value" + i, this.question.visibleRateValues[i], minTextValue, maxTextValue)); + } + var comment = this.question.hasOther ? this.renderOther() : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, + values, + comment)); + }; + SurveyQuestionRating.prototype.renderItem = function (key, item, minText, maxText) { + var isChecked = this.question.value == item.value; + var className = this.css.item; + if (isChecked) + className += " active"; + var min = minText ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, minText) : null; + var max = maxText ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, maxText) : null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { key: key, className: className }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "radio", style: { display: "none" }, name: this.question.name, value: item.value, disabled: this.isDisplayMode, checked: this.question.value == item.value, onChange: this.handleOnChange }), + min, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, item.text), + max); + }; + SurveyQuestionRating.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionRating; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("rating", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionRating, props); +}); + + +/***/ }), +/* 79 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionText; }); + + + + +var SurveyQuestionText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionText, _super); + function SurveyQuestionText(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionText.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionText.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state = { value: this.question.value || '' }; + }; + SurveyQuestionText.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionText.prototype.handleOnBlur = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value || '' }); + }; + SurveyQuestionText.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css }, this.question.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.question.inputId, className: this.css, type: this.question.inputType, value: this.state.value, size: this.question.size, placeholder: this.question.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange })); + }; + return SurveyQuestionText; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("text", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionText, props); +}); + + +/***/ }), +/* 80 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(24); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindowModel; }); + + + +var SurveyWindowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindowModel, _super); + function SurveyWindowModel(jsonObj) { + var _this = _super.call(this) || this; + _this.surveyValue = _this.createSurvey(jsonObj); + _this.surveyValue.showTitle = false; + _this.windowElement = document.createElement("div"); + return _this; + } + SurveyWindowModel.prototype.getType = function () { return "window"; }; + Object.defineProperty(SurveyWindowModel.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isShowing", { + get: function () { return this.isShowingValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isExpanded", { + get: function () { return this.isExpandedValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "title", { + get: function () { return this.titleValue ? this.titleValue : this.survey.title; }, + set: function (value) { this.titleValue = value; }, + enumerable: true, + configurable: true + }); + SurveyWindowModel.prototype.expand = function () { + this.expandcollapse(true); + }; + SurveyWindowModel.prototype.collapse = function () { + this.expandcollapse(false); + }; + SurveyWindowModel.prototype.createSurvey = function (jsonObj) { + return new __WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */](jsonObj); + }; + SurveyWindowModel.prototype.expandcollapse = function (value) { + this.isExpandedValue = value; + }; + return SurveyWindowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +SurveyWindowModel.surveyElementName = "windowSurveyJS"; + + +/***/ }), +/* 81 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Trigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTrigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyTriggerVisible; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyTriggerComplete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyTriggerSetValue; }); + + + +var Trigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Trigger, _super); + function Trigger() { + var _this = _super.call(this) || this; + _this.opValue = "equal"; + return _this; + } + Object.defineProperty(Trigger, "operators", { + get: function () { + if (Trigger.operatorsValue != null) + return Trigger.operatorsValue; + Trigger.operatorsValue = { + empty: function (value, expectedValue) { return !value; }, + notempty: function (value, expectedValue) { return !(!value); }, + equal: function (value, expectedValue) { return value == expectedValue; }, + notequal: function (value, expectedValue) { return value != expectedValue; }, + contains: function (value, expectedValue) { return value && value["indexOf"] && value.indexOf(expectedValue) > -1; }, + notcontains: function (value, expectedValue) { return !value || !value["indexOf"] || value.indexOf(expectedValue) == -1; }, + greater: function (value, expectedValue) { return value > expectedValue; }, + less: function (value, expectedValue) { return value < expectedValue; }, + greaterorequal: function (value, expectedValue) { return value >= expectedValue; }, + lessorequal: function (value, expectedValue) { return value <= expectedValue; } + }; + return Trigger.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Trigger.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Trigger.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Trigger.prototype.check = function (value) { + if (Trigger.operators[this.operator](value, this.value)) { + this.onSuccess(); + } + else { + this.onFailure(); + } + }; + Trigger.prototype.onSuccess = function () { }; + Trigger.prototype.onFailure = function () { }; + return Trigger; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +Trigger.operatorsValue = null; +var SurveyTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTrigger, _super); + function SurveyTrigger() { + var _this = _super.call(this) || this; + _this.owner = null; + return _this; + } + SurveyTrigger.prototype.setOwner = function (owner) { + this.owner = owner; + }; + Object.defineProperty(SurveyTrigger.prototype, "isOnNextPage", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + return SurveyTrigger; +}(Trigger)); + +var SurveyTriggerVisible = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerVisible, _super); + function SurveyTriggerVisible() { + var _this = _super.call(this) || this; + _this.pages = []; + _this.questions = []; + return _this; + } + SurveyTriggerVisible.prototype.getType = function () { return "visibletrigger"; }; + SurveyTriggerVisible.prototype.onSuccess = function () { this.onTrigger(this.onItemSuccess); }; + SurveyTriggerVisible.prototype.onFailure = function () { this.onTrigger(this.onItemFailure); }; + SurveyTriggerVisible.prototype.onTrigger = function (func) { + if (!this.owner) + return; + var objects = this.owner.getObjects(this.pages, this.questions); + for (var i = 0; i < objects.length; i++) { + func(objects[i]); + } + }; + SurveyTriggerVisible.prototype.onItemSuccess = function (item) { item.visible = true; }; + SurveyTriggerVisible.prototype.onItemFailure = function (item) { item.visible = false; }; + return SurveyTriggerVisible; +}(SurveyTrigger)); + +var SurveyTriggerComplete = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerComplete, _super); + function SurveyTriggerComplete() { + return _super.call(this) || this; + } + SurveyTriggerComplete.prototype.getType = function () { return "completetrigger"; }; + Object.defineProperty(SurveyTriggerComplete.prototype, "isOnNextPage", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + SurveyTriggerComplete.prototype.onSuccess = function () { if (this.owner) + this.owner.doComplete(); }; + return SurveyTriggerComplete; +}(SurveyTrigger)); + +var SurveyTriggerSetValue = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerSetValue, _super); + function SurveyTriggerSetValue() { + return _super.call(this) || this; + } + SurveyTriggerSetValue.prototype.getType = function () { return "setvaluetrigger"; }; + SurveyTriggerSetValue.prototype.onSuccess = function () { + if (!this.setToName || !this.owner) + return; + this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable); + }; + return SurveyTriggerSetValue; +}(SurveyTrigger)); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("trigger", ["operator", "!value"]); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("surveytrigger", ["!name"], null, "trigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("visibletrigger", ["pages", "questions"], function () { return new SurveyTriggerVisible(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("completetrigger", [], function () { return new SurveyTriggerComplete(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("setvaluetrigger", ["!setToName", "setValue", "isVariable:boolean"], function () { return new SurveyTriggerSetValue(); }, "surveytrigger"); + + +/***/ }), +/* 82 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return browser; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return compareVersions; }); +var webkitRegExp = /(webkit)[ \/]([\w.]+)/, ieRegExp = /(msie) (\d{1,2}\.\d)/, ie11RegExp = /(trident).*rv:(\d{1,2}\.\d)/, msEdge = /(edge)\/((\d+)?[\w\.]+)/, mozillaRegExp = /(mozilla)(?:.*? rv:([\w.]+))/; +var browserFromUA = function (ua) { + ua = ua.toLowerCase(); + var result = {}, matches = ieRegExp.exec(ua) || ie11RegExp.exec(ua) || msEdge.exec(ua) || ua.indexOf("compatible") < 0 && mozillaRegExp.exec(ua) || webkitRegExp.exec(ua) || [], browserName = matches[1], browserVersion = matches[2]; + if (browserName === "trident" || browserName === "edge") { + browserName = "msie"; + } + else if (browserName === "mozilla") { + browserName = "firefox"; + } + if (browserName) { + result[browserName] = true; + result.version = browserVersion; + } + return result; +}; +var browser = browserFromUA(navigator.userAgent); +function compareVersions(a, b) { + var i, diff; + var regExStrip0 = /(\.0+)+$/; + var segmentsA = a.replace(regExStrip0, '').split('.'); + var segmentsB = b.replace(regExStrip0, '').split('.'); + var l = Math.min(segmentsA.length, segmentsB.length); + for (i = 0; i < l; i++) { + diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10); + if (diff) { + return diff; + } + } + return segmentsA.length - segmentsB.length; +} + + + +/***/ }), +/* 83 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_dom__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_dom__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__react_reactSurvey__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__react_reactSurveyWindow__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_jquery__ = __webpack_require__(37); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_jquery__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__react__ = __webpack_require__(36); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "defaultStandardCss", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "defaultBootstrapCss", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Survey", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["c"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["d"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["e"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigationBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["f"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigation", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["g"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyPage", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["h"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyRow", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["i"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestion", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["j"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionErrors", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["k"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyElementBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["l"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionElementBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["m"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCommentItem", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["n"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionComment", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["o"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckbox", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["p"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckboxItem", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionDropdown", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["r"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdown", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["s"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdownRow", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["t"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrix", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["u"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixRow", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["v"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionHtml", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["w"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionFile", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["x"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleText", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleTextItem", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRadiogroup", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["A"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionText", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["B"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamic", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["C"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamicRow", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["D"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyProgress", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["E"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRating", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["F"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["G"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ReactQuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["H"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["I"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["J"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "AnswerCountValidator", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["K"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "EmailValidator", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["L"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "NumericValidator", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["M"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RegexValidator", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["N"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyValidator", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["O"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextValidator", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["P"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorResult", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["Q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorRunner", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["R"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Base", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["S"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Event", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["T"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["U"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ItemValue", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["V"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "LocalizableString", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["W"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ChoicesRestfull", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["X"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Condition", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["Y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionNode", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["Z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionRunner", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_0"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionsParser", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_1"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ProcessValue", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_2"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_3"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ExceedSizeError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_4"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RequreNumericError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_5"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_6"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonIncorrectTypeError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_7"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadata", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_8"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadataClass", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_9"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_10"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeErrorBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_11"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObject", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_12"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_13"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonRequiredPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_14"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonUnknownPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_15"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownCell", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_16"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownColumn", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_17"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModelBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_18"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModelBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_19"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_20"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_21"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDynamicRowModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_22"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamicModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_23"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixRowModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_24"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_25"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MultipleTextItemModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_26"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleTextModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_27"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_28"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModelBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_29"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRowModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_30"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PageModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_31"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Question", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_32"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_33"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_34"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionSelectBase", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_35"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_36"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCommentModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_37"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_38"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ElementFactory", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_39"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFileModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_40"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionHtmlModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_41"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRadiogroupModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_42"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRatingModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_43"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionTextModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_44"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_45"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTrigger", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_46"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerComplete", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_47"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerSetValue", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_48"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerVisible", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_49"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Trigger", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_50"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindowModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_51"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextPreProcessor", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_52"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dxSurveyService", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_53"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyLocalization", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_54"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyStrings", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_55"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCustomWidget", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_56"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomWidgetCollection", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_57"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_58"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_59"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __WEBPACK_IMPORTED_MODULE_6__react__["_60"]; }); + + + + + + +__WEBPACK_IMPORTED_MODULE_5_jquery___default.a["fn"].extend({ + Survey: function (props) { + this.each(function () { + __WEBPACK_IMPORTED_MODULE_2_react_dom__["render"]((__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__react_reactSurvey__["a" /* Survey */], __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */]({}, props))), this); + }); + }, + SurveyWindow: function (props) { + this.each(function () { + __WEBPACK_IMPORTED_MODULE_2_react_dom__["render"]((__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_4__react_reactSurveyWindow__["a" /* SurveyWindow */], __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */]({}, props))), this); + }); + } +}); + + + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA2NGUxMWY2M2M5Y2ZjNmViMDY1NiIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIndlYnBhY2s6Ly8vLi9+L3ByZWFjdC1jb21wYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9qc29ub2JqZWN0LnRzIiwid2VicGFjazovLy8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25mYWN0b3J5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9pdGVtdmFsdWUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25jb21tZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9ucy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY2hvaWNlc1Jlc3RmdWxsLnRzIiwid2VicGFjazovLy8uL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdmFsaWRhdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVdpbmRvdy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmRpdGlvbnNQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFnZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFuZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cGFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvcmVhY3QudHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcImpRdWVyeVwiLFwiY29tbW9uanMyXCI6XCJqcXVlcnlcIixcImNvbW1vbmpzXCI6XCJqcXVlcnlcIixcImFtZFwiOlwianF1ZXJ5XCJ9Iiwid2VicGFjazovLy8uL3NyYy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vfi9wcmVhY3QvZGlzdC9wcmVhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwLnRzIiwid2VicGFjazovLy8uL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9jaGVja2JveC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fY29tbWVudC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2ZpbGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2h0bWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcmFkaW9ncm91cC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcmF0aW5nLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uZHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uZmlsZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25odG1sLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXhkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm11bHRpcGxldGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25yYWRpb2dyb3VwLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbnJhdGluZy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5V2luZG93LnRzIiwid2VicGFjazovLy8uL3NyYy90cmlnZ2VyLnRzIiwid2VicGFjazovLy8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9qcXVlcnkudHN4Il0sIm5hbWVzIjpbInZlcnNpb24iLCJFTEVNRU5UUyIsInNwbGl0IiwiUkVBQ1RfRUxFTUVOVF9UWVBFIiwiU3ltYm9sIiwiZm9yIiwiQ09NUE9ORU5UX1dSQVBQRVJfS0VZIiwiQVVUT0JJTkRfQkxBQ0tMSVNUIiwiY29uc3RydWN0b3IiLCJyZW5kZXIiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVbm1vdW50IiwiQ0FNRUxfUFJPUFMiLCJCWVBBU1NfSE9PSyIsIkRFViIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVtcHR5Q29tcG9uZW50IiwiVk5vZGUiLCJwcm90b3R5cGUiLCIkJHR5cGVvZiIsInByZWFjdENvbXBhdFVwZ3JhZGVkIiwicHJlYWN0Q29tcGF0Tm9ybWFsaXplZCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwibm9kZU5hbWUiLCJzZXQiLCJ2IiwiY29uZmlndXJhYmxlIiwiYXR0cmlidXRlcyIsIm9sZEV2ZW50SG9vayIsImV2ZW50IiwiZSIsInBlcnNpc3QiLCJuYXRpdmVFdmVudCIsIm9sZFZub2RlSG9vayIsInZub2RlIiwidGFnIiwiYXR0cnMiLCJjaGlsZHJlbiIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVZOb2RlIiwiaGFuZGxlQ29tcG9uZW50Vk5vZGUiLCJkZWZhdWx0VmFsdWUiLCJ2YWx1ZSIsImhhbmRsZUVsZW1lbnRWTm9kZSIsImEiLCJkZWZhdWx0UHJvcHMiLCJleHRlbmQiLCJzaG91bGRTYW5pdGl6ZSIsImkiLCJ0ZXN0IiwiaGFzT3duUHJvcGVydHkiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJwYXJlbnQiLCJjYWxsYmFjayIsInByZXYiLCJfcHJlYWN0Q29tcGF0UmVuZGVyZWQiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlcyIsInJlbW92ZUNoaWxkIiwib3V0IiwiX2NvbXBvbmVudCIsImJhc2UiLCJDb250ZXh0UHJvdmlkZXIiLCJwcm9wcyIsImNvbnRleHQiLCJyZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciIsInBhcmVudENvbXBvbmVudCIsImNvbnRhaW5lciIsIndyYXAiLCJjIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImV4aXN0aW5nIiwiQVJSIiwiQ2hpbGRyZW4iLCJtYXAiLCJmbiIsImN0eCIsInRvQXJyYXkiLCJiaW5kIiwiZm9yRWFjaCIsImNvdW50Iiwib25seSIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwiY29uY2F0IiwiY3VycmVudENvbXBvbmVudCIsImNyZWF0ZUZhY3RvcnkiLCJ0eXBlIiwiY3JlYXRlRWxlbWVudCIsIkRPTSIsInVwZ3JhZGVUb1ZOb2RlcyIsImFyciIsIm9mZnNldCIsIm9iaiIsImlzVmFsaWRFbGVtZW50IiwiaXNTdGF0ZWxlc3NDb21wb25lbnQiLCJ3cmFwU3RhdGVsZXNzQ29tcG9uZW50IiwiV3JhcHBlZENvbXBvbmVudCIsImNyZWF0ZUNsYXNzIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwic3RhdGVsZXNzQ29tcG9uZW50SG9vayIsIkN0b3IiLCJXcmFwcGVkIiwicHJvcFR5cGVzIiwiYXJncyIsImFwcGx5Q2xhc3NOYW1lIiwicmVmIiwiY3JlYXRlU3RyaW5nUmVmUHJveHkiLCJhcHBseUV2ZW50Tm9ybWFsaXphdGlvbiIsImNsb25lRWxlbWVudCIsImVsZW1lbnQiLCJlbGVtZW50UHJvcHMiLCJub2RlIiwiY29tcG9uZW50IiwiX3JlZlByb3hpZXMiLCJyZWZzIiwicmVzb2x2ZWQiLCJvbmRvdWJsZWNsaWNrIiwib25kYmxjbGljayIsIm9uY2hhbmdlIiwibm9ybWFsaXplZCIsIm9uaW5wdXQiLCJtdWx0aWhvb2siLCJjbCIsImNsYXNzTmFtZSIsImNsYXNzIiwia2V5Iiwic2hhbGxvd0RpZmZlcnMiLCJiIiwiZmluZERPTU5vZGUiLCJGIiwiYmluZEFsbCIsIkNvbXBvbmVudCIsImNhbGwiLCJuZXdDb21wb25lbnRIb29rIiwibWl4aW5zIiwiYXBwbHlNaXhpbnMiLCJjb2xsYXRlTWl4aW5zIiwic3RhdGljcyIsImdldERlZmF1bHRQcm9wcyIsImtleWVkIiwibWl4aW4iLCJwdXNoIiwicHJvdG8iLCJfX2JvdW5kIiwiY2FsbE1ldGhvZCIsIm0iLCJhcHBseSIsImhvb2tzIiwic2tpcER1cGxpY2F0ZXMiLCJyZXQiLCJyIiwiYXJndW1lbnRzIiwicHJvcHNIb29rIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJjdG9yIiwicHJvcCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcHRzIiwic3RhdGUiLCJnZXRJbml0aWFsU3RhdGUiLCJpc1JlYWN0Q29tcG9uZW50IiwicmVwbGFjZVN0YXRlIiwic2V0U3RhdGUiLCJnZXRET01Ob2RlIiwiaXNNb3VudGVkIiwiUHVyZUNvbXBvbmVudCIsIlByb3BUeXBlcyIsInVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDaEVPLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLE1BQU07SUFDdEQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEQsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUksbUJBQW9CLFNBQVMsRUFBRSxTQUFTO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLGdCQUFnQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pILENBQUM7QUFBQSxDQUFDO0FBSUssSUFBSSxVQUFVLEdBQUcsVUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJO0lBQzNELElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxFQUFFLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztRQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ILElBQUk7UUFBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xKLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQzs7Ozs7Ozs7OztBQ3JCSyxJQUFJLGtCQUFrQixHQUFHO0lBQzVCLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLE9BQU8sRUFBRSxFQUFFO0lBQ1gsU0FBUyxFQUFFLFVBQVUsT0FBZTtRQUNoQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUNoRixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUFDLEdBQUcsR0FBRyxhQUFhLENBQUM7UUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsVUFBVSxFQUFFO1FBQ1IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQztBQUNLLElBQUksYUFBYSxHQUFHO0lBQ3ZCLFlBQVksRUFBRSxVQUFVO0lBQ3hCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLFlBQVksRUFBRSxVQUFVO0lBQ3hCLGFBQWEsRUFBRSxrQkFBa0I7SUFDakMsWUFBWSxFQUFFLGlCQUFpQjtJQUMvQixXQUFXLEVBQUUscURBQXFEO0lBQ2xFLGdCQUFnQixFQUFFLHNDQUFzQztJQUN4RCxhQUFhLEVBQUUsc0JBQXNCO0lBQ3JDLGNBQWMsRUFBRSxXQUFXO0lBQzNCLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsc0JBQXNCLEVBQUUsc0NBQXNDO0lBQzlELFlBQVksRUFBRSw4QkFBOEI7SUFDNUMsYUFBYSxFQUFFLG9DQUFvQztJQUNuRCxhQUFhLEVBQUUscUNBQXFDO0lBQ3BELGdCQUFnQixFQUFFLHVEQUF1RDtJQUN6RSxnQkFBZ0IsRUFBRSxtQ0FBbUM7SUFDckQsY0FBYyxFQUFFLHNDQUFzQztJQUN0RCxjQUFjLEVBQUUsMENBQTBDO0lBQzFELGFBQWEsRUFBRSx1RUFBdUU7SUFDdEYsVUFBVSxFQUFFLDRDQUE0QztJQUN4RCxVQUFVLEVBQUUsNENBQTRDO0lBQ3hELFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZUFBZSxFQUFFLHVDQUF1QztJQUN4RCxrQkFBa0IsRUFBRSxxRUFBcUU7SUFDekYsYUFBYSxFQUFFLHNDQUFzQztJQUNyRCxrQkFBa0IsRUFBRSwrQkFBK0I7SUFDbkQsYUFBYSxFQUFFLG9FQUFvRTtJQUNuRixNQUFNLEVBQUUsU0FBUztJQUNqQixTQUFTLEVBQUUsUUFBUTtJQUNuQixpQkFBaUIsRUFBRSxZQUFZO0lBQy9CLGtCQUFrQixFQUFFLGFBQWE7SUFDakMsaUJBQWlCLEVBQUUsWUFBWTtJQUMvQixhQUFhLEVBQUUsUUFBUTtJQUN2QixVQUFVLEVBQUUsS0FBSztDQUNwQixDQUFDO0FBQ0Ysa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUVqRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUc7UUFDekIsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRSxNQUFNO1lBQ25ELE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXO2tCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDO2tCQUNaLEtBQUssQ0FDTjtRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xFRDs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxVQUFVLFFBQWhCLEMsQ0FBMEI7O0FBRTFCLElBQU1DLFdBQVcsZ3VCQUFndUJDLEtBQWh1QixDQUFzdUIsR0FBdHVCLENBQWpCOztBQUVBLElBQU1DLHFCQUFzQixPQUFPQyxNQUFQLEtBQWdCLFdBQWhCLElBQStCQSxPQUFPQyxHQUF0QyxJQUE2Q0QsT0FBT0MsR0FBUCxDQUFXLGVBQVgsQ0FBOUMsSUFBOEUsTUFBekc7O0FBRUEsSUFBTUMsd0JBQXdCLE9BQU9GLE1BQVAsS0FBZ0IsV0FBaEIsR0FBOEJBLE9BQU9DLEdBQVAsQ0FBVyx1QkFBWCxDQUE5QixHQUFvRSx1QkFBbEc7O0FBRUE7QUFDQSxJQUFNRSxxQkFBcUI7QUFDMUJDLGNBQWEsQ0FEYTtBQUUxQkMsU0FBUSxDQUZrQjtBQUcxQkMsd0JBQXVCLENBSEc7QUFJMUJDLDRCQUEyQixDQUpEO0FBSzFCQyxzQkFBcUIsQ0FMSztBQU0xQkMscUJBQW9CLENBTk07QUFPMUJDLHFCQUFvQixDQVBNO0FBUTFCQyxvQkFBbUIsQ0FSTztBQVMxQkMsdUJBQXNCLENBVEk7QUFVMUJDLHNCQUFxQjtBQVZLLENBQTNCOztBQWNBLElBQU1DLGNBQWMsMExBQXBCOztBQUdBLElBQU1DLGNBQWMsRUFBcEI7O0FBRUE7QUFDQSxJQUFNQyxNQUFNLE9BQU9DLE9BQVAsS0FBaUIsV0FBakIsSUFBZ0MsQ0FBQ0EsUUFBUUMsR0FBekMsSUFBZ0RELFFBQVFDLEdBQVIsQ0FBWUMsUUFBWixLQUF1QixZQUFuRjs7QUFFQTtBQUNBLFNBQVNDLGNBQVQsR0FBMEI7QUFBRSxRQUFPLElBQVA7QUFBYzs7QUFJMUM7QUFDQSxJQUFJQyxRQUFRLGVBQUUsR0FBRixFQUFPLElBQVAsRUFBYWpCLFdBQXpCO0FBQ0FpQixNQUFNQyxTQUFOLENBQWdCQyxRQUFoQixHQUEyQnhCLGtCQUEzQjtBQUNBc0IsTUFBTUMsU0FBTixDQUFnQkUsb0JBQWhCLEdBQXVDLEtBQXZDO0FBQ0FILE1BQU1DLFNBQU4sQ0FBZ0JHLHNCQUFoQixHQUF5QyxLQUF6Qzs7QUFFQUMsT0FBT0MsY0FBUCxDQUFzQk4sTUFBTUMsU0FBNUIsRUFBdUMsTUFBdkMsRUFBK0M7QUFDOUNNLElBRDhDLGlCQUN4QztBQUFFLFNBQU8sS0FBS0MsUUFBWjtBQUF1QixFQURlO0FBRTlDQyxJQUY4QyxlQUUxQ0MsQ0FGMEMsRUFFdkM7QUFBRSxPQUFLRixRQUFMLEdBQWdCRSxDQUFoQjtBQUFvQixFQUZpQjs7QUFHOUNDLGVBQWE7QUFIaUMsQ0FBL0M7O0FBTUFOLE9BQU9DLGNBQVAsQ0FBc0JOLE1BQU1DLFNBQTVCLEVBQXVDLE9BQXZDLEVBQWdEO0FBQy9DTSxJQUQrQyxpQkFDekM7QUFBRSxTQUFPLEtBQUtLLFVBQVo7QUFBeUIsRUFEYztBQUUvQ0gsSUFGK0MsZUFFM0NDLENBRjJDLEVBRXhDO0FBQUUsT0FBS0UsVUFBTCxHQUFrQkYsQ0FBbEI7QUFBc0IsRUFGZ0I7O0FBRy9DQyxlQUFhO0FBSGtDLENBQWhEOztBQVFBLElBQUlFLGVBQWUsZ0JBQVFDLEtBQTNCO0FBQ0EsZ0JBQVFBLEtBQVIsR0FBZ0IsYUFBSztBQUNwQixLQUFJRCxZQUFKLEVBQWtCRSxJQUFJRixhQUFhRSxDQUFiLENBQUo7QUFDbEJBLEdBQUVDLE9BQUYsR0FBWVgsTUFBWjtBQUNBVSxHQUFFRSxXQUFGLEdBQWdCRixDQUFoQjtBQUNBLFFBQU9BLENBQVA7QUFDQSxDQUxEOztBQVFBLElBQUlHLGVBQWUsZ0JBQVFDLEtBQTNCO0FBQ0EsZ0JBQVFBLEtBQVIsR0FBZ0IsaUJBQVM7QUFDeEIsS0FBSSxDQUFDQSxNQUFNaEIsb0JBQVgsRUFBaUM7QUFDaENnQixRQUFNaEIsb0JBQU4sR0FBNkIsSUFBN0I7O0FBRUEsTUFBSWlCLE1BQU1ELE1BQU1YLFFBQWhCO0FBQUEsTUFDQ2EsUUFBUUYsTUFBTVAsVUFEZjs7QUFHQSxNQUFJLENBQUNTLEtBQUwsRUFBWUEsUUFBUUYsTUFBTVAsVUFBTixHQUFtQixFQUEzQjs7QUFFWixNQUFJLE9BQU9RLEdBQVAsS0FBYSxVQUFqQixFQUE2QjtBQUM1QixPQUFJQSxJQUFJdkMscUJBQUosTUFBNkIsSUFBN0IsSUFBc0N1QyxJQUFJbkIsU0FBSixJQUFpQixzQkFBc0JtQixJQUFJbkIsU0FBckYsRUFBaUc7QUFDaEcsUUFBSWtCLE1BQU1HLFFBQU4sSUFBa0IsQ0FBQ0gsTUFBTUcsUUFBTixDQUFlQyxNQUF0QyxFQUE4Q0osTUFBTUcsUUFBTixHQUFpQkUsU0FBakI7QUFDOUMsUUFBSUwsTUFBTUcsUUFBVixFQUFvQkQsTUFBTUMsUUFBTixHQUFpQkgsTUFBTUcsUUFBdkI7O0FBRXBCLFFBQUksQ0FBQ0gsTUFBTWYsc0JBQVgsRUFBbUM7QUFDbENxQixvQkFBZU4sS0FBZjtBQUNBO0FBQ0RPLHlCQUFxQlAsS0FBckI7QUFDQTtBQUNELEdBVkQsTUFXSztBQUNKLE9BQUlBLE1BQU1HLFFBQU4sSUFBa0IsQ0FBQ0gsTUFBTUcsUUFBTixDQUFlQyxNQUF0QyxFQUE4Q0osTUFBTUcsUUFBTixHQUFpQkUsU0FBakI7QUFDOUMsT0FBSUwsTUFBTUcsUUFBVixFQUFvQkQsTUFBTUMsUUFBTixHQUFpQkgsTUFBTUcsUUFBdkI7O0FBRXBCLE9BQUlELE1BQU1NLFlBQVYsRUFBd0I7QUFDdkIsUUFBSSxDQUFDTixNQUFNTyxLQUFQLElBQWdCUCxNQUFNTyxLQUFOLEtBQWMsQ0FBbEMsRUFBcUM7QUFDcENQLFdBQU1PLEtBQU4sR0FBY1AsTUFBTU0sWUFBcEI7QUFDQTtBQUNELFdBQU9OLE1BQU1NLFlBQWI7QUFDQTs7QUFFREUsc0JBQW1CVixLQUFuQixFQUEwQkUsS0FBMUI7QUFDQTtBQUNEOztBQUVELEtBQUlILFlBQUosRUFBa0JBLGFBQWFDLEtBQWI7QUFDbEIsQ0FwQ0Q7O0FBc0NBLFNBQVNPLG9CQUFULENBQThCUCxLQUE5QixFQUFxQztBQUNwQyxLQUFJQyxNQUFNRCxNQUFNWCxRQUFoQjtBQUFBLEtBQ0NzQixJQUFJWCxNQUFNUCxVQURYOztBQUdBTyxPQUFNUCxVQUFOLEdBQW1CLEVBQW5CO0FBQ0EsS0FBSVEsSUFBSVcsWUFBUixFQUFzQkMsT0FBT2IsTUFBTVAsVUFBYixFQUF5QlEsSUFBSVcsWUFBN0I7QUFDdEIsS0FBSUQsQ0FBSixFQUFPRSxPQUFPYixNQUFNUCxVQUFiLEVBQXlCa0IsQ0FBekI7QUFDUDs7QUFFRCxTQUFTRCxrQkFBVCxDQUE0QlYsS0FBNUIsRUFBbUNXLENBQW5DLEVBQXNDO0FBQ3JDLEtBQUlHLHVCQUFKO0FBQUEsS0FBb0JaLGNBQXBCO0FBQUEsS0FBMkJhLFVBQTNCO0FBQ0EsS0FBSUosQ0FBSixFQUFPO0FBQ04sT0FBS0ksQ0FBTCxJQUFVSixDQUFWO0FBQWEsT0FBS0csaUJBQWlCeEMsWUFBWTBDLElBQVosQ0FBaUJELENBQWpCLENBQXRCLEVBQTRDO0FBQXpELEdBQ0EsSUFBSUQsY0FBSixFQUFvQjtBQUNuQlosV0FBUUYsTUFBTVAsVUFBTixHQUFtQixFQUEzQjtBQUNBLFFBQUtzQixDQUFMLElBQVVKLENBQVYsRUFBYTtBQUNaLFFBQUlBLEVBQUVNLGNBQUYsQ0FBaUJGLENBQWpCLENBQUosRUFBeUI7QUFDeEJiLFdBQU81QixZQUFZMEMsSUFBWixDQUFpQkQsQ0FBakIsSUFBc0JBLEVBQUVHLE9BQUYsQ0FBVSxZQUFWLEVBQXdCLEtBQXhCLEVBQStCQyxXQUEvQixFQUF0QixHQUFxRUosQ0FBNUUsSUFBa0ZKLEVBQUVJLENBQUYsQ0FBbEY7QUFDQTtBQUNEO0FBQ0Q7QUFDRDtBQUNEOztBQUlEO0FBQ0EsU0FBU2xELE1BQVQsQ0FBZ0JtQyxLQUFoQixFQUF1Qm9CLE1BQXZCLEVBQStCQyxRQUEvQixFQUF5QztBQUN4QyxLQUFJQyxPQUFPRixVQUFVQSxPQUFPRyxxQkFBNUI7O0FBRUE7QUFDQSxLQUFJRCxRQUFRQSxLQUFLRSxVQUFMLEtBQWtCSixNQUE5QixFQUFzQ0UsT0FBTyxJQUFQOztBQUV0QztBQUNBLEtBQUksQ0FBQ0EsSUFBTCxFQUFXQSxPQUFPRixPQUFPakIsUUFBUCxDQUFnQixDQUFoQixDQUFQOztBQUVYO0FBQ0EsTUFBSyxJQUFJWSxJQUFFSyxPQUFPSyxVQUFQLENBQWtCckIsTUFBN0IsRUFBcUNXLEdBQXJDLEdBQTRDO0FBQzNDLE1BQUlLLE9BQU9LLFVBQVAsQ0FBa0JWLENBQWxCLE1BQXVCTyxJQUEzQixFQUFpQztBQUNoQ0YsVUFBT00sV0FBUCxDQUFtQk4sT0FBT0ssVUFBUCxDQUFrQlYsQ0FBbEIsQ0FBbkI7QUFDQTtBQUNEOztBQUVELEtBQUlZLE1BQU0sb0JBQWEzQixLQUFiLEVBQW9Cb0IsTUFBcEIsRUFBNEJFLElBQTVCLENBQVY7QUFDQSxLQUFJRixNQUFKLEVBQVlBLE9BQU9HLHFCQUFQLEdBQStCSSxHQUEvQjtBQUNaLEtBQUksT0FBT04sUUFBUCxLQUFrQixVQUF0QixFQUFrQ0E7QUFDbEMsUUFBT00sT0FBT0EsSUFBSUMsVUFBWCxJQUF5QkQsSUFBSUUsSUFBcEM7QUFDQTs7SUFHS0MsZTs7Ozs7OztvQ0FDYTtBQUNqQixVQUFPLEtBQUtDLEtBQUwsQ0FBV0MsT0FBbEI7QUFDQTs7O3lCQUNNRCxLLEVBQU87QUFDYixVQUFPQSxNQUFNNUIsUUFBTixDQUFlLENBQWYsQ0FBUDtBQUNBOzs7Ozs7QUFHRixTQUFTOEIsMEJBQVQsQ0FBb0NDLGVBQXBDLEVBQXFEbEMsS0FBckQsRUFBNERtQyxTQUE1RCxFQUF1RWQsUUFBdkUsRUFBaUY7QUFDaEYsS0FBSWUsT0FBTyxlQUFFTixlQUFGLEVBQW1CLEVBQUVFLFNBQVNFLGdCQUFnQkYsT0FBM0IsRUFBbkIsRUFBeURoQyxLQUF6RCxDQUFYO0FBQ0EsS0FBSXFDLElBQUl4RSxPQUFPdUUsSUFBUCxFQUFhRCxTQUFiLENBQVI7QUFDQSxLQUFJZCxRQUFKLEVBQWNBLFNBQVNnQixDQUFUO0FBQ2QsUUFBT0EsQ0FBUDtBQUNBOztBQUdELFNBQVNDLHNCQUFULENBQWdDSCxTQUFoQyxFQUEyQztBQUMxQyxLQUFJSSxXQUFXSixVQUFVWixxQkFBekI7QUFDQSxLQUFJZ0IsWUFBWUEsU0FBU2YsVUFBVCxLQUFzQlcsU0FBdEMsRUFBaUQ7QUFDaEQsc0JBQWEsZUFBRXZELGNBQUYsQ0FBYixFQUFnQ3VELFNBQWhDLEVBQTJDSSxRQUEzQztBQUNBLFNBQU8sSUFBUDtBQUNBO0FBQ0QsUUFBTyxLQUFQO0FBQ0E7O0FBSUQsSUFBTUMsTUFBTSxFQUFaOztBQUVBO0FBQ0EsSUFBSUMsV0FBVztBQUNkQyxJQURjLGVBQ1Z2QyxRQURVLEVBQ0F3QyxFQURBLEVBQ0lDLEdBREosRUFDUztBQUN0QixNQUFJekMsWUFBWSxJQUFoQixFQUFzQixPQUFPLElBQVA7QUFDdEJBLGFBQVdzQyxTQUFTSSxPQUFULENBQWlCMUMsUUFBakIsQ0FBWDtBQUNBLE1BQUl5QyxPQUFPQSxRQUFNekMsUUFBakIsRUFBMkJ3QyxLQUFLQSxHQUFHRyxJQUFILENBQVFGLEdBQVIsQ0FBTDtBQUMzQixTQUFPekMsU0FBU3VDLEdBQVQsQ0FBYUMsRUFBYixDQUFQO0FBQ0EsRUFOYTtBQU9kSSxRQVBjLG1CQU9ONUMsUUFQTSxFQU9Jd0MsRUFQSixFQU9RQyxHQVBSLEVBT2E7QUFDMUIsTUFBSXpDLFlBQVksSUFBaEIsRUFBc0IsT0FBTyxJQUFQO0FBQ3RCQSxhQUFXc0MsU0FBU0ksT0FBVCxDQUFpQjFDLFFBQWpCLENBQVg7QUFDQSxNQUFJeUMsT0FBT0EsUUFBTXpDLFFBQWpCLEVBQTJCd0MsS0FBS0EsR0FBR0csSUFBSCxDQUFRRixHQUFSLENBQUw7QUFDM0J6QyxXQUFTNEMsT0FBVCxDQUFpQkosRUFBakI7QUFDQSxFQVphO0FBYWRLLE1BYmMsaUJBYVI3QyxRQWJRLEVBYUU7QUFDZixTQUFPQSxZQUFZQSxTQUFTQyxNQUFyQixJQUErQixDQUF0QztBQUNBLEVBZmE7QUFnQmQ2QyxLQWhCYyxnQkFnQlQ5QyxRQWhCUyxFQWdCQztBQUNkQSxhQUFXc0MsU0FBU0ksT0FBVCxDQUFpQjFDLFFBQWpCLENBQVg7QUFDQSxNQUFJQSxTQUFTQyxNQUFULEtBQWtCLENBQXRCLEVBQXlCLE1BQU0sSUFBSThDLEtBQUosQ0FBVSx5Q0FBVixDQUFOO0FBQ3pCLFNBQU8vQyxTQUFTLENBQVQsQ0FBUDtBQUNBLEVBcEJhO0FBcUJkMEMsUUFyQmMsbUJBcUJOMUMsUUFyQk0sRUFxQkk7QUFDakIsU0FBT2dELE1BQU1DLE9BQU4sSUFBaUJELE1BQU1DLE9BQU4sQ0FBY2pELFFBQWQsQ0FBakIsR0FBMkNBLFFBQTNDLEdBQXNEcUMsSUFBSWEsTUFBSixDQUFXbEQsUUFBWCxDQUE3RDtBQUNBO0FBdkJhLENBQWY7O0FBMkJBO0FBQ0EsSUFBSW1ELHlCQUFKOztBQUdBLFNBQVNDLGFBQVQsQ0FBdUJDLElBQXZCLEVBQTZCO0FBQzVCLFFBQU9DLGNBQWNYLElBQWQsQ0FBbUIsSUFBbkIsRUFBeUJVLElBQXpCLENBQVA7QUFDQTs7QUFHRCxJQUFJRSxNQUFNLEVBQVY7QUFDQSxLQUFLLElBQUkzQyxJQUFFMUQsU0FBUytDLE1BQXBCLEVBQTRCVyxHQUE1QixHQUFtQztBQUNsQzJDLEtBQUlyRyxTQUFTMEQsQ0FBVCxDQUFKLElBQW1Cd0MsY0FBY2xHLFNBQVMwRCxDQUFULENBQWQsQ0FBbkI7QUFDQTs7QUFFRCxTQUFTNEMsZUFBVCxDQUF5QkMsR0FBekIsRUFBOEJDLE1BQTlCLEVBQXNDO0FBQ3JDLE1BQUssSUFBSTlDLEtBQUU4QyxVQUFVLENBQXJCLEVBQXdCOUMsS0FBRTZDLElBQUl4RCxNQUE5QixFQUFzQ1csSUFBdEMsRUFBMkM7QUFDMUMsTUFBSStDLE1BQU1GLElBQUk3QyxFQUFKLENBQVY7QUFDQSxNQUFJb0MsTUFBTUMsT0FBTixDQUFjVSxHQUFkLENBQUosRUFBd0I7QUFDdkJILG1CQUFnQkcsR0FBaEI7QUFDQSxHQUZELE1BR0ssSUFBSUEsT0FBTyxRQUFPQSxHQUFQLHlDQUFPQSxHQUFQLE9BQWEsUUFBcEIsSUFBZ0MsQ0FBQ0MsZUFBZUQsR0FBZixDQUFqQyxLQUEwREEsSUFBSS9CLEtBQUosSUFBYStCLElBQUlOLElBQWxCLElBQTRCTSxJQUFJckUsVUFBSixJQUFrQnFFLElBQUl6RSxRQUFsRCxJQUErRHlFLElBQUkzRCxRQUE1SCxDQUFKLEVBQTJJO0FBQy9JeUQsT0FBSTdDLEVBQUosSUFBUzBDLGNBQWNLLElBQUlOLElBQUosSUFBWU0sSUFBSXpFLFFBQTlCLEVBQXdDeUUsSUFBSS9CLEtBQUosSUFBYStCLElBQUlyRSxVQUF6RCxFQUFxRXFFLElBQUkzRCxRQUF6RSxDQUFUO0FBQ0E7QUFDRDtBQUNEOztBQUVELFNBQVM2RCxvQkFBVCxDQUE4QjNCLENBQTlCLEVBQWlDO0FBQ2hDLFFBQU8sT0FBT0EsQ0FBUCxLQUFXLFVBQVgsSUFBeUIsRUFBRUEsRUFBRXZELFNBQUYsSUFBZXVELEVBQUV2RCxTQUFGLENBQVlqQixNQUE3QixDQUFoQztBQUNBOztBQUdEO0FBQ0EsU0FBU29HLHNCQUFULENBQWdDQyxnQkFBaEMsRUFBa0Q7QUFDakQsUUFBT0MsWUFBWTtBQUNsQkMsZUFBYUYsaUJBQWlCRSxXQUFqQixJQUFnQ0YsaUJBQWlCRyxJQUQ1QztBQUVsQnhHLFFBRmtCLG9CQUVUO0FBQ1IsVUFBT3FHLGlCQUFpQixLQUFLbkMsS0FBdEIsRUFBNkIsS0FBS0MsT0FBbEMsQ0FBUDtBQUNBO0FBSmlCLEVBQVosQ0FBUDtBQU1BOztBQUdELFNBQVNzQyxzQkFBVCxDQUFnQ0MsSUFBaEMsRUFBc0M7QUFDckMsS0FBSUMsVUFBVUQsS0FBSzdHLHFCQUFMLENBQWQ7QUFDQSxLQUFJOEcsT0FBSixFQUFhLE9BQU9BLFlBQVUsSUFBVixHQUFpQkQsSUFBakIsR0FBd0JDLE9BQS9COztBQUViQSxXQUFVUCx1QkFBdUJNLElBQXZCLENBQVY7O0FBRUFyRixRQUFPQyxjQUFQLENBQXNCcUYsT0FBdEIsRUFBK0I5RyxxQkFBL0IsRUFBc0QsRUFBRThCLGNBQWEsSUFBZixFQUFxQmlCLE9BQU0sSUFBM0IsRUFBdEQ7QUFDQStELFNBQVFKLFdBQVIsR0FBc0JHLEtBQUtILFdBQTNCO0FBQ0FJLFNBQVFDLFNBQVIsR0FBb0JGLEtBQUtFLFNBQXpCO0FBQ0FELFNBQVE1RCxZQUFSLEdBQXVCMkQsS0FBSzNELFlBQTVCOztBQUVBMUIsUUFBT0MsY0FBUCxDQUFzQm9GLElBQXRCLEVBQTRCN0cscUJBQTVCLEVBQW1ELEVBQUU4QixjQUFhLElBQWYsRUFBcUJpQixPQUFNK0QsT0FBM0IsRUFBbkQ7O0FBRUEsUUFBT0EsT0FBUDtBQUNBOztBQUdELFNBQVNmLGFBQVQsR0FBZ0M7QUFBQSxtQ0FBTmlCLElBQU07QUFBTkEsTUFBTTtBQUFBOztBQUMvQmYsaUJBQWdCZSxJQUFoQixFQUFzQixDQUF0QjtBQUNBLFFBQU9wRSxlQUFlLDJCQUFLb0UsSUFBTCxDQUFmLENBQVA7QUFDQTs7QUFHRCxTQUFTcEUsY0FBVCxDQUF3Qk4sS0FBeEIsRUFBK0I7QUFDOUJBLE9BQU1mLHNCQUFOLEdBQStCLElBQS9COztBQUVBMEYsZ0JBQWUzRSxLQUFmOztBQUVBLEtBQUlnRSxxQkFBcUJoRSxNQUFNWCxRQUEzQixDQUFKLEVBQTBDO0FBQ3pDVyxRQUFNWCxRQUFOLEdBQWlCaUYsdUJBQXVCdEUsTUFBTVgsUUFBN0IsQ0FBakI7QUFDQTs7QUFFRCxLQUFJdUYsTUFBTTVFLE1BQU1QLFVBQU4sQ0FBaUJtRixHQUEzQjtBQUFBLEtBQ0NwQixPQUFPb0IsZUFBY0EsR0FBZCx5Q0FBY0EsR0FBZCxFQURSO0FBRUEsS0FBSXRCLHFCQUFxQkUsU0FBTyxRQUFQLElBQW1CQSxTQUFPLFFBQS9DLENBQUosRUFBOEQ7QUFDN0R4RCxRQUFNUCxVQUFOLENBQWlCbUYsR0FBakIsR0FBdUJDLHFCQUFxQkQsR0FBckIsRUFBMEJ0QixnQkFBMUIsQ0FBdkI7QUFDQTs7QUFFRHdCLHlCQUF3QjlFLEtBQXhCOztBQUVBLFFBQU9BLEtBQVA7QUFDQTs7QUFHRCxTQUFTK0UsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JqRCxLQUEvQixFQUFtRDtBQUNsRCxLQUFJLENBQUNnQyxlQUFlaUIsT0FBZixDQUFMLEVBQThCLE9BQU9BLE9BQVA7QUFDOUIsS0FBSUMsZUFBZUQsUUFBUXZGLFVBQVIsSUFBc0J1RixRQUFRakQsS0FBakQ7QUFDQSxLQUFJbUQsT0FBTyxlQUNWRixRQUFRM0YsUUFBUixJQUFvQjJGLFFBQVF4QixJQURsQixFQUVWeUIsWUFGVSxFQUdWRCxRQUFRN0UsUUFBUixJQUFvQjhFLGdCQUFnQkEsYUFBYTlFLFFBSHZDLENBQVg7O0FBSGtELG9DQUFWQSxRQUFVO0FBQVZBLFVBQVU7QUFBQTs7QUFRbEQsUUFBT0csZUFBZSx1Q0FBbUI0RSxJQUFuQixFQUF5Qm5ELEtBQXpCLFNBQW1DNUIsUUFBbkMsRUFBZixDQUFQO0FBQ0E7O0FBR0QsU0FBUzRELGNBQVQsQ0FBd0JpQixPQUF4QixFQUFpQztBQUNoQyxRQUFPQSxZQUFhQSxtQkFBbUJuRyxLQUFwQixJQUE4Qm1HLFFBQVFqRyxRQUFSLEtBQW1CeEIsa0JBQTdELENBQVA7QUFDQTs7QUFHRCxTQUFTc0gsb0JBQVQsQ0FBOEJSLElBQTlCLEVBQW9DYyxTQUFwQyxFQUErQztBQUM5QyxRQUFPQSxVQUFVQyxXQUFWLENBQXNCZixJQUF0QixNQUFnQ2MsVUFBVUMsV0FBVixDQUFzQmYsSUFBdEIsSUFBOEIsb0JBQVk7QUFDaEYsTUFBSWMsYUFBYUEsVUFBVUUsSUFBM0IsRUFBaUM7QUFDaENGLGFBQVVFLElBQVYsQ0FBZWhCLElBQWYsSUFBdUJpQixRQUF2QjtBQUNBLE9BQUlBLGFBQVcsSUFBZixFQUFxQjtBQUNwQixXQUFPSCxVQUFVQyxXQUFWLENBQXNCZixJQUF0QixDQUFQO0FBQ0FjLGdCQUFZLElBQVo7QUFDQTtBQUNEO0FBQ0QsRUFSTSxDQUFQO0FBU0E7O0FBR0QsU0FBU0wsdUJBQVQsT0FBMkQ7QUFBQSxLQUF4QnpGLFFBQXdCLFFBQXhCQSxRQUF3QjtBQUFBLEtBQWRJLFVBQWMsUUFBZEEsVUFBYzs7QUFDMUQsS0FBSSxDQUFDQSxVQUFELElBQWUsT0FBT0osUUFBUCxLQUFrQixRQUFyQyxFQUErQztBQUMvQyxLQUFJMEMsUUFBUSxFQUFaO0FBQ0EsTUFBSyxJQUFJaEIsR0FBVCxJQUFjdEIsVUFBZCxFQUEwQjtBQUN6QnNDLFFBQU1oQixJQUFFSSxXQUFGLEVBQU4sSUFBeUJKLEdBQXpCO0FBQ0E7QUFDRCxLQUFJZ0IsTUFBTXdELGFBQVYsRUFBeUI7QUFDeEI5RixhQUFXK0YsVUFBWCxHQUF3Qi9GLFdBQVdzQyxNQUFNd0QsYUFBakIsQ0FBeEI7QUFDQSxTQUFPOUYsV0FBV3NDLE1BQU13RCxhQUFqQixDQUFQO0FBQ0E7QUFDRDtBQUNBLEtBQUl4RCxNQUFNMEQsUUFBTixLQUFtQnBHLGFBQVcsVUFBWCxJQUEwQkEsU0FBUzhCLFdBQVQsT0FBeUIsT0FBekIsSUFBb0MsQ0FBQyxnQkFBZ0JILElBQWhCLENBQXFCdkIsV0FBVytELElBQWhDLENBQWxGLENBQUosRUFBK0g7QUFDOUgsTUFBSWtDLGFBQWEzRCxNQUFNNEQsT0FBTixJQUFpQixTQUFsQztBQUNBLE1BQUksQ0FBQ2xHLFdBQVdpRyxVQUFYLENBQUwsRUFBNkI7QUFDNUJqRyxjQUFXaUcsVUFBWCxJQUF5QkUsVUFBVSxDQUFDbkcsV0FBV2lHLFVBQVgsQ0FBRCxFQUF5QmpHLFdBQVdzQyxNQUFNMEQsUUFBakIsQ0FBekIsQ0FBVixDQUF6QjtBQUNBLFVBQU9oRyxXQUFXc0MsTUFBTTBELFFBQWpCLENBQVA7QUFDQTtBQUNEO0FBQ0Q7O0FBR0QsU0FBU2QsY0FBVCxRQUF3QztBQUFBLEtBQWRsRixVQUFjLFNBQWRBLFVBQWM7O0FBQ3ZDLEtBQUksQ0FBQ0EsVUFBTCxFQUFpQjtBQUNqQixLQUFJb0csS0FBS3BHLFdBQVdxRyxTQUFYLElBQXdCckcsV0FBV3NHLEtBQTVDO0FBQ0EsS0FBSUYsRUFBSixFQUFRcEcsV0FBV3FHLFNBQVgsR0FBdUJELEVBQXZCO0FBQ1I7O0FBR0QsU0FBU2hGLE1BQVQsQ0FBZ0JnQixJQUFoQixFQUFzQkUsS0FBdEIsRUFBNkI7QUFDNUIsTUFBSyxJQUFJaUUsR0FBVCxJQUFnQmpFLEtBQWhCLEVBQXVCO0FBQ3RCLE1BQUlBLE1BQU1kLGNBQU4sQ0FBcUIrRSxHQUFyQixDQUFKLEVBQStCO0FBQzlCbkUsUUFBS21FLEdBQUwsSUFBWWpFLE1BQU1pRSxHQUFOLENBQVo7QUFDQTtBQUNEO0FBQ0QsUUFBT25FLElBQVA7QUFDQTs7QUFHRCxTQUFTb0UsY0FBVCxDQUF3QnRGLENBQXhCLEVBQTJCdUYsQ0FBM0IsRUFBOEI7QUFDN0IsTUFBSyxJQUFJbkYsR0FBVCxJQUFjSixDQUFkO0FBQWlCLE1BQUksRUFBRUksT0FBS21GLENBQVAsQ0FBSixFQUFlLE9BQU8sSUFBUDtBQUFoQyxFQUNBLEtBQUssSUFBSW5GLEdBQVQsSUFBY21GLENBQWQ7QUFBaUIsTUFBSXZGLEVBQUVJLEdBQUYsTUFBT21GLEVBQUVuRixHQUFGLENBQVgsRUFBaUIsT0FBTyxJQUFQO0FBQWxDLEVBQ0EsT0FBTyxLQUFQO0FBQ0E7O0FBR0QsU0FBU29GLFdBQVQsQ0FBcUJoQixTQUFyQixFQUFnQztBQUMvQixRQUFPQSxhQUFhQSxVQUFVdEQsSUFBdkIsSUFBK0JzRCxTQUF0QztBQUNBOztBQUdELFNBQVNpQixDQUFULEdBQVksQ0FBRTs7QUFFZCxTQUFTakMsV0FBVCxDQUFxQkwsR0FBckIsRUFBMEI7QUFDekIsVUFBUytCLEVBQVQsQ0FBWTlELEtBQVosRUFBbUJDLE9BQW5CLEVBQTRCO0FBQzNCcUUsVUFBUSxJQUFSO0FBQ0FDLFlBQVVDLElBQVYsQ0FBZSxJQUFmLEVBQXFCeEUsS0FBckIsRUFBNEJDLE9BQTVCLEVBQXFDekQsV0FBckM7QUFDQWlJLG1CQUFpQkQsSUFBakIsQ0FBc0IsSUFBdEIsRUFBNEJ4RSxLQUE1QixFQUFtQ0MsT0FBbkM7QUFDQTs7QUFFRDhCLE9BQU1qRCxPQUFPLEVBQUVqRCxhQUFhaUksRUFBZixFQUFQLEVBQTRCL0IsR0FBNUIsQ0FBTjs7QUFFQTtBQUNBLEtBQUlBLElBQUkyQyxNQUFSLEVBQWdCO0FBQ2ZDLGNBQVk1QyxHQUFaLEVBQWlCNkMsY0FBYzdDLElBQUkyQyxNQUFsQixDQUFqQjtBQUNBO0FBQ0QsS0FBSTNDLElBQUk4QyxPQUFSLEVBQWlCO0FBQ2hCL0YsU0FBT2dGLEVBQVAsRUFBVy9CLElBQUk4QyxPQUFmO0FBQ0E7QUFDRCxLQUFJOUMsSUFBSVcsU0FBUixFQUFtQjtBQUNsQm9CLEtBQUdwQixTQUFILEdBQWVYLElBQUlXLFNBQW5CO0FBQ0E7QUFDRCxLQUFJWCxJQUFJbEQsWUFBUixFQUFzQjtBQUNyQmlGLEtBQUdqRixZQUFILEdBQWtCa0QsSUFBSWxELFlBQXRCO0FBQ0E7QUFDRCxLQUFJa0QsSUFBSStDLGVBQVIsRUFBeUI7QUFDeEJoQixLQUFHakYsWUFBSCxHQUFrQmtELElBQUkrQyxlQUFKLEVBQWxCO0FBQ0E7O0FBRURULEdBQUV0SCxTQUFGLEdBQWN3SCxVQUFVeEgsU0FBeEI7QUFDQStHLElBQUcvRyxTQUFILEdBQWUrQixPQUFPLElBQUl1RixDQUFKLEVBQVAsRUFBZ0J0QyxHQUFoQixDQUFmOztBQUVBK0IsSUFBR3pCLFdBQUgsR0FBaUJOLElBQUlNLFdBQUosSUFBbUIsV0FBcEM7O0FBRUEsUUFBT3lCLEVBQVA7QUFDQTs7QUFHRDtBQUNBLFNBQVNjLGFBQVQsQ0FBdUJGLE1BQXZCLEVBQStCO0FBQzlCLEtBQUlLLFFBQVEsRUFBWjtBQUNBLE1BQUssSUFBSS9GLE1BQUUsQ0FBWCxFQUFjQSxNQUFFMEYsT0FBT3JHLE1BQXZCLEVBQStCVyxLQUEvQixFQUFvQztBQUNuQyxNQUFJZ0csUUFBUU4sT0FBTzFGLEdBQVAsQ0FBWjtBQUNBLE9BQUssSUFBSWlGLEdBQVQsSUFBZ0JlLEtBQWhCLEVBQXVCO0FBQ3RCLE9BQUlBLE1BQU05RixjQUFOLENBQXFCK0UsR0FBckIsS0FBNkIsT0FBT2UsTUFBTWYsR0FBTixDQUFQLEtBQW9CLFVBQXJELEVBQWlFO0FBQ2hFLEtBQUNjLE1BQU1kLEdBQU4sTUFBZWMsTUFBTWQsR0FBTixJQUFXLEVBQTFCLENBQUQsRUFBZ0NnQixJQUFoQyxDQUFxQ0QsTUFBTWYsR0FBTixDQUFyQztBQUNBO0FBQ0Q7QUFDRDtBQUNELFFBQU9jLEtBQVA7QUFDQTs7QUFHRDtBQUNBLFNBQVNKLFdBQVQsQ0FBcUJPLEtBQXJCLEVBQTRCUixNQUE1QixFQUFvQztBQUNuQyxNQUFLLElBQUlULEdBQVQsSUFBZ0JTLE1BQWhCO0FBQXdCLE1BQUlBLE9BQU94RixjQUFQLENBQXNCK0UsR0FBdEIsQ0FBSixFQUFnQztBQUN2RGlCLFNBQU1qQixHQUFOLElBQWFKLFVBQ1phLE9BQU9ULEdBQVAsRUFBWTNDLE1BQVosQ0FBbUI0RCxNQUFNakIsR0FBTixLQUFjeEQsR0FBakMsQ0FEWSxFQUVad0QsUUFBTSxpQkFBTixJQUEyQkEsUUFBTSxpQkFBakMsSUFBc0RBLFFBQU0saUJBRmhELENBQWI7QUFJQTtBQUxEO0FBTUE7O0FBR0QsU0FBU0ssT0FBVCxDQUFpQnpELEdBQWpCLEVBQXNCO0FBQ3JCLE1BQUssSUFBSTdCLEdBQVQsSUFBYzZCLEdBQWQsRUFBbUI7QUFDbEIsTUFBSXJELElBQUlxRCxJQUFJN0IsR0FBSixDQUFSO0FBQ0EsTUFBSSxPQUFPeEIsQ0FBUCxLQUFXLFVBQVgsSUFBeUIsQ0FBQ0EsRUFBRTJILE9BQTVCLElBQXVDLENBQUN2SixtQkFBbUJzRCxjQUFuQixDQUFrQ0YsR0FBbEMsQ0FBNUMsRUFBa0Y7QUFDakYsSUFBQzZCLElBQUk3QixHQUFKLElBQVN4QixFQUFFdUQsSUFBRixDQUFPRixHQUFQLENBQVYsRUFBdUJzRSxPQUF2QixHQUFpQyxJQUFqQztBQUNBO0FBQ0Q7QUFDRDs7QUFHRCxTQUFTQyxVQUFULENBQW9CdkUsR0FBcEIsRUFBeUJ3RSxDQUF6QixFQUE0QjFDLElBQTVCLEVBQWtDO0FBQ2pDLEtBQUksT0FBTzBDLENBQVAsS0FBVyxRQUFmLEVBQXlCO0FBQ3hCQSxNQUFJeEUsSUFBSWhGLFdBQUosQ0FBZ0JrQixTQUFoQixDQUEwQnNJLENBQTFCLENBQUo7QUFDQTtBQUNELEtBQUksT0FBT0EsQ0FBUCxLQUFXLFVBQWYsRUFBMkI7QUFDMUIsU0FBT0EsRUFBRUMsS0FBRixDQUFRekUsR0FBUixFQUFhOEIsSUFBYixDQUFQO0FBQ0E7QUFDRDs7QUFFRCxTQUFTa0IsU0FBVCxDQUFtQjBCLEtBQW5CLEVBQTBCQyxjQUExQixFQUEwQztBQUN6QyxRQUFPLFlBQVc7QUFDakIsTUFBSUMsWUFBSjtBQUNBLE9BQUssSUFBSXpHLE1BQUUsQ0FBWCxFQUFjQSxNQUFFdUcsTUFBTWxILE1BQXRCLEVBQThCVyxLQUE5QixFQUFtQztBQUNsQyxPQUFJMEcsSUFBSU4sV0FBVyxJQUFYLEVBQWlCRyxNQUFNdkcsR0FBTixDQUFqQixFQUEyQjJHLFNBQTNCLENBQVI7O0FBRUEsT0FBSUgsa0JBQWtCRSxLQUFHLElBQXpCLEVBQStCO0FBQzlCLFFBQUksQ0FBQ0QsR0FBTCxFQUFVQSxNQUFNLEVBQU47QUFDVixTQUFLLElBQUl4QixHQUFULElBQWdCeUIsQ0FBaEI7QUFBbUIsU0FBSUEsRUFBRXhHLGNBQUYsQ0FBaUIrRSxHQUFqQixDQUFKLEVBQTJCO0FBQzdDd0IsVUFBSXhCLEdBQUosSUFBV3lCLEVBQUV6QixHQUFGLENBQVg7QUFDQTtBQUZEO0FBR0EsSUFMRCxNQU1LLElBQUksT0FBT3lCLENBQVAsS0FBVyxXQUFmLEVBQTRCRCxNQUFNQyxDQUFOO0FBQ2pDO0FBQ0QsU0FBT0QsR0FBUDtBQUNBLEVBZEQ7QUFlQTs7QUFHRCxTQUFTaEIsZ0JBQVQsQ0FBMEJ6RSxLQUExQixFQUFpQ0MsT0FBakMsRUFBMEM7QUFDekMyRixXQUFVcEIsSUFBVixDQUFlLElBQWYsRUFBcUJ4RSxLQUFyQixFQUE0QkMsT0FBNUI7QUFDQSxNQUFLakUseUJBQUwsR0FBaUM2SCxVQUFVLENBQUMrQixTQUFELEVBQVksS0FBSzVKLHlCQUFMLElBQWtDLDJCQUE5QyxDQUFWLENBQWpDO0FBQ0EsTUFBS0YsTUFBTCxHQUFjK0gsVUFBVSxDQUFDK0IsU0FBRCxFQUFZQyxZQUFaLEVBQTBCLEtBQUsvSixNQUFMLElBQWUsUUFBekMsRUFBbURnSyxXQUFuRCxDQUFWLENBQWQ7QUFDQTs7QUFHRCxTQUFTRixTQUFULENBQW1CNUYsS0FBbkIsRUFBMEJDLE9BQTFCLEVBQW1DO0FBQ2xDLEtBQUksQ0FBQ0QsS0FBTCxFQUFZOztBQUVaO0FBQ0EsS0FBSU0sSUFBSU4sTUFBTTVCLFFBQWQ7QUFDQSxLQUFJa0MsS0FBS2MsTUFBTUMsT0FBTixDQUFjZixDQUFkLENBQUwsSUFBeUJBLEVBQUVqQyxNQUFGLEtBQVcsQ0FBeEMsRUFBMkM7QUFDMUMyQixRQUFNNUIsUUFBTixHQUFpQmtDLEVBQUUsQ0FBRixDQUFqQjs7QUFFQTtBQUNBLE1BQUlOLE1BQU01QixRQUFOLElBQWtCLFFBQU80QixNQUFNNUIsUUFBYixNQUF3QixRQUE5QyxFQUF3RDtBQUN2RDRCLFNBQU01QixRQUFOLENBQWVDLE1BQWYsR0FBd0IsQ0FBeEI7QUFDQTJCLFNBQU01QixRQUFOLENBQWUsQ0FBZixJQUFvQjRCLE1BQU01QixRQUExQjtBQUNBO0FBQ0Q7O0FBRUQ7QUFDQSxLQUFJM0IsR0FBSixFQUFTO0FBQ1IsTUFBSXNKLE9BQU8sT0FBTyxJQUFQLEtBQWMsVUFBZCxHQUEyQixJQUEzQixHQUFrQyxLQUFLbEssV0FBbEQ7QUFBQSxNQUNDNkcsWUFBWSxLQUFLQSxTQUFMLElBQWtCcUQsS0FBS3JELFNBRHBDO0FBRUEsTUFBSUEsU0FBSixFQUFlO0FBQ2QsUUFBSyxJQUFJc0QsSUFBVCxJQUFpQnRELFNBQWpCLEVBQTRCO0FBQzNCLFFBQUlBLFVBQVV4RCxjQUFWLENBQXlCOEcsSUFBekIsS0FBa0MsT0FBT3RELFVBQVVzRCxJQUFWLENBQVAsS0FBeUIsVUFBL0QsRUFBMkU7QUFDMUUsU0FBTTNELGNBQWMsS0FBS0EsV0FBTCxJQUFvQjBELEtBQUt6RCxJQUE3QztBQUNBLFNBQUkyRCxNQUFNdkQsVUFBVXNELElBQVYsRUFBZ0JoRyxLQUFoQixFQUF1QmdHLElBQXZCLEVBQTZCM0QsV0FBN0IsRUFBMEMsTUFBMUMsQ0FBVjtBQUNBLFNBQUk0RCxHQUFKLEVBQVNDLFFBQVFDLEtBQVIsQ0FBYyxJQUFJaEYsS0FBSixDQUFVOEUsSUFBSUcsT0FBSixJQUFlSCxHQUF6QixDQUFkO0FBQ1Q7QUFDRDtBQUNEO0FBQ0Q7QUFDRDs7QUFHRCxTQUFTSixZQUFULENBQXNCN0YsS0FBdEIsRUFBNkI7QUFDNUJ1QixvQkFBbUIsSUFBbkI7QUFDQTs7QUFFRCxTQUFTdUUsV0FBVCxHQUF1QjtBQUN0QixLQUFJdkUscUJBQW1CLElBQXZCLEVBQTZCO0FBQzVCQSxxQkFBbUIsSUFBbkI7QUFDQTtBQUNEOztBQUlELFNBQVNnRCxTQUFULENBQW1CdkUsS0FBbkIsRUFBMEJDLE9BQTFCLEVBQW1Db0csSUFBbkMsRUFBeUM7QUFDeEMsbUJBQWdCN0IsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkJ4RSxLQUEzQixFQUFrQ0MsT0FBbEM7QUFDQSxNQUFLcUcsS0FBTCxHQUFhLEtBQUtDLGVBQUwsR0FBdUIsS0FBS0EsZUFBTCxFQUF2QixHQUFnRCxFQUE3RDtBQUNBLE1BQUtqRCxJQUFMLEdBQVksRUFBWjtBQUNBLE1BQUtELFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxLQUFJZ0QsU0FBTzdKLFdBQVgsRUFBd0I7QUFDdkJpSSxtQkFBaUJELElBQWpCLENBQXNCLElBQXRCLEVBQTRCeEUsS0FBNUIsRUFBbUNDLE9BQW5DO0FBQ0E7QUFDRDtBQUNEbkIsT0FBT3lGLFVBQVV4SCxTQUFWLEdBQXNCLHVCQUE3QixFQUFvRDtBQUNuRGxCLGNBQWEwSSxTQURzQzs7QUFHbkRpQyxtQkFBa0IsRUFIaUM7O0FBS25EQyxhQUxtRCx3QkFLdENILEtBTHNDLEVBSy9CaEgsUUFMK0IsRUFLckI7QUFDN0IsT0FBS29ILFFBQUwsQ0FBY0osS0FBZCxFQUFxQmhILFFBQXJCO0FBQ0EsT0FBSyxJQUFJTixHQUFULElBQWMsS0FBS3NILEtBQW5CLEVBQTBCO0FBQ3pCLE9BQUksRUFBRXRILE9BQUtzSCxLQUFQLENBQUosRUFBbUI7QUFDbEIsV0FBTyxLQUFLQSxLQUFMLENBQVd0SCxHQUFYLENBQVA7QUFDQTtBQUNEO0FBQ0QsRUFaa0Q7QUFjbkQySCxXQWRtRCx3QkFjdEM7QUFDWixTQUFPLEtBQUs3RyxJQUFaO0FBQ0EsRUFoQmtEO0FBa0JuRDhHLFVBbEJtRCx1QkFrQnZDO0FBQ1gsU0FBTyxDQUFDLENBQUMsS0FBSzlHLElBQWQ7QUFDQTtBQXBCa0QsQ0FBcEQ7O0FBeUJBLFNBQVMrRyxhQUFULENBQXVCN0csS0FBdkIsRUFBOEJDLE9BQTlCLEVBQXVDO0FBQ3RDc0UsV0FBVUMsSUFBVixDQUFlLElBQWYsRUFBcUJ4RSxLQUFyQixFQUE0QkMsT0FBNUI7QUFDQTtBQUNEb0UsRUFBRXRILFNBQUYsR0FBY3dILFVBQVV4SCxTQUF4QjtBQUNBOEosY0FBYzlKLFNBQWQsR0FBMEIsSUFBSXNILENBQUosRUFBMUI7QUFDQXdDLGNBQWM5SixTQUFkLENBQXdCaEIscUJBQXhCLEdBQWdELFVBQVNpRSxLQUFULEVBQWdCc0csS0FBaEIsRUFBdUI7QUFDdEUsUUFBT3BDLGVBQWUsS0FBS2xFLEtBQXBCLEVBQTJCQSxLQUEzQixLQUFxQ2tFLGVBQWUsS0FBS29DLEtBQXBCLEVBQTJCQSxLQUEzQixDQUE1QztBQUNBLENBRkQ7O1FBT0NqTCxPLEdBQUFBLE87UUFDQXNHLEcsR0FBQUEsRztRQUNBbUYsUztRQUNBcEcsUSxHQUFBQSxRO1FBQ0E1RSxNLEdBQUFBLE07UUFDQXNHLFcsR0FBQUEsVztRQUNBWixhLEdBQUFBLGE7UUFDQUUsYSxHQUFBQSxhO1FBQ0FzQixZLEdBQUFBLFk7UUFDQWhCLGMsR0FBQUEsYztRQUNBb0MsVyxHQUFBQSxXO1FBQ0E3RCxzQixHQUFBQSxzQjtRQUNBZ0UsUyxHQUFBQSxTO1FBQ0FzQyxhLEdBQUFBLGE7UUFDOEJFLG1DLEdBQTlCN0csMEI7a0JBR2M7QUFDZDdFLGlCQURjO0FBRWRzRyxTQUZjO0FBR2RtRiwrQkFIYztBQUlkcEcsbUJBSmM7QUFLZDVFLGVBTGM7QUFNZHNHLHlCQU5jO0FBT2RaLDZCQVBjO0FBUWRFLDZCQVJjO0FBU2RzQiwyQkFUYztBQVVkaEIsK0JBVmM7QUFXZG9DLHlCQVhjO0FBWWQ3RCwrQ0FaYztBQWFkZ0UscUJBYmM7QUFjZHNDLDZCQWRjO0FBZWRFLHNDQUFxQzdHO0FBZnZCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbGxCZjtJQWdCSSw0QkFBbUIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7UUFmdkIsY0FBUyxHQUFXLElBQUksQ0FBQztRQUN6QixpQkFBWSxHQUFlLElBQUksQ0FBQztRQUNoQyxnQkFBVyxHQUFxQixJQUFJLENBQUM7UUFDdEMsY0FBUyxHQUFXLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFXLElBQUksQ0FBQztRQUMvQixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUM3QixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUM3QixpQkFBWSxHQUFRLElBQUksQ0FBQztRQUN6QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsMEJBQXFCLEdBQVcsSUFBSSxDQUFDO1FBQ3JDLGVBQVUsR0FBc0IsSUFBSSxDQUFDO0lBSTVDLENBQUM7SUFDRCxzQkFBVyxvQ0FBSTthQUFmLGNBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNoRixVQUFnQixLQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FEc0I7SUFFaEYsc0JBQVcsZ0RBQWdCO2FBQTNCLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ2hGLDJDQUFjLEdBQXJCLFVBQXNCLEtBQVU7UUFDNUIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNNLHFDQUFRLEdBQWYsVUFBZ0IsR0FBUTtRQUNwQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsRUFBRSxFQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNNLDZDQUFnQixHQUF2QixVQUF3QixHQUFRO1FBQzVCLEVBQUUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELHNCQUFXLGdEQUFnQjthQUEzQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNoRixxQ0FBUSxHQUFmLFVBQWdCLEdBQVEsRUFBRSxLQUFVLEVBQUUsUUFBb0I7UUFDdEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLEVBQUUsRUFBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSTtnQkFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUNNLHVDQUFVLEdBQWpCLFVBQWtCLE9BQWU7UUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDTSx5Q0FBWSxHQUFuQixVQUFvQixTQUFpQjtRQUNqQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxSCxDQUFDO0lBQ0Qsc0JBQVcsdUNBQU87YUFBbEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN4RCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQzs7O09BQUE7SUFDTSx1Q0FBVSxHQUFqQixVQUFrQixLQUFpQixFQUFFLFNBQTJCO1FBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFDTCx5QkFBQztBQUFELENBQUM7O0FBQ0Q7SUFLSSwyQkFBbUIsSUFBWSxFQUFFLFVBQXNCLEVBQVMsT0FBeUIsRUFBUyxVQUF5QjtRQUEzRCx3Q0FBeUI7UUFBUyw4Q0FBeUI7UUFBeEcsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFpQyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUFTLGVBQVUsR0FBVixVQUFVLENBQWU7UUFGM0gsZUFBVSxHQUE4QixJQUFJLENBQUM7UUFDN0MsdUJBQWtCLEdBQWtCLElBQUksQ0FBQztRQUVyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDTSxnQ0FBSSxHQUFYLFVBQVksSUFBWTtRQUNwQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTSwwQ0FBYyxHQUFyQixVQUFzQixRQUFhO1FBQy9CLElBQUksWUFBWSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMzRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLFlBQVksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRCxZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQzdCLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDOUIsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDekMsQ0FBQztZQUNELEVBQUUsRUFBQyxRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLElBQUksV0FBVyxHQUFHLE9BQU8sUUFBUSxDQUFDLE9BQU8sS0FBSyxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ25GLElBQUksWUFBWSxHQUFHLE9BQU8sUUFBUSxDQUFDLE9BQU8sS0FBSyxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzFDLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzFDLENBQUM7WUFDRCxFQUFFLEVBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDNUQsSUFBSSxDQUFTLENBQUM7Z0JBQ2QsRUFBRSxFQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixDQUFDO1lBQ0wsQ0FBQztZQUNELEVBQUUsRUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ2hELENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ2hELENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ2hELENBQUM7WUFDRCxFQUFFLEVBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUNwRCxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNPLDJDQUFlLEdBQXZCLFVBQXdCLFlBQW9CO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7WUFBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3pHLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFDTyxnREFBb0IsR0FBNUIsVUFBNkIsWUFBb0I7UUFDN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTCx3QkFBQztBQUFELENBQUM7O0FBOUZVLGdDQUFjLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLDRCQUFVLEdBQUcsR0FBRyxDQUFDO0FBOEY1QjtJQUFBO1FBQ1ksWUFBTyxHQUFpQyxFQUFFLENBQUM7UUFDM0Msb0JBQWUsR0FBd0MsRUFBRSxDQUFDO1FBQzFELG9CQUFlLEdBQXlDLEVBQUUsQ0FBQztRQUMzRCw0QkFBdUIsR0FBNkIsRUFBRSxDQUFDO0lBNkluRSxDQUFDO0lBNUlVLCtCQUFRLEdBQWYsVUFBZ0IsSUFBWSxFQUFFLFVBQXNCLEVBQUUsT0FBeUIsRUFBRSxVQUF5QjtRQUFwRCx3Q0FBeUI7UUFBRSw4Q0FBeUI7UUFDdEcsSUFBSSxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUNuQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUMsQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFDTSw0Q0FBcUIsR0FBNUIsVUFBNkIsSUFBWSxFQUFFLE9BQWtCO1FBQ3pELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixhQUFhLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUNNLG9DQUFhLEdBQXBCLFVBQXFCLFNBQWlCO1FBQ2xDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2QsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDTSxtQ0FBWSxHQUFuQixVQUFvQixTQUFpQixFQUFFLFlBQW9CO1FBQ3ZELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3pDLEVBQUUsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQztnQkFBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTSxrQ0FBVyxHQUFsQixVQUFtQixJQUFZO1FBQzNCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNNLHlDQUFrQixHQUF6QixVQUEwQixJQUFZLEVBQUUsWUFBNkI7UUFBN0IsbURBQTZCO1FBQ2pFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDTSw0Q0FBcUIsR0FBNUIsVUFBNkIsSUFBWTtRQUNyQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2QsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3BELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDTSxrQ0FBVyxHQUFsQixVQUFtQixTQUFpQixFQUFFLFlBQWlCO1FBQ25ELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFDTSxxQ0FBYyxHQUFyQixVQUFzQixTQUFpQixFQUFFLFlBQW9CO1FBQ3pELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBQ08seUNBQWtCLEdBQTFCLFVBQTJCLGFBQWdDLEVBQUUsUUFBNEI7UUFDckYsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3RELGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDTyw4Q0FBdUIsR0FBL0IsVUFBZ0MsYUFBZ0MsRUFBRSxRQUE0QjtRQUMxRixJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3RCLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEtBQUssR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixhQUFhLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDTywrQ0FBd0IsR0FBaEMsVUFBaUMsYUFBZ0M7UUFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3RELENBQUM7SUFDTCxDQUFDO0lBQ08sMENBQW1CLEdBQTNCLFVBQTRCLElBQVksRUFBRSxZQUFxQixFQUFFLE1BQWdDO1FBQzdGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDdEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0wsQ0FBQztJQUNNLGdDQUFTLEdBQWhCLFVBQWlCLElBQVk7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNPLHFDQUFjLEdBQXRCLFVBQXVCLElBQVksRUFBRSxJQUErQjtRQUNoRSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDTCxDQUFDO0lBQ08sc0NBQWUsR0FBdkIsVUFBd0IsUUFBNEIsRUFBRSxJQUErQixFQUFFLFFBQWdCO1FBQ25HLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLEtBQUssQ0FBQztZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDO0lBQ08sNkNBQXNCLEdBQTlCLFVBQStCLElBQVksRUFBRSxJQUFtQjtRQUM1RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNMLENBQUM7SUFDTCxtQkFBQztBQUFELENBQUM7O0FBQ0Q7SUFHSSxtQkFBbUIsSUFBWSxFQUFTLE9BQWU7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFGaEQsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsT0FBRSxHQUFXLENBQUMsQ0FBQyxDQUFDO0lBRXZCLENBQUM7SUFDTSxzQ0FBa0IsR0FBekI7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNMLGdCQUFDO0FBQUQsQ0FBQzs7QUFDRDtJQUE4QywyRkFBUztJQUNuRCxrQ0FBbUIsWUFBb0IsRUFBUyxTQUFpQjtRQUFqRSxZQUNJLGtCQUFNLGlCQUFpQixFQUFFLGdCQUFnQixHQUFHLFlBQVksR0FBRyxjQUFjLEdBQUcsU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQVUzRztRQVhrQixrQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFTLGVBQVMsR0FBVCxTQUFTLENBQVE7UUFFN0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNiLEtBQUksQ0FBQyxXQUFXLEdBQUcsd0NBQXdDLENBQUM7WUFDNUQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUMsS0FBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7Z0JBQ3BDLEtBQUksQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMzQyxDQUFDO1lBQ0QsS0FBSSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUM7UUFDNUIsQ0FBQzs7SUFDTCxDQUFDO0lBQ0wsK0JBQUM7QUFBRCxDQUFDLENBYjZDLFNBQVMsR0FhdEQ7O0FBQ0Q7SUFBOEMsMkZBQVM7SUFDbkQsa0NBQW1CLGFBQXFCLEVBQVMsSUFBWSxFQUFTLE9BQWU7UUFBckYsWUFDSSxrQkFBTSxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBUXZCO1FBVGtCLG1CQUFhLEdBQWIsYUFBYSxDQUFRO1FBQVMsVUFBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGFBQU8sR0FBUCxPQUFPLENBQVE7UUFFakYsS0FBSSxDQUFDLFdBQVcsR0FBRyxxQ0FBcUMsQ0FBQztRQUN6RCxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUFDLEtBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO1lBQ3BDLEtBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2xELENBQUM7UUFDRCxLQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQzs7SUFDNUIsQ0FBQztJQUNMLCtCQUFDO0FBQUQsQ0FBQyxDQVg2QyxTQUFTLEdBV3REOztBQUNEO0lBQTBDLHVGQUF3QjtJQUM5RCw4QkFBbUIsWUFBb0IsRUFBUyxhQUFxQjtRQUFyRSxZQUNJLGtCQUFNLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSwrRUFBK0UsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQ3JKO1FBRmtCLGtCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVMsbUJBQWEsR0FBYixhQUFhLENBQVE7O0lBRXJFLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUMsQ0FKeUMsd0JBQXdCLEdBSWpFOztBQUNEO0lBQTRDLHlGQUF3QjtJQUNoRSxnQ0FBbUIsWUFBb0IsRUFBUyxhQUFxQjtRQUFyRSxZQUNJLGtCQUFNLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxpRkFBaUYsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQ3pKO1FBRmtCLGtCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVMsbUJBQWEsR0FBYixhQUFhLENBQVE7O0lBRXJFLENBQUM7SUFDTCw2QkFBQztBQUFELENBQUMsQ0FKMkMsd0JBQXdCLEdBSW5FOztBQUNEO0lBQStDLDRGQUFTO0lBQ3BELG1DQUFtQixZQUFvQixFQUFTLFNBQWlCO1FBQWpFLFlBQ0ksa0JBQU0sa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLDBCQUEwQixHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FDN0c7UUFGa0Isa0JBQVksR0FBWixZQUFZLENBQVE7UUFBUyxlQUFTLEdBQVQsU0FBUyxDQUFROztJQUVqRSxDQUFDO0lBQ0wsZ0NBQUM7QUFBRCxDQUFDLENBSjhDLFNBQVMsR0FJdkQ7O0FBRUQ7SUFBQTtRQUtXLFdBQU0sR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO0lBMkkzQyxDQUFDO0lBNUlHLHNCQUFrQixzQkFBUTthQUExQixjQUErQixNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBRTFELGlDQUFZLEdBQW5CLFVBQW9CLEdBQVE7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNNLDZCQUFRLEdBQWYsVUFBZ0IsT0FBWSxFQUFFLEdBQVE7UUFDbEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN4QixHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ2pELEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixRQUFRLENBQUM7WUFDYixDQUFDO1lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZGLFFBQVEsQ0FBQztZQUNiLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDTCxDQUFDO0lBQ1MscUNBQWdCLEdBQTFCLFVBQTJCLEdBQVEsRUFBRSxRQUE0QjtRQUM3RCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzdCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNTLGdDQUFXLEdBQXJCLFVBQXNCLEdBQVEsRUFBRSxNQUFXLEVBQUUsUUFBNEI7UUFDckUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDbEQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMzQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNsRCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQztJQUNTLCtCQUFVLEdBQXBCLFVBQXFCLEtBQVUsRUFBRSxHQUFRLEVBQUUsR0FBUSxFQUFFLFFBQTRCO1FBQzdFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDMUIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ2hELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUM7UUFDWCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDO1FBQ1gsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMxQixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUNPLGlDQUFZLEdBQXBCLFVBQXFCLEtBQVUsSUFBYSxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLGlDQUFZLEdBQXBCLFVBQXFCLEtBQVUsRUFBRSxRQUE0QjtRQUN6RCxJQUFJLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ25DLENBQUM7UUFDRCxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDTywyQ0FBc0IsR0FBOUIsVUFBK0IsTUFBVyxFQUFFLEtBQVUsRUFBRSxRQUE0QixFQUFFLFNBQWlCO1FBQ25HLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxrQkFBa0IsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlFLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDckIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDakQsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLEtBQUssR0FBRyxJQUFJLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUN4RSxLQUFLLENBQUM7b0JBQ1YsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzVFLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ0osS0FBSyxHQUFHLElBQUksc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ08sZ0NBQVcsR0FBbkIsVUFBb0IsS0FBZ0IsRUFBRSxPQUFZO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RELEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNPLGlDQUFZLEdBQXBCLFVBQXFCLEtBQWlCLEVBQUUsR0FBUSxFQUFFLEdBQVEsRUFBRSxRQUE0QjtRQUNwRixFQUFFLEVBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNsQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ08saUNBQVksR0FBcEIsVUFBcUIsVUFBcUMsRUFBRSxHQUFRO1FBQ2hFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNyRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0wsaUJBQUM7QUFBRCxDQUFDOztBQS9Ja0IsMkJBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQzFCLCtCQUFvQixHQUFHLEtBQUssQ0FBQztBQUM3Qix3QkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Ozs7Ozs7Ozs7OztBQ3RTdEQ7QUFBQTtJQUFBO0lBbUJBLENBQUM7SUFsQlUsc0JBQU8sR0FBZDtRQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ1MsK0JBQWdCLEdBQTFCLFVBQTJCLENBQU0sRUFBRSxDQUFNO1FBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbkUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDbkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3pELENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbEUsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNMLFdBQUM7QUFBRCxDQUFDOztBQUNEO0lBQUE7SUFJQSxDQUFDO0lBSFUsNkJBQU8sR0FBZDtRQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0wsa0JBQUM7QUFBRCxDQUFDOztBQUVNLElBQUksWUFBb0IsQ0FBQztBQUNoQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQ3pCO0lBQUE7SUF5QkEsQ0FBQztJQXhCaUIsZ0NBQWtCLEdBQWhDLFVBQWlDLFNBQWlCO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNhLG9DQUFzQixHQUFwQyxVQUFxQyxRQUFhO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQztnQkFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDYSwwQkFBWSxHQUExQixVQUEyQixTQUFpQjtRQUN4QyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0wsb0JBQUM7QUFBRCxDQUFDOztBQUVEO0lBQUE7SUF1QkEsQ0FBQztJQXJCRyxzQkFBVywwQkFBTzthQUFsQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDdkYsb0JBQUksR0FBWCxVQUFZLE1BQVcsRUFBRSxPQUFnQjtRQUNyQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNuQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDOUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFeEQsQ0FBQztJQUNMLENBQUM7SUFDTSxtQkFBRyxHQUFWLFVBQVcsSUFBTztRQUNkLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFLLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDTSxzQkFBTSxHQUFiLFVBQWMsSUFBTztRQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDO0lBQ0wsWUFBQztBQUFELENBQUM7Ozs7Ozs7Ozs7OztBQzVJa0Q7QUFFbkQsNkNBQTZDO0FBQzdDO0lBQUE7UUFhWSxnQkFBVyxHQUE4QyxFQUFFLENBQUM7SUFvQnhFLENBQUM7SUEvQkcsc0JBQWtCLGlDQUFjO2FBQWhDO1lBQ0ksTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLEdBQUcsMEVBQWtCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUMzTCxDQUFDOzs7T0FBQTtJQUNELHNCQUFrQixnQ0FBYTthQUEvQjtZQUNJLElBQUksT0FBTyxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbEUsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN6RCxDQUFDOzs7T0FBQTtJQUNELHNCQUFrQiw4QkFBVzthQUE3QjtZQUNJLElBQUksT0FBTyxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDL0QsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQzs7O09BQUE7SUFHTSwwQ0FBZ0IsR0FBdkIsVUFBd0IsWUFBb0IsRUFBRSxlQUErQztRQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUNyRCxDQUFDO0lBQ00sK0JBQUssR0FBWjtRQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDTSxxQ0FBVyxHQUFsQjtRQUNJLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDakMsR0FBRyxFQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNNLHdDQUFjLEdBQXJCLFVBQXNCLFlBQW9CLEVBQUUsSUFBWTtRQUNwRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FBQzs7QUFoQ2lCLHdCQUFRLEdBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7QUFrQ3BFO0lBQUE7UUFFWSxnQkFBVyxHQUEwQyxFQUFFLENBQUM7SUFvQnBFLENBQUM7SUFsQlUsd0NBQWUsR0FBdEIsVUFBdUIsV0FBbUIsRUFBRSxjQUEwQztRQUNsRixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztJQUNuRCxDQUFDO0lBQ00sOEJBQUssR0FBWjtRQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDTSxvQ0FBVyxHQUFsQjtRQUNJLElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEQsR0FBRyxFQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNNLHNDQUFhLEdBQXBCLFVBQXFCLFdBQW1CLEVBQUUsSUFBWTtRQUNsRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNMLHFCQUFDO0FBQUQsQ0FBQzs7QUFyQmlCLHVCQUFRLEdBQW1CLElBQUksY0FBYyxFQUFFLENBQUM7Ozs7Ozs7O0FDdENsRTtBQUFBO0lBQUE7UUFFWSxnQkFBVyxHQUE2QyxFQUFFLENBQUM7SUFpQnZFLENBQUM7SUFmVSwrQ0FBZ0IsR0FBdkIsVUFBd0IsWUFBb0IsRUFBRSxlQUE4QztRQUN4RixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUNyRCxDQUFDO0lBQ00sMENBQVcsR0FBbEI7UUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2pDLEdBQUcsRUFBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDTSw2Q0FBYyxHQUFyQixVQUFzQixZQUFvQixFQUFFLE1BQVc7UUFDbkQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNqQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUM7O0FBbEJpQiw2QkFBUSxHQUF5QixJQUFJLG9CQUFvQixFQUFFLENBQUM7Ozs7Ozs7O0FDQTlFO0FBQUE7SUFHSSwyQkFBb0IsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFEcEMsV0FBTSxHQUFHLEVBQUUsQ0FBQztJQUVwQixDQUFDO0lBQ0Qsc0JBQVcscUNBQU07YUFBakIsY0FBcUIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN2RSxzQkFBVyxtQ0FBSTthQUFmO1lBQ0ksSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsRUFBRSxFQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN0QixFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztZQUMvQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLEVBQUUsRUFBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDakQsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUNELFVBQWdCLEtBQWE7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7OztPQUhBO0lBSU0seUNBQWEsR0FBcEIsVUFBcUIsR0FBVztRQUM1QixFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUM7WUFBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQy9DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDTSx5Q0FBYSxHQUFwQixVQUFxQixHQUFXLEVBQUUsS0FBYTtRQUMzQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUM7WUFBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQy9DLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDUixFQUFFLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsRUFBRSxFQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDekIsRUFBRSxFQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNNLG1DQUFPLEdBQWQ7UUFDSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxFQUFFLEVBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pDLEVBQUUsRUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNNLG1DQUFPLEdBQWQsVUFBZSxLQUFVO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNsQixFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLEdBQUcsRUFBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDTyx1REFBMkIsR0FBbkMsVUFBb0MsWUFBb0I7UUFDcEQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ25DLEVBQUUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsYUFBYSxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUN4RCxFQUFFLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUM7Z0JBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDTCxDQUFDO0lBQ0wsd0JBQUM7QUFBRCxDQUFDOztBQWpFa0IsK0JBQWEsR0FBVyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FDTHRCO0FBTS9CO0lBQXVDLG9GQUF5QjtJQUk1RCwyQkFBWSxLQUFVO1FBQXRCLFlBQ0ksa0JBQU0sS0FBSyxDQUFDLFNBSWY7UUFIRyxLQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDckIsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdCLEtBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUM7O0lBQ3RELENBQUM7SUFDRCxxREFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUM7SUFDMUQsQ0FBQztJQUNMLHdCQUFDO0FBQUQsQ0FBQyxDQWZzQyxnREFBZSxHQWVyRDs7QUFFRDtJQUErQyw0RkFBaUI7SUFHNUQsbUNBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQUdmO1FBRkcsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ25DLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQzs7SUFDakMsQ0FBQztJQUNELDZEQUF5QixHQUF6QixVQUEwQixTQUFjO1FBQ3BDLGlCQUFNLHlCQUF5QixZQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUNTLHlEQUFxQixHQUEvQjtRQUNJLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2pHLENBQUM7SUFDTCxnQ0FBQztBQUFELENBQUMsQ0FoQjhDLGlCQUFpQixHQWdCL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkNrRDtBQUNoQjtBQUVuQztJQUF5QyxzRkFBVztJQUNoRDtlQUNJLGlCQUFPO0lBQ1gsQ0FBQztJQUNNLHFDQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDTCwwQkFBQztBQUFELENBQUMsQ0FQd0MsMERBQVcsR0FPbkQ7O0FBQ0Q7SUFBd0MscUZBQVc7SUFDL0M7ZUFDSSxpQkFBTztJQUNYLENBQUM7SUFDTSxvQ0FBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0wseUJBQUM7QUFBRCxDQUFDLENBUHVDLDBEQUFXLEdBT2xEOztBQUNEO0lBQXFDLGtGQUFXO0lBRTVDLHlCQUFZLE9BQWU7UUFBM0IsWUFDSSxpQkFBTyxTQUVWO1FBREcsS0FBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7O0lBQzNCLENBQUM7SUFDTSxpQ0FBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ08scUNBQVcsR0FBbkI7UUFDSSxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDTCxzQkFBQztBQUFELENBQUMsQ0FqQm9DLDBEQUFXLEdBaUIvQzs7QUFFRDtJQUFpQyw4RUFBVztJQUV4QyxxQkFBWSxJQUFZO1FBQXhCLFlBQ0ksaUJBQU8sU0FFVjtRQURHLEtBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztJQUNyQixDQUFDO0lBQ00sNkJBQU8sR0FBZDtRQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDTCxrQkFBQztBQUFELENBQUMsQ0FUZ0MsMERBQVcsR0FTM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0N1QztBQUNJO0FBQ007QUFDQztBQUNQO0FBQ2tDO0FBQzFCO0FBQ3FCO0FBRXpFO0lBQThCLDJFQUFZO0lBaUJ0QyxrQkFBbUIsSUFBWTtRQUEvQixZQUNJLGtCQUFNLElBQUksQ0FBQyxTQUdkO1FBSmtCLFVBQUksR0FBSixJQUFJLENBQVE7UUFadkIscUJBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMscUJBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsbUJBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsbUJBQWEsR0FBWSxLQUFLLENBQUM7UUFFdkMsWUFBTSxHQUF1QixFQUFFLENBQUM7UUFDaEMsZ0JBQVUsR0FBMkIsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUEwSDFELGtDQUE0QixHQUFZLEtBQUssQ0FBQztRQTREOUMsNEJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBOUtuQyxLQUFJLENBQUMsYUFBYSxHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDakQsS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQzNELENBQUM7SUFDRCxzQkFBVyw4QkFBUTthQUFuQixjQUFpQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDL0Msc0JBQVcsOEJBQVE7YUFBbkIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQy9DLHNCQUFXLDZCQUFPO2FBQWxCLGNBQStCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3RELHNCQUFXLDJCQUFLO2FBQWhCO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqQyxDQUFDO2FBQ0QsVUFBaUIsUUFBZ0I7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDakQsQ0FBQzs7O09BSkE7SUFLRCxzQkFBVyw4QkFBUTthQUFuQixjQUEyQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3ZFLHNCQUFXLG9DQUFjO2FBQXpCLGNBQWlELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNuRixzQkFBVyxvQ0FBYzthQUF6QixjQUE4QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUM5RyxzQkFBVywrQkFBUzthQUFwQjtZQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDekIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSwyRUFBZ0IsRUFBRSxDQUFDO29CQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsVUFBVSxJQUFZLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0csQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDNUUsQ0FBQztZQUNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDcEMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUFDLFdBQVcsSUFBSSxHQUFHLENBQUM7WUFDcEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztZQUNuQixNQUFNLENBQUMsRUFBRSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2xELENBQUM7OztPQUFBO0lBQ00sd0JBQUssR0FBWixVQUFhLE9BQXdCO1FBQXhCLHlDQUF3QjtRQUNqQyw0REFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUN2RixFQUFFLENBQUMsQ0FBQyw0REFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNMLENBQUM7SUFDUyx5Q0FBc0IsR0FBaEM7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBQ1MsOENBQTJCLEdBQXJDO1FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDUyx5Q0FBc0IsR0FBaEMsVUFBaUMsSUFBWTtRQUN6QyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUM7SUFDaEUsQ0FBQztJQUNTLHdDQUFxQixHQUEvQixVQUFnQyxJQUFZO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEQsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNNLGlDQUFjLEdBQXJCLGNBQW1DLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLCtCQUFZLEdBQW5CLGNBQWlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELHNCQUFXLGdDQUFVO2FBQXJCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzthQUNqRSxVQUFzQixHQUFZO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2pELENBQUM7OztPQUxnRTtJQU1qRSxzQkFBVyxnQ0FBVTthQUFyQixjQUFtQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7YUFDakUsVUFBc0IsR0FBWTtZQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7WUFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUMvQyxDQUFDOzs7T0FMZ0U7SUFNakUsc0JBQVcsaUNBQVc7YUFBdEI7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUNuQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUNELFVBQXVCLEtBQWE7WUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUM7OztPQUhBO0lBSUQsc0JBQVcsOEJBQVE7YUFBbkIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQzdELFVBQW9CLEdBQVk7WUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLENBQUM7OztPQU40RDtJQU9uRCxrQ0FBZSxHQUF6QixjQUE4QixDQUFDO0lBQy9CLHNCQUFXLGdDQUFVO2FBQXJCLGNBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUM7OztPQUFBO0lBQzlGLHNCQUFXLDhCQUFRO2FBQW5CLGNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUM3RCxVQUFvQixLQUFjO1lBQzlCLEVBQUUsRUFBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLENBQUM7OztPQUw0RDtJQU1uRCxrQ0FBZSxHQUF6QjtRQUNJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELHNCQUFjLHdCQUFFO2FBQWhCO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNiLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO2dCQUNyQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO29CQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDaEQsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7OztPQUFBO0lBQ1MsNEJBQVMsR0FBbkI7UUFDSSxpQkFBTSxTQUFTLFdBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxzQkFBVywyQkFBSzthQUFoQjtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7YUFFRCxVQUFpQixRQUFhO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUM5QyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztRQUM5QyxDQUFDOzs7T0FSQTtJQVNELHNCQUFXLDZCQUFPO2FBQWxCLGNBQStCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzFELFVBQW1CLFFBQWdCO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsQ0FBQzs7O09BTHlEO0lBTWhELDZCQUFVLEdBQXBCLGNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDM0csNkJBQVUsR0FBcEIsVUFBcUIsUUFBZ0I7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ00sMEJBQU8sR0FBZCxjQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELDRCQUFTLEdBQWhCLFVBQWlCLFlBQTRCO1FBQTVCLGtEQUE0QjtRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELHNCQUFXLHVDQUFpQjthQUE1QixjQUF5QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNyRSxzQkFBVyxrQ0FBWTthQUF2QixjQUFvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUM3RywyQkFBUSxHQUFmLFVBQWdCLEtBQWtCO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNPLGlDQUFjLEdBQXRCLFVBQXVCLFlBQXFCO1FBQ3hDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBQ1MsbUNBQWdCLEdBQTFCLFVBQTJCLE1BQTBCO1FBQ2pELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLG1FQUFtQixFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0wsQ0FBQztJQUNTLG1DQUFnQixHQUExQjtRQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ1MsZ0NBQWEsR0FBdkI7UUFDSSxNQUFNLENBQUMsSUFBSSxtRUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFUyw4QkFBVyxHQUFyQixVQUFzQixRQUFhO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNTLG9DQUFpQixHQUEzQixVQUE0QixRQUFhO1FBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztZQUMvQixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0lBQ08sK0JBQVksR0FBcEI7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDbEYsQ0FBQztJQUNPLCtCQUFZLEdBQXBCLFVBQXFCLFFBQWE7UUFDOUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFDUyxnQ0FBYSxHQUF2QixVQUF3QixHQUFRLElBQVMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsOEJBQVcsR0FBckIsVUFBc0IsR0FBUSxJQUFTLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLGlDQUFjLEdBQXhCLGNBQTZCLENBQUM7SUFDcEIsZ0NBQWEsR0FBdkIsVUFBd0IsUUFBZ0I7UUFDcEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUFDLElBQUk7WUFBQyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsV0FBVztJQUNYLHVDQUFvQixHQUFwQixVQUFxQixRQUFhO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBQ0QsaUJBQWlCO0lBQ2pCLG9DQUFpQixHQUFqQixjQUE4QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRCxlQUFDO0FBQUQsQ0FBQyxDQXZPNkIsbUVBQVksR0F1T3pDOztBQUNELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFO0lBQy9GLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRTtJQUNoRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDOzs7Ozs7Ozs7O0FDblA1RjtBQUV6RTtJQW9ESSxtQkFBWSxLQUFVLEVBQUUsSUFBbUI7UUFBbkIsa0NBQW1CO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxFQUFFLEVBQUMsSUFBSSxDQUFDO1lBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUF0RGEscUJBQVcsR0FBekIsVUFBMEIsUUFBMkI7UUFDakQsSUFBSSxLQUFLLEdBQXFCLEVBQUUsQ0FBQztRQUNqQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDYSxvQkFBVSxHQUF4QixVQUF5QixLQUF1QixFQUFFLFFBQTJCO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBUyxLQUFLO1lBQ3ZCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7UUFDRixLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsS0FBYyxFQUFFLFdBQW9CO1lBQUUsZUFBcUI7aUJBQXJCLFVBQXFCLEVBQXJCLHFCQUFxQixFQUFyQixJQUFxQjtnQkFBckIsOEJBQXFCOztZQUNoRixJQUFJLE1BQU0sR0FBRyxXQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBQyxJQUFJLFlBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLFNBQU0sS0FBSyxFQUFDLENBQUM7WUFDOUUsRUFBRSxFQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdEIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNhLGlCQUFPLEdBQXJCLFVBQXNCLEtBQXVCLEVBQUUsTUFBa0I7UUFDN0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0wsQ0FBQztJQUNhLGlCQUFPLEdBQXJCLFVBQXNCLEtBQXVCO1FBQ3pDLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ2Esd0JBQWMsR0FBNUIsVUFBNkIsS0FBdUIsRUFBRSxHQUFRO1FBQzFELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQVNNLDJCQUFPLEdBQWQsY0FBMkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsc0JBQVcsOEJBQU87YUFBbEIsY0FBMEMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNyRSxzQkFBVywrQkFBUTthQUFuQixjQUE0QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3hFLFVBQW9CLEtBQXdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BREw7SUFFeEUsc0JBQVcsNEJBQUs7YUFBaEIsY0FBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ2xELFVBQWlCLFFBQWE7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7WUFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0wsQ0FBQzs7O09BVmlEO0lBV2xELHNCQUFXLDhCQUFPO2FBQWxCLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDMUUsc0JBQVcsMkJBQUk7YUFBZjtZQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQ0QsVUFBZ0IsT0FBZTtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDaEMsQ0FBQzs7O09BSEE7SUFJTSwyQkFBTyxHQUFkLFVBQWUsS0FBVTtRQUNyQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBQ1Esa0NBQWMsR0FBdkIsVUFBd0IsR0FBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksV0FBVyxHQUFDO0lBQ3hHLGtDQUFjLEdBQXRCLFVBQXVCLEdBQVEsRUFBRSxTQUF3QjtRQUNyRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUN2RCxFQUFFLEVBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0wsZ0JBQUM7QUFBRCxDQUFDOztBQXpHaUIsbUJBQVMsR0FBRyxHQUFHLENBQUM7QUFnRGYsdUJBQWEsR0FBRyxDQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ25EekQ7QUFDcUQ7QUFHeEI7QUFFNUQ7SUFBMkMsd0ZBQXlCO0lBQ2hFLCtCQUFZLEtBQVU7UUFBdEIsWUFDSSxrQkFBTSxLQUFLLENBQUMsU0FJZjtRQUhHLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbEQsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNyRCxLQUFJLENBQUMsWUFBWSxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNyRCxDQUFDO0lBQ0Qsc0JBQWMsMkNBQVE7YUFBdEIsY0FBaUQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFvQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDcEcseURBQXlCLEdBQXpCLFVBQTBCLFNBQWM7UUFDcEMsaUJBQU0seUJBQXlCLFlBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsOENBQWMsR0FBZCxVQUFlLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELDRDQUFZLEdBQVosVUFBYSxLQUFLO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxzQ0FBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxDQUFDLDhEQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBTyxDQUFDO1FBQzdGLE1BQU0sQ0FBQyxDQUNILG1FQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBSSxDQUMxUCxDQUFDO0lBQ04sQ0FBQztJQUNMLDRCQUFDO0FBQUQsQ0FBQyxDQTNCMEMsd0ZBQXlCLEdBMkJuRTs7QUFFRDtJQUErQyw0RkFBaUI7SUFHNUQsbUNBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQU1mO1FBTEcsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDckMsS0FBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNyRCxLQUFJLENBQUMsWUFBWSxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNyRCxDQUFDO0lBQ0Qsa0RBQWMsR0FBZCxVQUFlLEtBQUs7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxnREFBWSxHQUFaLFVBQWEsS0FBSztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDekMsQ0FBQztJQUNELDZEQUF5QixHQUF6QixVQUEwQixTQUFjO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsMENBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNuQixNQUFNLENBQUMsQ0FBQyw4REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFHLElBQUksQ0FBQyxPQUFPLENBQU8sQ0FBQyxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxDQUFDLGdFQUFPLElBQUksRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUksQ0FBQyxDQUFDO0lBQzVKLENBQUM7SUFDTCxnQ0FBQztBQUFELENBQUMsQ0EzQjhDLGdGQUFpQixHQTJCL0Q7O0FBRUQsbUZBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFDLEtBQUs7SUFDNUQsTUFBTSxDQUFDLG9EQUFtQixDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEVxQztBQUNKO0FBRUU7QUFDYTtBQUNmO0FBQ2M7QUFDSTtBQUV0RDtJQUF3QyxxRkFBUTtJQWM1Qyw0QkFBWSxJQUFZO1FBQXhCLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBT2Q7UUFyQk8seUJBQW1CLEdBQXFCLElBQUksQ0FBQztRQUU3QyxvQkFBYyxHQUFjLElBQUksNkRBQVMsQ0FBQyxPQUFPLEVBQUUsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFJbEcsb0JBQWMsR0FBcUIsSUFBSSxDQUFDO1FBQ3hDLGlDQUEyQixHQUFRLElBQUksQ0FBQztRQUd6QywwQkFBb0IsR0FBWSxJQUFJLENBQUM7UUFDcEMsdUJBQWlCLEdBQVcsTUFBTSxDQUFDO1FBMkJuQyxzQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUF2QnRDLEtBQUksQ0FBQyxhQUFhLEdBQUcsNkRBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDakQsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsS0FBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDckQsS0FBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLEdBQUcsS0FBSSxDQUFDO1FBQ2hCLEtBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxLQUF1QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUM7O0lBQ2xILENBQUM7SUFDRCxzQkFBVyx5Q0FBUzthQUFwQjtZQUNJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDM0csTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDL0IsQ0FBQzs7O09BQUE7SUFFRCxzQkFBVywrQ0FBZTthQUExQjtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RyxDQUFDOzs7T0FBQTtJQUNTLHdDQUFXLEdBQXJCLFVBQXNCLEdBQVE7UUFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ1MsMkNBQWMsR0FBeEIsY0FBOEMsTUFBTSxDQUFDLElBQUkseUVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSx1Q0FBVSxHQUFwQjtRQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLGlCQUFNLFVBQVUsV0FBRSxDQUFDO1FBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFUyx1Q0FBVSxHQUFwQixVQUFxQixRQUFnQjtRQUNqQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixpQkFBTSxVQUFVLFlBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUM7WUFDRixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO2dCQUM3QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNTLHdDQUFXLEdBQXJCLFVBQXNCLFFBQWE7UUFDL0IsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLFFBQVEsQ0FBQztRQUMxRCxpQkFBTSxXQUFXLFlBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNTLDBDQUFhLEdBQXZCLFVBQXdCLEdBQVE7UUFDNUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFBQyxNQUFNLENBQUMsaUJBQU0sYUFBYSxZQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFDUyx3Q0FBVyxHQUFyQixVQUFzQixHQUFRO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLGlCQUFNLFdBQVcsWUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ1MsOENBQWlCLEdBQTNCLFVBQTRCLEdBQVE7UUFDaEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUMzQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ1MsNENBQWUsR0FBekIsVUFBMEIsR0FBUTtRQUM5QixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRCxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNTLDRDQUFlLEdBQXpCLFVBQTBCLEdBQVE7UUFDOUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDL0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM1QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0Qsc0JBQUksdUNBQU87YUFBWCxjQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDeEQsVUFBWSxRQUFvQjtZQUM1Qiw2REFBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7OztPQUp1RDtJQUs5Qyw0Q0FBZSxHQUF6QjtRQUNJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFDRCxzQkFBSSw0Q0FBWTthQUFoQixjQUE2QixNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzthQUM3RCxVQUFpQixRQUFnQjtZQUM3QixFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO1lBQ2xDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7OztPQUw0RDtJQU03RCxzQkFBVyx5Q0FBUzthQUFwQixjQUFpQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2pFLFVBQXFCLEtBQWE7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQixDQUFDOzs7T0FKZ0U7SUFLakUsc0JBQVcsOENBQWM7YUFBekIsY0FBc0MsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzNFLFVBQTBCLEtBQWEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFFLENBQUM7OztPQURQO0lBRTNFLHNCQUFXLDRDQUFZO2FBQXZCLGNBQStDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUMvRSxzQkFBVyxpREFBaUI7YUFBNUIsY0FBb0QsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBRXpGLHNCQUFJLDhDQUFjO2FBQWxCO1lBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzdFLEVBQUUsRUFBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNwQyxDQUFDOzs7T0FBQTtJQUNELHNCQUFZLDZDQUFhO2FBQXpCLGNBQWdELE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzNHLDJDQUFjLEdBQXJCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFDLHlDQUFZLEdBQW5CLGNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLDZDQUFnQixHQUExQixVQUEyQixNQUEwQjtRQUNqRCxpQkFBTSxnQkFBZ0IsWUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNsRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNSLElBQUksR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLDJEQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ00sNENBQWUsR0FBdEI7UUFDSSxpQkFBTSxlQUFlLFdBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNPLDRDQUFlLEdBQXZCO1FBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHVCQUF1QjtRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDUyxvREFBdUIsR0FBakMsY0FBc0MsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVJLHlDQUFZLEdBQVo7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBQ08saURBQW9CLEdBQTVCLFVBQTZCLEtBQXVCO1FBQ2hELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztZQUNwQyw2REFBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFDTyxvREFBdUIsR0FBL0I7UUFDSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNPLCtDQUFrQixHQUExQixVQUEyQixLQUF1QjtRQUM5QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDTyxzQ0FBUyxHQUFqQixVQUFrQixLQUF1QixFQUFFLElBQVk7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNPLDJDQUFjLEdBQXRCLFVBQXVCLEtBQXVCO1FBQzFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELDhDQUFpQixHQUFqQjtRQUNJLGlCQUFNLGlCQUFpQixXQUFFLENBQUM7UUFDMUIsRUFBRSxFQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFDTCx5QkFBQztBQUFELENBQUMsQ0F2TXVDLDJEQUFRLEdBdU0vQzs7QUFFRDtJQUEwQyx1RkFBa0I7SUFHeEQsOEJBQW1CLElBQVk7UUFBL0IsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FDZDtRQUZrQixVQUFJLEdBQUosSUFBSSxDQUFRO1FBRnZCLG1CQUFhLEdBQVcsQ0FBQyxDQUFDOztJQUlsQyxDQUFDO0lBQ0Qsc0JBQVcsMENBQVE7YUFBbkIsY0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQzVELFVBQW9CLEtBQWE7WUFDN0IsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7OztPQUwyRDtJQU1oRSwyQkFBQztBQUFELENBQUMsQ0FaeUMsa0JBQWtCLEdBWTNEOztBQUNELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0I7SUFDaEYsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxJQUFJLE1BQU0sQ0FBQyw2REFBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxFQUFFLEtBQVUsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztJQUMvSyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtJQUNyRixFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFRLEVBQUUsS0FBVSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2pQLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBQztJQUNsSSxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFL0UsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUNyT2xGO0FBQ0M7QUFFckQ7SUFBQTtRQWtCWSxZQUFPLEdBQVcsT0FBTyxDQUFDO0lBd0J0QyxDQUFDO0lBeENHLHNCQUFXLHNCQUFTO2FBQXBCO1lBQ0ksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFDdEUsU0FBUyxDQUFDLGNBQWMsR0FBRztnQkFDdkIsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxRQUFRLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxRQUFRLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsUUFBUSxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsV0FBVyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RHLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDckQsY0FBYyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLFdBQVcsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2hFLENBQUM7WUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUNwQyxDQUFDOzs7T0FBQTtJQUlELHNCQUFXLCtCQUFRO2FBQW5CLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUN0RCxVQUFvQixLQUFhO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNuQixLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQzs7O09BTnFEO0lBTy9DLDJCQUFPLEdBQWQsVUFBZSxJQUFnQixFQUFFLEtBQWlCO1FBQW5DLGtDQUFnQjtRQUFFLG9DQUFpQjtRQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFDTyxnQ0FBWSxHQUFwQixVQUFxQixHQUFRO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2pELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNMLGdCQUFDO0FBQUQsQ0FBQzs7QUF6Q1Usd0JBQWMsR0FBd0IsSUFBSSxDQUFDO0FBMEN0RDtJQUdJO1FBRlEsb0JBQWUsR0FBVyxLQUFLLENBQUM7UUFDakMsYUFBUSxHQUFlLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFDeEIsc0JBQVcscUNBQVU7YUFBckIsY0FBa0MsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2FBQ2hFLFVBQXNCLEtBQWE7WUFDL0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ25CLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDO2dCQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDakQsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDO2dCQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDaEQsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDOzs7T0FSK0Q7SUFTaEUsc0JBQVcsa0NBQU87YUFBbEIsY0FBdUIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ25ELDZCQUFLLEdBQVo7UUFDSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBQ0wsb0JBQUM7QUFBRCxDQUFDOztBQUNEO0lBS0kseUJBQW1CLFVBQWtCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNEVBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFDRCxzQkFBVyx1Q0FBVTthQUFyQixjQUFrQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7YUFDaEUsVUFBc0IsS0FBYTtZQUMvQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSwyRUFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxDQUFDOzs7T0FMK0Q7SUFNekQsNkJBQUcsR0FBVixVQUFXLE1BQXNCO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ08saUNBQU8sR0FBZixVQUFnQixJQUFtQjtRQUMvQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUMzQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN0QyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ08sMENBQWdCLEdBQXhCLFVBQXlCLEtBQVU7UUFDL0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNPLHNDQUFZLEdBQXBCLFVBQXFCLFNBQW9CO1FBQ3JDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1AsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQztZQUMxRixJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1AsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDakUsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ08sc0NBQVksR0FBcEIsVUFBcUIsU0FBYztRQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMvQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxSDhCO0FBRU07QUFDNEI7QUFRakU7SUFBb0MsaUZBQXlCO0lBS3pELHdCQUFZLEtBQVU7UUFBdEIsWUFDSSxrQkFBTSxLQUFLLENBQUMsU0FJZjtRQUhHLEtBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixLQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7O0lBQ3pCLENBQUM7SUFDRCxrREFBeUIsR0FBekIsVUFBMEIsU0FBYztRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDTyxvQ0FBVyxHQUFuQixVQUFvQixRQUFRO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxZQUFZLDJEQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztRQUMvRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1QsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMxRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1NBQ25FLENBQUM7SUFDTixDQUFDO0lBQ0QsMENBQWlCLEdBQWpCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEdBQUc7Z0JBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLEdBQUc7Z0JBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixHQUFHO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0IsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNELDZDQUFvQixHQUFwQjtRQUNJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7WUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7WUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDckQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNqQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNMLENBQUM7SUFDRCwrQkFBTSxHQUFOO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbkUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzVFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsRixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3BILElBQUksWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEksSUFBSSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUN0RixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3JELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDM0QsTUFBTSxDQUFDLENBQ0gsOERBQU0sR0FBRyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztZQUN6RixRQUFRO1lBQ1IsTUFBTTtZQUNOLGNBQWM7WUFDZCxPQUFPO1lBQ1AsV0FBVyxDQUNWLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFDUyx1Q0FBYyxHQUF4QjtRQUNJLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQ2xELEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUVsQixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLDhEQUFLLEdBQUcsRUFBQyxRQUFRLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQU87UUFDMUYsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNqQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxDQUFDLDhEQUFLLEdBQUcsRUFBQyxRQUFRLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxHQUFRLENBQUMsQ0FBQztZQUMxRSxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyw4REFBSyxHQUFHLEVBQUMsUUFBUSxJQUFFLE1BQU0sQ0FBTztJQUMzQyxDQUFDO0lBQ1Msb0NBQVcsR0FBckI7UUFDSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUN4QyxNQUFNLENBQUMsQ0FBQyw2REFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFHLFNBQVMsQ0FBTSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNTLHNDQUFhLEdBQXZCO1FBQ0ksTUFBTSxDQUFDLENBQUM7WUFDQSxrRUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBTztZQUN0QyxxREFBQyx3RkFBeUIsSUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBSSxDQUNwRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUNTLHFDQUFZLEdBQXRCO1FBQ0ksTUFBTSxDQUFDLHFEQUFDLG9CQUFvQixJQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFJO0lBQ2xHLENBQUM7SUFDTCxxQkFBQztBQUFELENBQUMsQ0F2SG1DLGdEQUFlLEdBdUhsRDs7QUFFRDtJQUEwQyx1RkFBeUI7SUFJL0QsOEJBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQUlmO1FBSEcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdCLEtBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQzs7SUFDekIsQ0FBQztJQUNELHdEQUF5QixHQUF6QixVQUEwQixTQUFjO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDN0IsQ0FBQztJQUNPLDBDQUFXLEdBQW5CLFVBQW9CLFFBQVE7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLFlBQVksMkRBQVEsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQy9ELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixHQUFHO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QscUNBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNwRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxJQUFJLEdBQUcsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLDhEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUcsTUFBTSxDQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0wsMkJBQUM7QUFBRCxDQUFDLENBcEN5QyxnREFBZSxHQW9DeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hLOEI7QUFDcUI7QUFDYjtBQUNrQjtBQUdHO0FBQ1I7QUFDQztBQUNoQjtBQUVyQztJQUE0Qix5RUFBeUI7SUFLakQsZ0JBQVksS0FBVTtRQUF0QixZQUNJLGtCQUFNLEtBQUssQ0FBQyxTQUdmO1FBTE8sMEJBQW9CLEdBQVksS0FBSyxDQUFDO1FBSTFDLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBQzdCLENBQUM7SUFSRCxzQkFBa0IsaUJBQU87YUFBekIsY0FBc0MsTUFBTSxDQUFDLDBFQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNyRSxVQUEwQixLQUFhLElBQUksMEVBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BRE47SUFTckUsMENBQXlCLEdBQXpCLFVBQTBCLFNBQWM7UUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsbUNBQWtCLEdBQWxCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0Qsa0NBQWlCLEdBQWpCO1FBQ0ksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELHVCQUFNLEdBQU47UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0Qsc0JBQVcsdUJBQUc7YUFBZCxjQUF3QixNQUFNLENBQUMsMEVBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDcEQsVUFBZSxLQUFVO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQzs7O09BSG1EO0lBSTFDLGdDQUFlLEdBQXpCO1FBQ0ksRUFBRSxFQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDL0MsSUFBSSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxDQUFDLDhEQUFLLHVCQUF1QixFQUFFLFNBQVMsR0FBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNTLDhCQUFhLEdBQXZCO1FBQ0ksSUFBSSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLDhEQUFLLHVCQUF1QixFQUFFLFNBQVMsR0FBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNTLDZCQUFZLEdBQXRCO1FBQ0ksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNuRixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3JFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMxRixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDakcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNsRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDZixXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUNILDhEQUFLLEdBQUcsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUNuQyxLQUFLO1lBQ04sOERBQUssRUFBRSxFQUFFLDJEQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtnQkFDMUMsV0FBVztnQkFDWCxXQUFXO2dCQUNYLGNBQWMsQ0FDYjtZQUNMLE9BQU8sQ0FDTixDQUNULENBQUM7SUFDTixDQUFDO0lBQ1MsNEJBQVcsR0FBckI7UUFDSSxNQUFNLENBQUMsOERBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtZQUFFLGlFQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFNLENBQU0sQ0FBQztJQUN4RixDQUFDO0lBQ1MsMkJBQVUsR0FBcEI7UUFDSSxNQUFNLENBQUMscURBQUMsOERBQVUsSUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksR0FBSSxDQUFDO0lBQzVHLENBQUM7SUFDUywrQkFBYyxHQUF4QixVQUF5QixLQUFjO1FBQ25DLE1BQU0sQ0FBQyxxREFBQyw0RUFBYyxJQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUssQ0FBQztJQUNqRixDQUFDO0lBQ1MsaUNBQWdCLEdBQTFCO1FBQ0ksTUFBTSxDQUFDLHFEQUFDLGdGQUFnQixJQUFDLE1BQU0sRUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDckUsQ0FBQztJQUNTLGtDQUFpQixHQUEzQjtRQUNJLE1BQU0sQ0FBQyxDQUFDLG1FQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFRLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRVMsNkJBQVksR0FBdEIsVUFBdUIsUUFBYTtRQUNoQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNqQyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSwyRUFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDJFQUFnQixFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDWCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDaEUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3BELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUVwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDUyxnQ0FBZSxHQUF6QixVQUEwQixRQUFhO1FBQ25DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxJQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxJQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLEVBQUUsT0FBTztZQUNqRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLG9CQUFvQixDQUFDO2dCQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sRUFBRSxPQUFPO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLEVBQUUsT0FBTztZQUMzQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLEVBQUUsT0FBTztZQUMzQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDL0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sSUFBTyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sSUFBTyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUM7WUFBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEosRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBTyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLEVBQUUsT0FBTyxJQUFPLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBTyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLEVBQUUsT0FBTyxJQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sRUFBRSxPQUFPLElBQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sRUFBRSxPQUFPLElBQU8sUUFBUSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pILENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLEVBQUUsT0FBTyxJQUFPLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNySCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtJQUNULHNDQUFxQixHQUE1QixVQUE2QixRQUFzQjtRQUMvQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxtRkFBb0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUk7U0FDN0csQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNNLDRCQUFXLEdBQWxCLFVBQW1CLEdBQVcsRUFBRSxTQUFpQjtRQUM3QyxNQUFNLENBQUMsOERBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFHLFNBQVMsQ0FBTyxDQUFDO0lBQzVFLENBQUM7SUFDTSxzQ0FBcUIsR0FBNUIsY0FBeUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLGFBQUM7QUFBRCxDQUFDLENBM0wyQixnREFBZSxHQTJMMUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdE13QztBQUNIO0FBQ0U7QUFDVztBQUNmO0FBRXBDO0lBQXFDLGtGQUFJO0lBT3JDO1FBQUEsWUFDSSxpQkFBTyxTQUNWO1FBUk0sU0FBRyxHQUFXLEVBQUUsQ0FBQztRQUNqQixVQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGVBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZUFBUyxHQUFXLEVBQUUsQ0FBQztRQUV2QixXQUFLLEdBQWdCLElBQUksQ0FBQzs7SUFHakMsQ0FBQztJQUNNLDZCQUFHLEdBQVY7UUFDSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixHQUFHLENBQUMsTUFBTSxHQUFHO1lBQ1QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDTSxpQ0FBTyxHQUFkLGNBQTJCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ25ELHNCQUFXLG9DQUFPO2FBQWxCO1lBQ0ksTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN6RSxDQUFDOzs7T0FBQTtJQUNNLGlDQUFPLEdBQWQsVUFBZSxJQUFTO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEQsQ0FBQztJQUNNLCtCQUFLLEdBQVo7UUFDSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNTLGdDQUFNLEdBQWhCLFVBQWlCLE1BQVc7UUFDeEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFBQyxRQUFRLENBQUM7Z0JBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSw2REFBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDTCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksMkRBQVcsQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNPLGlDQUFPLEdBQWYsVUFBZ0IsTUFBYyxFQUFFLFFBQWdCO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSwyREFBVyxDQUFDLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ08sNENBQWtCLEdBQTFCLFVBQTJCLE1BQVc7UUFDbEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ08sbUNBQVMsR0FBakI7UUFDSSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ08sa0NBQVEsR0FB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Q0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELGtDOzs7Ozs7QUNyZUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7Ozs7OztBQ25MdEM7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLHFCQUFxQixnQ0FBZ0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxpQzs7Ozs7Ozs7O0FDN1Z3QztBQUVqQyxJQUFJLG1CQUFtQixHQUFHO0lBQzdCLElBQUksRUFBRSxFQUFFO0lB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QUksR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQy9DLENBQUM7QUFLQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdDOEI7QUFDTztBQUNNO0FBQ1k7QUFDNUI7QUFFNUIsOENBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEIsTUFBTSxFQUFFLFVBQVMsS0FBSztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUNMO1lBQ0ksaURBQWUsQ0FBQyxDQUNaLHFEQUFDLGtFQUFNLDhEQUFLLEtBQUssRUFBRyxDQUN2QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWSxFQUFFLFVBQVMsS0FBSztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUNMO1lBQ0ksaURBQWUsQ0FBQyxDQUNaLHFEQUFDLDhFQUFZLDhEQUFLLEtBQUssRUFBRyxDQUM3QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRXFCIiwiZmlsZSI6Ii4vcGFja2FnZXMvc3VydmV5LWpxdWVyeS9zdXJ2ZXkuanF1ZXJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwianF1ZXJ5XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5XCIsIFtcImpxdWVyeVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJqcXVlcnlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVwiXSA9IGZhY3Rvcnkocm9vdFtcImpRdWVyeVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzM3X18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gODMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDY0ZTExZjYzYzljZmM2ZWIwNjU2IiwiZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdFtcImFzc2lnblwiXSB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcykgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7IH1cclxuICAgIHRoaXNDbGFzcy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcykgOiAoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59O1xyXG5cclxuZGVjbGFyZSB2YXIgUmVmbGVjdDtcclxuXHJcbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsImV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xyXG4gICAgY3VycmVudExvY2FsZTogXCJcIixcclxuICAgIGxvY2FsZXM6IHt9LFxyXG4gICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZSA/IHRoaXMubG9jYWxlc1t0aGlzLmN1cnJlbnRMb2NhbGVdIDogc3VydmV5U3RyaW5ncztcclxuICAgICAgICBpZiAoIWxvYyB8fCAhbG9jW3N0ck5hbWVdKSBsb2MgPSBzdXJ2ZXlTdHJpbmdzO1xyXG4gICAgICAgIHJldHVybiBsb2Nbc3RyTmFtZV07XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYWxlczogZnVuY3Rpb24gKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXMgPSBbXTtcclxuICAgICAgICByZXMucHVzaChcIlwiKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5sb2NhbGVzKSB7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcy5zb3J0KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufTtcclxuZXhwb3J0IHZhciBzdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkNvbXBsZXRlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk90aGVyIChkZXNjcmliZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIlRoZXJlIGlzIG5vIHZpc2libGUgcGFnZSBvciBxdWVzdGlvbiBpbiB0aGUgc3VydmV5LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiU3VydmV5IGlzIGxvYWRpbmcuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkNob29zZS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSBudW1lcmljLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IHN5bWJvbHMuXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IHN5bWJvbHMuXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBtb3JlIHRoYW4gezB9IGFuZCBsZXNzIHRoYW4gezF9IHN5bWJvbHMuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlBsZWFzZSBmaWxsIGluIGF0IGxlYXN0IHswfSByb3dzLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudHMuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IG5vIG1vcmUgdGhhbiB7MH0gdmFyaWFudHMuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZXJyb3IgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiVGhlIGZpbGUgc2l6ZSBzaG91bGQgbm90IGV4Y2VlZCB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGVudGVyIHRoZSBvdGhlciB2YWx1ZS5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiWW91ciBmaWxlIGlzIHVwbG9hZGluZy4gUGxlYXNlIHdhaXQgc2V2ZXJhbCBzZWNvbmRzIGFuZCB0cnkgYWdhaW4uXCIsXHJcbiAgICBhZGRSb3c6IFwiQWRkIHJvd1wiLFxyXG4gICAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxyXG4gICAgY2hvaWNlc19maXJzdEl0ZW06IFwiZmlyc3QgaXRlbVwiLFxyXG4gICAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlY29uZCBpdGVtXCIsXHJcbiAgICBjaG9pY2VzX3RoaXJkSXRlbTogXCJ0aGlyZCBpdGVtXCIsXHJcbiAgICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtblwiLFxyXG4gICAgbWF0cml4X3JvdzogXCJSb3dcIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVuXCJdID0gc3VydmV5U3RyaW5ncztcclxuXHJcbmlmICghU3RyaW5nLnByb3RvdHlwZVtcImZvcm1hdFwiXSkge1xyXG4gICAgU3RyaW5nLnByb3RvdHlwZVtcImZvcm1hdFwiXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC97KFxcZCspfS9nLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3NbbnVtYmVyXSAhPSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgPyBhcmdzW251bWJlcl1cclxuICAgICAgICAgICAgICAgIDogbWF0Y2hcclxuICAgICAgICAgICAgICAgIDtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcHR5cGVzJztcbmltcG9ydCB7IHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsIGNsb25lRWxlbWVudCBhcyBwcmVhY3RDbG9uZUVsZW1lbnQsIGgsIENvbXBvbmVudCBhcyBQcmVhY3RDb21wb25lbnQsIG9wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuXG5jb25zdCB2ZXJzaW9uID0gJzE1LjEuMCc7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxuY29uc3QgRUxFTUVOVFMgPSAnYSBhYmJyIGFkZHJlc3MgYXJlYSBhcnRpY2xlIGFzaWRlIGF1ZGlvIGIgYmFzZSBiZGkgYmRvIGJpZyBibG9ja3F1b3RlIGJvZHkgYnIgYnV0dG9uIGNhbnZhcyBjYXB0aW9uIGNpdGUgY29kZSBjb2wgY29sZ3JvdXAgZGF0YSBkYXRhbGlzdCBkZCBkZWwgZGV0YWlscyBkZm4gZGlhbG9nIGRpdiBkbCBkdCBlbSBlbWJlZCBmaWVsZHNldCBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgZm9ybSBoMSBoMiBoMyBoNCBoNSBoNiBoZWFkIGhlYWRlciBoZ3JvdXAgaHIgaHRtbCBpIGlmcmFtZSBpbWcgaW5wdXQgaW5zIGtiZCBrZXlnZW4gbGFiZWwgbGVnZW5kIGxpIGxpbmsgbWFpbiBtYXAgbWFyayBtZW51IG1lbnVpdGVtIG1ldGEgbWV0ZXIgbmF2IG5vc2NyaXB0IG9iamVjdCBvbCBvcHRncm91cCBvcHRpb24gb3V0cHV0IHAgcGFyYW0gcGljdHVyZSBwcmUgcHJvZ3Jlc3MgcSBycCBydCBydWJ5IHMgc2FtcCBzY3JpcHQgc2VjdGlvbiBzZWxlY3Qgc21hbGwgc291cmNlIHNwYW4gc3Ryb25nIHN0eWxlIHN1YiBzdW1tYXJ5IHN1cCB0YWJsZSB0Ym9keSB0ZCB0ZXh0YXJlYSB0Zm9vdCB0aCB0aGVhZCB0aW1lIHRpdGxlIHRyIHRyYWNrIHUgdWwgdmFyIHZpZGVvIHdiciBjaXJjbGUgY2xpcFBhdGggZGVmcyBlbGxpcHNlIGcgaW1hZ2UgbGluZSBsaW5lYXJHcmFkaWVudCBtYXNrIHBhdGggcGF0dGVybiBwb2x5Z29uIHBvbHlsaW5lIHJhZGlhbEdyYWRpZW50IHJlY3Qgc3RvcCBzdmcgdGV4dCB0c3Bhbicuc3BsaXQoJyAnKTtcblxuY29uc3QgUkVBQ1RfRUxFTUVOVF9UWVBFID0gKHR5cGVvZiBTeW1ib2whPT0ndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICYmIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHwgMHhlYWM3O1xuXG5jb25zdCBDT01QT05FTlRfV1JBUFBFUl9LRVkgPSB0eXBlb2YgU3ltYm9sIT09J3VuZGVmaW5lZCcgPyBTeW1ib2wuZm9yKCdfX3ByZWFjdENvbXBhdFdyYXBwZXInKSA6ICdfX3ByZWFjdENvbXBhdFdyYXBwZXInO1xuXG4vLyBkb24ndCBhdXRvYmluZCB0aGVzZSBtZXRob2RzIHNpbmNlIHRoZXkgYWxyZWFkeSBoYXZlIGd1YXJhbnRlZWQgY29udGV4dC5cbmNvbnN0IEFVVE9CSU5EX0JMQUNLTElTVCA9IHtcblx0Y29uc3RydWN0b3I6IDEsXG5cdHJlbmRlcjogMSxcblx0c2hvdWxkQ29tcG9uZW50VXBkYXRlOiAxLFxuXHRjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAxLFxuXHRjb21wb25lbnRXaWxsVXBkYXRlOiAxLFxuXHRjb21wb25lbnREaWRVcGRhdGU6IDEsXG5cdGNvbXBvbmVudFdpbGxNb3VudDogMSxcblx0Y29tcG9uZW50RGlkTW91bnQ6IDEsXG5cdGNvbXBvbmVudFdpbGxVbm1vdW50OiAxLFxuXHRjb21wb25lbnREaWRVbm1vdW50OiAxXG59O1xuXG5cbmNvbnN0IENBTUVMX1BST1BTID0gL14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcHxjb2xvcnxmaWxsfGZsb29kfGZvbnR8Z2x5cGh8aG9yaXp8bWFya2VyfG92ZXJsaW5lfHBhaW50fHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dHx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlcnR8d29yZHx3cml0aW5nfHgpW0EtWl0vO1xuXG5cbmNvbnN0IEJZUEFTU19IT09LID0ge307XG5cbi8qZ2xvYmFsIHByb2Nlc3MqL1xuY29uc3QgREVWID0gdHlwZW9mIHByb2Nlc3M9PT0ndW5kZWZpbmVkJyB8fCAhcHJvY2Vzcy5lbnYgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYhPT0ncHJvZHVjdGlvbic7XG5cbi8vIGEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBub3RoaW5nLiBVc2VkIHRvIHJlcGxhY2UgY29tcG9uZW50cyBmb3IgdW5tb3VudENvbXBvbmVudEF0Tm9kZS5cbmZ1bmN0aW9uIEVtcHR5Q29tcG9uZW50KCkgeyByZXR1cm4gbnVsbDsgfVxuXG5cblxuLy8gbWFrZSByZWFjdCB0aGluayB3ZSdyZSByZWFjdC5cbmxldCBWTm9kZSA9IGgoJ2EnLCBudWxsKS5jb25zdHJ1Y3RvcjtcblZOb2RlLnByb3RvdHlwZS4kJHR5cGVvZiA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcblZOb2RlLnByb3RvdHlwZS5wcmVhY3RDb21wYXRVcGdyYWRlZCA9IGZhbHNlO1xuVk5vZGUucHJvdG90eXBlLnByZWFjdENvbXBhdE5vcm1hbGl6ZWQgPSBmYWxzZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdGdldCgpIHsgcmV0dXJuIHRoaXMubm9kZU5hbWU7IH0sXG5cdHNldCh2KSB7IHRoaXMubm9kZU5hbWUgPSB2OyB9LFxuXHRjb25maWd1cmFibGU6dHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsICdwcm9wcycsIHtcblx0Z2V0KCkgeyByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzOyB9LFxuXHRzZXQodikgeyB0aGlzLmF0dHJpYnV0ZXMgPSB2OyB9LFxuXHRjb25maWd1cmFibGU6dHJ1ZVxufSk7XG5cblxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblx0ZS5wZXJzaXN0ID0gT2JqZWN0O1xuXHRlLm5hdGl2ZUV2ZW50ID0gZTtcblx0cmV0dXJuIGU7XG59O1xuXG5cbmxldCBvbGRWbm9kZUhvb2sgPSBvcHRpb25zLnZub2RlO1xub3B0aW9ucy52bm9kZSA9IHZub2RlID0+IHtcblx0aWYgKCF2bm9kZS5wcmVhY3RDb21wYXRVcGdyYWRlZCkge1xuXHRcdHZub2RlLnByZWFjdENvbXBhdFVwZ3JhZGVkID0gdHJ1ZTtcblxuXHRcdGxldCB0YWcgPSB2bm9kZS5ub2RlTmFtZSxcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcztcblxuXHRcdGlmICghYXR0cnMpIGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXG5cdFx0aWYgKHR5cGVvZiB0YWc9PT0nZnVuY3Rpb24nKSB7XG5cdFx0XHRpZiAodGFnW0NPTVBPTkVOVF9XUkFQUEVSX0tFWV09PT10cnVlIHx8ICh0YWcucHJvdG90eXBlICYmICdpc1JlYWN0Q29tcG9uZW50JyBpbiB0YWcucHJvdG90eXBlKSkge1xuXHRcdFx0XHRpZiAodm5vZGUuY2hpbGRyZW4gJiYgIXZub2RlLmNoaWxkcmVuLmxlbmd0aCkgdm5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbikgYXR0cnMuY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcblxuXHRcdFx0XHRpZiAoIXZub2RlLnByZWFjdENvbXBhdE5vcm1hbGl6ZWQpIHtcblx0XHRcdFx0XHRub3JtYWxpemVWTm9kZSh2bm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGFuZGxlQ29tcG9uZW50Vk5vZGUodm5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAmJiAhdm5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB2bm9kZS5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbikgYXR0cnMuY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcblxuXHRcdFx0aWYgKGF0dHJzLmRlZmF1bHRWYWx1ZSkge1xuXHRcdFx0XHRpZiAoIWF0dHJzLnZhbHVlICYmIGF0dHJzLnZhbHVlIT09MCkge1xuXHRcdFx0XHRcdGF0dHJzLnZhbHVlID0gYXR0cnMuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlbGV0ZSBhdHRycy5kZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUVsZW1lbnRWTm9kZSh2bm9kZSwgYXR0cnMpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvbGRWbm9kZUhvb2spIG9sZFZub2RlSG9vayh2bm9kZSk7XG59O1xuXG5mdW5jdGlvbiBoYW5kbGVDb21wb25lbnRWTm9kZSh2bm9kZSkge1xuXHRsZXQgdGFnID0gdm5vZGUubm9kZU5hbWUsXG5cdFx0YSA9IHZub2RlLmF0dHJpYnV0ZXM7XG5cblx0dm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXHRpZiAodGFnLmRlZmF1bHRQcm9wcykgZXh0ZW5kKHZub2RlLmF0dHJpYnV0ZXMsIHRhZy5kZWZhdWx0UHJvcHMpO1xuXHRpZiAoYSkgZXh0ZW5kKHZub2RlLmF0dHJpYnV0ZXMsIGEpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVFbGVtZW50Vk5vZGUodm5vZGUsIGEpIHtcblx0bGV0IHNob3VsZFNhbml0aXplLCBhdHRycywgaTtcblx0aWYgKGEpIHtcblx0XHRmb3IgKGkgaW4gYSkgaWYgKChzaG91bGRTYW5pdGl6ZSA9IENBTUVMX1BST1BTLnRlc3QoaSkpKSBicmVhaztcblx0XHRpZiAoc2hvdWxkU2FuaXRpemUpIHtcblx0XHRcdGF0dHJzID0gdm5vZGUuYXR0cmlidXRlcyA9IHt9O1xuXHRcdFx0Zm9yIChpIGluIGEpIHtcblx0XHRcdFx0aWYgKGEuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRhdHRyc1sgQ0FNRUxfUFJPUFMudGVzdChpKSA/IGkucmVwbGFjZSgvKFtBLVowLTldKS8sICctJDEnKS50b0xvd2VyQ2FzZSgpIDogaSBdID0gYVtpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cblxuLy8gcHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG5mdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0bGV0IHByZXYgPSBwYXJlbnQgJiYgcGFyZW50Ll9wcmVhY3RDb21wYXRSZW5kZXJlZDtcblxuXHQvLyBpZ25vcmUgaW1wb3NzaWJsZSBwcmV2aW91cyByZW5kZXJzXG5cdGlmIChwcmV2ICYmIHByZXYucGFyZW50Tm9kZSE9PXBhcmVudCkgcHJldiA9IG51bGw7XG5cblx0Ly8gZGVmYXVsdCB0byBmaXJzdCBFbGVtZW50IGNoaWxkXG5cdGlmICghcHJldikgcHJldiA9IHBhcmVudC5jaGlsZHJlblswXTtcblxuXHQvLyByZW1vdmUgdW5hZmZlY3RlZCBzaWJsaW5nc1xuXHRmb3IgKGxldCBpPXBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaS0tOyApIHtcblx0XHRpZiAocGFyZW50LmNoaWxkTm9kZXNbaV0hPT1wcmV2KSB7XG5cdFx0XHRwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGxldCBvdXQgPSBwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCwgcHJldik7XG5cdGlmIChwYXJlbnQpIHBhcmVudC5fcHJlYWN0Q29tcGF0UmVuZGVyZWQgPSBvdXQ7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2s9PT0nZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXHRyZXR1cm4gb3V0ICYmIG91dC5fY29tcG9uZW50IHx8IG91dC5iYXNlO1xufVxuXG5cbmNsYXNzIENvbnRleHRQcm92aWRlciB7XG5cdGdldENoaWxkQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jb250ZXh0O1xuXHR9XG5cdHJlbmRlcihwcm9wcykge1xuXHRcdHJldHVybiBwcm9wcy5jaGlsZHJlblswXTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIHZub2RlLCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG5cdGxldCB3cmFwID0gaChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogcGFyZW50Q29tcG9uZW50LmNvbnRleHQgfSwgdm5vZGUpO1xuXHRsZXQgYyA9IHJlbmRlcih3cmFwLCBjb250YWluZXIpO1xuXHRpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGMpO1xuXHRyZXR1cm4gYztcbn1cblxuXG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuXHRsZXQgZXhpc3RpbmcgPSBjb250YWluZXIuX3ByZWFjdENvbXBhdFJlbmRlcmVkO1xuXHRpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcucGFyZW50Tm9kZT09PWNvbnRhaW5lcikge1xuXHRcdHByZWFjdFJlbmRlcihoKEVtcHR5Q29tcG9uZW50KSwgY29udGFpbmVyLCBleGlzdGluZyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5cblxuY29uc3QgQVJSID0gW107XG5cbi8vIFRoaXMgQVBJIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgZm9yIFByZWFjdCwgc28gaXQncyBiYXNpY2FsbHkgcGFzc3Rocm91Z2guXG5sZXQgQ2hpbGRyZW4gPSB7XG5cdG1hcChjaGlsZHJlbiwgZm4sIGN0eCkge1xuXHRcdGlmIChjaGlsZHJlbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0XHRjaGlsZHJlbiA9IENoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChjdHggJiYgY3R4IT09Y2hpbGRyZW4pIGZuID0gZm4uYmluZChjdHgpO1xuXHRcdHJldHVybiBjaGlsZHJlbi5tYXAoZm4pO1xuXHR9LFxuXHRmb3JFYWNoKGNoaWxkcmVuLCBmbiwgY3R4KSB7XG5cdFx0aWYgKGNoaWxkcmVuID09IG51bGwpIHJldHVybiBudWxsO1xuXHRcdGNoaWxkcmVuID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cdFx0aWYgKGN0eCAmJiBjdHghPT1jaGlsZHJlbikgZm4gPSBmbi5iaW5kKGN0eCk7XG5cdFx0Y2hpbGRyZW4uZm9yRWFjaChmbik7XG5cdH0sXG5cdGNvdW50KGNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCB8fCAwO1xuXHR9LFxuXHRvbmx5KGNoaWxkcmVuKSB7XG5cdFx0Y2hpbGRyZW4gPSBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoIT09MSkgdGhyb3cgbmV3IEVycm9yKCdDaGlsZHJlbi5vbmx5KCkgZXhwZWN0cyBvbmx5IG9uZSBjaGlsZC4nKTtcblx0XHRyZXR1cm4gY2hpbGRyZW5bMF07XG5cdH0sXG5cdHRvQXJyYXkoY2hpbGRyZW4pIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSAmJiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogQVJSLmNvbmNhdChjaGlsZHJlbik7XG5cdH1cbn07XG5cblxuLyoqIFRyYWNrIGN1cnJlbnQgcmVuZGVyKCkgY29tcG9uZW50IGZvciByZWYgYXNzaWdubWVudCAqL1xubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5cblxuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cblxubGV0IERPTSA9IHt9O1xuZm9yIChsZXQgaT1FTEVNRU5UUy5sZW5ndGg7IGktLTsgKSB7XG5cdERPTVtFTEVNRU5UU1tpXV0gPSBjcmVhdGVGYWN0b3J5KEVMRU1FTlRTW2ldKTtcbn1cblxuZnVuY3Rpb24gdXBncmFkZVRvVk5vZGVzKGFyciwgb2Zmc2V0KSB7XG5cdGZvciAobGV0IGk9b2Zmc2V0IHx8IDA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IG9iaiA9IGFycltpXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG5cdFx0XHR1cGdyYWRlVG9WTm9kZXMob2JqKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmo9PT0nb2JqZWN0JyAmJiAhaXNWYWxpZEVsZW1lbnQob2JqKSAmJiAoKG9iai5wcm9wcyAmJiBvYmoudHlwZSkgfHwgKG9iai5hdHRyaWJ1dGVzICYmIG9iai5ub2RlTmFtZSkgfHwgb2JqLmNoaWxkcmVuKSkge1xuXHRcdFx0YXJyW2ldID0gY3JlYXRlRWxlbWVudChvYmoudHlwZSB8fCBvYmoubm9kZU5hbWUsIG9iai5wcm9wcyB8fCBvYmouYXR0cmlidXRlcywgb2JqLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0ZWxlc3NDb21wb25lbnQoYykge1xuXHRyZXR1cm4gdHlwZW9mIGM9PT0nZnVuY3Rpb24nICYmICEoYy5wcm90b3R5cGUgJiYgYy5wcm90b3R5cGUucmVuZGVyKTtcbn1cblxuXG4vLyB3cmFwcyBzdGF0ZWxlc3MgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIGEgUHJvcFR5cGVzIHZhbGlkYXRvclxuZnVuY3Rpb24gd3JhcFN0YXRlbGVzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSB7XG5cdHJldHVybiBjcmVhdGVDbGFzcyh7XG5cdFx0ZGlzcGxheU5hbWU6IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lLFxuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiBXcmFwcGVkQ29tcG9uZW50KHRoaXMucHJvcHMsIHRoaXMuY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5mdW5jdGlvbiBzdGF0ZWxlc3NDb21wb25lbnRIb29rKEN0b3IpIHtcblx0bGV0IFdyYXBwZWQgPSBDdG9yW0NPTVBPTkVOVF9XUkFQUEVSX0tFWV07XG5cdGlmIChXcmFwcGVkKSByZXR1cm4gV3JhcHBlZD09PXRydWUgPyBDdG9yIDogV3JhcHBlZDtcblxuXHRXcmFwcGVkID0gd3JhcFN0YXRlbGVzc0NvbXBvbmVudChDdG9yKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JhcHBlZCwgQ09NUE9ORU5UX1dSQVBQRVJfS0VZLCB7IGNvbmZpZ3VyYWJsZTp0cnVlLCB2YWx1ZTp0cnVlIH0pO1xuXHRXcmFwcGVkLmRpc3BsYXlOYW1lID0gQ3Rvci5kaXNwbGF5TmFtZTtcblx0V3JhcHBlZC5wcm9wVHlwZXMgPSBDdG9yLnByb3BUeXBlcztcblx0V3JhcHBlZC5kZWZhdWx0UHJvcHMgPSBDdG9yLmRlZmF1bHRQcm9wcztcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3RvciwgQ09NUE9ORU5UX1dSQVBQRVJfS0VZLCB7IGNvbmZpZ3VyYWJsZTp0cnVlLCB2YWx1ZTpXcmFwcGVkIH0pO1xuXG5cdHJldHVybiBXcmFwcGVkO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoLi4uYXJncykge1xuXHR1cGdyYWRlVG9WTm9kZXMoYXJncywgMik7XG5cdHJldHVybiBub3JtYWxpemVWTm9kZShoKC4uLmFyZ3MpKTtcbn1cblxuXG5mdW5jdGlvbiBub3JtYWxpemVWTm9kZSh2bm9kZSkge1xuXHR2bm9kZS5wcmVhY3RDb21wYXROb3JtYWxpemVkID0gdHJ1ZTtcblxuXHRhcHBseUNsYXNzTmFtZSh2bm9kZSk7XG5cblx0aWYgKGlzU3RhdGVsZXNzQ29tcG9uZW50KHZub2RlLm5vZGVOYW1lKSkge1xuXHRcdHZub2RlLm5vZGVOYW1lID0gc3RhdGVsZXNzQ29tcG9uZW50SG9vayh2bm9kZS5ub2RlTmFtZSk7XG5cdH1cblxuXHRsZXQgcmVmID0gdm5vZGUuYXR0cmlidXRlcy5yZWYsXG5cdFx0dHlwZSA9IHJlZiAmJiB0eXBlb2YgcmVmO1xuXHRpZiAoY3VycmVudENvbXBvbmVudCAmJiAodHlwZT09PSdzdHJpbmcnIHx8IHR5cGU9PT0nbnVtYmVyJykpIHtcblx0XHR2bm9kZS5hdHRyaWJ1dGVzLnJlZiA9IGNyZWF0ZVN0cmluZ1JlZlByb3h5KHJlZiwgY3VycmVudENvbXBvbmVudCk7XG5cdH1cblxuXHRhcHBseUV2ZW50Tm9ybWFsaXphdGlvbih2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdGxldCBlbGVtZW50UHJvcHMgPSBlbGVtZW50LmF0dHJpYnV0ZXMgfHwgZWxlbWVudC5wcm9wcztcblx0bGV0IG5vZGUgPSBoKFxuXHRcdGVsZW1lbnQubm9kZU5hbWUgfHwgZWxlbWVudC50eXBlLFxuXHRcdGVsZW1lbnRQcm9wcyxcblx0XHRlbGVtZW50LmNoaWxkcmVuIHx8IGVsZW1lbnRQcm9wcyAmJiBlbGVtZW50UHJvcHMuY2hpbGRyZW5cblx0KTtcblx0cmV0dXJuIG5vcm1hbGl6ZVZOb2RlKHByZWFjdENsb25lRWxlbWVudChub2RlLCBwcm9wcywgLi4uY2hpbGRyZW4pKTtcbn1cblxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChlbGVtZW50KSB7XG5cdHJldHVybiBlbGVtZW50ICYmICgoZWxlbWVudCBpbnN0YW5jZW9mIFZOb2RlKSB8fCBlbGVtZW50LiQkdHlwZW9mPT09UkVBQ1RfRUxFTUVOVF9UWVBFKTtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdSZWZQcm94eShuYW1lLCBjb21wb25lbnQpIHtcblx0cmV0dXJuIGNvbXBvbmVudC5fcmVmUHJveGllc1tuYW1lXSB8fCAoY29tcG9uZW50Ll9yZWZQcm94aWVzW25hbWVdID0gcmVzb2x2ZWQgPT4ge1xuXHRcdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnJlZnMpIHtcblx0XHRcdGNvbXBvbmVudC5yZWZzW25hbWVdID0gcmVzb2x2ZWQ7XG5cdFx0XHRpZiAocmVzb2x2ZWQ9PT1udWxsKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb21wb25lbnQuX3JlZlByb3hpZXNbbmFtZV07XG5cdFx0XHRcdGNvbXBvbmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUV2ZW50Tm9ybWFsaXphdGlvbih7IG5vZGVOYW1lLCBhdHRyaWJ1dGVzIH0pIHtcblx0aWYgKCFhdHRyaWJ1dGVzIHx8IHR5cGVvZiBub2RlTmFtZSE9PSdzdHJpbmcnKSByZXR1cm47XG5cdGxldCBwcm9wcyA9IHt9O1xuXHRmb3IgKGxldCBpIGluIGF0dHJpYnV0ZXMpIHtcblx0XHRwcm9wc1tpLnRvTG93ZXJDYXNlKCldID0gaTtcblx0fVxuXHRpZiAocHJvcHMub25kb3VibGVjbGljaykge1xuXHRcdGF0dHJpYnV0ZXMub25kYmxjbGljayA9IGF0dHJpYnV0ZXNbcHJvcHMub25kb3VibGVjbGlja107XG5cdFx0ZGVsZXRlIGF0dHJpYnV0ZXNbcHJvcHMub25kb3VibGVjbGlja107XG5cdH1cblx0Ly8gZm9yICp0ZXh0dWFsIGlucHV0cyogKGluY2wgdGV4dGFyZWEpLCBub3JtYWxpemUgYG9uQ2hhbmdlYCAtPiBgb25JbnB1dGA6XG5cdGlmIChwcm9wcy5vbmNoYW5nZSAmJiAobm9kZU5hbWU9PT0ndGV4dGFyZWEnIHx8IChub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09J2lucHV0JyAmJiAhL15maWx8Y2hlfHJhZC9pLnRlc3QoYXR0cmlidXRlcy50eXBlKSkpKSB7XG5cdFx0bGV0IG5vcm1hbGl6ZWQgPSBwcm9wcy5vbmlucHV0IHx8ICdvbmlucHV0Jztcblx0XHRpZiAoIWF0dHJpYnV0ZXNbbm9ybWFsaXplZF0pIHtcblx0XHRcdGF0dHJpYnV0ZXNbbm9ybWFsaXplZF0gPSBtdWx0aWhvb2soW2F0dHJpYnV0ZXNbbm9ybWFsaXplZF0sIGF0dHJpYnV0ZXNbcHJvcHMub25jaGFuZ2VdXSk7XG5cdFx0XHRkZWxldGUgYXR0cmlidXRlc1twcm9wcy5vbmNoYW5nZV07XG5cdFx0fVxuXHR9XG59XG5cblxuZnVuY3Rpb24gYXBwbHlDbGFzc05hbWUoeyBhdHRyaWJ1dGVzIH0pIHtcblx0aWYgKCFhdHRyaWJ1dGVzKSByZXR1cm47XG5cdGxldCBjbCA9IGF0dHJpYnV0ZXMuY2xhc3NOYW1lIHx8IGF0dHJpYnV0ZXMuY2xhc3M7XG5cdGlmIChjbCkgYXR0cmlidXRlcy5jbGFzc05hbWUgPSBjbDtcbn1cblxuXG5mdW5jdGlvbiBleHRlbmQoYmFzZSwgcHJvcHMpIHtcblx0Zm9yIChsZXQga2V5IGluIHByb3BzKSB7XG5cdFx0aWYgKHByb3BzLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGJhc2Vba2V5XSA9IHByb3BzW2tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiYXNlO1xufVxuXG5cbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKGEsIGIpIHtcblx0Zm9yIChsZXQgaSBpbiBhKSBpZiAoIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoYVtpXSE9PWJbaV0pIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50KSB7XG5cdHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50LmJhc2UgfHwgY29tcG9uZW50O1xufVxuXG5cbmZ1bmN0aW9uIEYoKXt9XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKG9iaikge1xuXHRmdW5jdGlvbiBjbChwcm9wcywgY29udGV4dCkge1xuXHRcdGJpbmRBbGwodGhpcyk7XG5cdFx0Q29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQsIEJZUEFTU19IT09LKTtcblx0XHRuZXdDb21wb25lbnRIb29rLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpO1xuXHR9XG5cblx0b2JqID0gZXh0ZW5kKHsgY29uc3RydWN0b3I6IGNsIH0sIG9iaik7XG5cblx0Ly8gV2UgbmVlZCB0byBhcHBseSBtaXhpbnMgaGVyZSBzbyB0aGF0IGdldERlZmF1bHRQcm9wcyBpcyBjb3JyZWN0bHkgbWl4ZWRcblx0aWYgKG9iai5taXhpbnMpIHtcblx0XHRhcHBseU1peGlucyhvYmosIGNvbGxhdGVNaXhpbnMob2JqLm1peGlucykpO1xuXHR9XG5cdGlmIChvYmouc3RhdGljcykge1xuXHRcdGV4dGVuZChjbCwgb2JqLnN0YXRpY3MpO1xuXHR9XG5cdGlmIChvYmoucHJvcFR5cGVzKSB7XG5cdFx0Y2wucHJvcFR5cGVzID0gb2JqLnByb3BUeXBlcztcblx0fVxuXHRpZiAob2JqLmRlZmF1bHRQcm9wcykge1xuXHRcdGNsLmRlZmF1bHRQcm9wcyA9IG9iai5kZWZhdWx0UHJvcHM7XG5cdH1cblx0aWYgKG9iai5nZXREZWZhdWx0UHJvcHMpIHtcblx0XHRjbC5kZWZhdWx0UHJvcHMgPSBvYmouZ2V0RGVmYXVsdFByb3BzKCk7XG5cdH1cblxuXHRGLnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG5cdGNsLnByb3RvdHlwZSA9IGV4dGVuZChuZXcgRigpLCBvYmopO1xuXG5cdGNsLmRpc3BsYXlOYW1lID0gb2JqLmRpc3BsYXlOYW1lIHx8ICdDb21wb25lbnQnO1xuXG5cdHJldHVybiBjbDtcbn1cblxuXG4vLyBGbGF0dGVuIGFuIEFycmF5IG9mIG1peGlucyB0byBhIG1hcCBvZiBtZXRob2QgbmFtZSB0byBtaXhpbiBpbXBsZW1lbnRhdGlvbnNcbmZ1bmN0aW9uIGNvbGxhdGVNaXhpbnMobWl4aW5zKSB7XG5cdGxldCBrZXllZCA9IHt9O1xuXHRmb3IgKGxldCBpPTA7IGk8bWl4aW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IG1peGluID0gbWl4aW5zW2ldO1xuXHRcdGZvciAobGV0IGtleSBpbiBtaXhpbikge1xuXHRcdFx0aWYgKG1peGluLmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIG1peGluW2tleV09PT0nZnVuY3Rpb24nKSB7XG5cdFx0XHRcdChrZXllZFtrZXldIHx8IChrZXllZFtrZXldPVtdKSkucHVzaChtaXhpbltrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGtleWVkO1xufVxuXG5cbi8vIGFwcGx5IGEgbWFwcGluZyBvZiBBcnJheXMgb2YgbWl4aW4gbWV0aG9kcyB0byBhIGNvbXBvbmVudCBwcm90b3R5cGVcbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKHByb3RvLCBtaXhpbnMpIHtcblx0Zm9yIChsZXQga2V5IGluIG1peGlucykgaWYgKG1peGlucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0cHJvdG9ba2V5XSA9IG11bHRpaG9vayhcblx0XHRcdG1peGluc1trZXldLmNvbmNhdChwcm90b1trZXldIHx8IEFSUiksXG5cdFx0XHRrZXk9PT0nZ2V0RGVmYXVsdFByb3BzJyB8fCBrZXk9PT0nZ2V0SW5pdGlhbFN0YXRlJyB8fCBrZXk9PT0nZ2V0Q2hpbGRDb250ZXh0J1xuXHRcdCk7XG5cdH1cbn1cblxuXG5mdW5jdGlvbiBiaW5kQWxsKGN0eCkge1xuXHRmb3IgKGxldCBpIGluIGN0eCkge1xuXHRcdGxldCB2ID0gY3R4W2ldO1xuXHRcdGlmICh0eXBlb2Ygdj09PSdmdW5jdGlvbicgJiYgIXYuX19ib3VuZCAmJiAhQVVUT0JJTkRfQkxBQ0tMSVNULmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHQoY3R4W2ldID0gdi5iaW5kKGN0eCkpLl9fYm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5cbmZ1bmN0aW9uIGNhbGxNZXRob2QoY3R4LCBtLCBhcmdzKSB7XG5cdGlmICh0eXBlb2YgbT09PSdzdHJpbmcnKSB7XG5cdFx0bSA9IGN0eC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbbV07XG5cdH1cblx0aWYgKHR5cGVvZiBtPT09J2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBtLmFwcGx5KGN0eCwgYXJncyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gbXVsdGlob29rKGhvb2tzLCBza2lwRHVwbGljYXRlcykge1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0bGV0IHJldDtcblx0XHRmb3IgKGxldCBpPTA7IGk8aG9va3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCByID0gY2FsbE1ldGhvZCh0aGlzLCBob29rc1tpXSwgYXJndW1lbnRzKTtcblxuXHRcdFx0aWYgKHNraXBEdXBsaWNhdGVzICYmIHIhPW51bGwpIHtcblx0XHRcdFx0aWYgKCFyZXQpIHJldCA9IHt9O1xuXHRcdFx0XHRmb3IgKGxldCBrZXkgaW4gcikgaWYgKHIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdHJldFtrZXldID0gcltrZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgciE9PSd1bmRlZmluZWQnKSByZXQgPSByO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufVxuXG5cbmZ1bmN0aW9uIG5ld0NvbXBvbmVudEhvb2socHJvcHMsIGNvbnRleHQpIHtcblx0cHJvcHNIb29rLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpO1xuXHR0aGlzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBtdWx0aWhvb2soW3Byb3BzSG9vaywgdGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHx8ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJ10pO1xuXHR0aGlzLnJlbmRlciA9IG11bHRpaG9vayhbcHJvcHNIb29rLCBiZWZvcmVSZW5kZXIsIHRoaXMucmVuZGVyIHx8ICdyZW5kZXInLCBhZnRlclJlbmRlcl0pO1xufVxuXG5cbmZ1bmN0aW9uIHByb3BzSG9vayhwcm9wcywgY29udGV4dCkge1xuXHRpZiAoIXByb3BzKSByZXR1cm47XG5cblx0Ly8gUmVhY3QgYW5ub3lpbmdseSBzcGVjaWFsLWNhc2VzIHNpbmdsZSBjaGlsZHJlbiwgYW5kIHNvbWUgcmVhY3QgY29tcG9uZW50cyBhcmUgcmlkaWN1bG91c2x5IHN0cmljdCBhYm91dCB0aGlzLlxuXHRsZXQgYyA9IHByb3BzLmNoaWxkcmVuO1xuXHRpZiAoYyAmJiBBcnJheS5pc0FycmF5KGMpICYmIGMubGVuZ3RoPT09MSkge1xuXHRcdHByb3BzLmNoaWxkcmVuID0gY1swXTtcblxuXHRcdC8vIGJ1dCBpdHMgdG90YWxseSBzdGlsbCBnb2luZyB0byBiZSBhbiBBcnJheS5cblx0XHRpZiAocHJvcHMuY2hpbGRyZW4gJiYgdHlwZW9mIHByb3BzLmNoaWxkcmVuPT09J29iamVjdCcpIHtcblx0XHRcdHByb3BzLmNoaWxkcmVuLmxlbmd0aCA9IDE7XG5cdFx0XHRwcm9wcy5jaGlsZHJlblswXSA9IHByb3BzLmNoaWxkcmVuO1xuXHRcdH1cblx0fVxuXG5cdC8vIGFkZCBwcm9wdHlwZSBjaGVja2luZ1xuXHRpZiAoREVWKSB7XG5cdFx0bGV0IGN0b3IgPSB0eXBlb2YgdGhpcz09PSdmdW5jdGlvbicgPyB0aGlzIDogdGhpcy5jb25zdHJ1Y3Rvcixcblx0XHRcdHByb3BUeXBlcyA9IHRoaXMucHJvcFR5cGVzIHx8IGN0b3IucHJvcFR5cGVzO1xuXHRcdGlmIChwcm9wVHlwZXMpIHtcblx0XHRcdGZvciAobGV0IHByb3AgaW4gcHJvcFR5cGVzKSB7XG5cdFx0XHRcdGlmIChwcm9wVHlwZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgdHlwZW9mIHByb3BUeXBlc1twcm9wXT09PSdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lO1xuXHRcdFx0XHRcdGxldCBlcnIgPSBwcm9wVHlwZXNbcHJvcF0ocHJvcHMsIHByb3AsIGRpc3BsYXlOYW1lLCAncHJvcCcpO1xuXHRcdFx0XHRcdGlmIChlcnIpIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGVyci5tZXNzYWdlIHx8IGVycikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cblxuZnVuY3Rpb24gYmVmb3JlUmVuZGVyKHByb3BzKSB7XG5cdGN1cnJlbnRDb21wb25lbnQgPSB0aGlzO1xufVxuXG5mdW5jdGlvbiBhZnRlclJlbmRlcigpIHtcblx0aWYgKGN1cnJlbnRDb21wb25lbnQ9PT10aGlzKSB7XG5cdFx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdH1cbn1cblxuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgb3B0cykge1xuXHRQcmVhY3RDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdHRoaXMuc3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiB7fTtcblx0dGhpcy5yZWZzID0ge307XG5cdHRoaXMuX3JlZlByb3hpZXMgPSB7fTtcblx0aWYgKG9wdHMhPT1CWVBBU1NfSE9PSykge1xuXHRcdG5ld0NvbXBvbmVudEhvb2suY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCk7XG5cdH1cbn1cbmV4dGVuZChDb21wb25lbnQucHJvdG90eXBlID0gbmV3IFByZWFjdENvbXBvbmVudCgpLCB7XG5cdGNvbnN0cnVjdG9yOiBDb21wb25lbnQsXG5cblx0aXNSZWFjdENvbXBvbmVudDoge30sXG5cblx0cmVwbGFjZVN0YXRlKHN0YXRlLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuc2V0U3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcblx0XHRmb3IgKGxldCBpIGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdGlmICghKGkgaW4gc3RhdGUpKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnN0YXRlW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRnZXRET01Ob2RlKCkge1xuXHRcdHJldHVybiB0aGlzLmJhc2U7XG5cdH0sXG5cblx0aXNNb3VudGVkKCkge1xuXHRcdHJldHVybiAhIXRoaXMuYmFzZTtcblx0fVxufSk7XG5cblxuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG5cdENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KTtcbn1cbkYucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IEYoKTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uKHByb3BzLCBzdGF0ZSkge1xuXHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgcHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn07XG5cblxuXG5leHBvcnQge1xuXHR2ZXJzaW9uLFxuXHRET00sXG5cdFByb3BUeXBlcyxcblx0Q2hpbGRyZW4sXG5cdHJlbmRlcixcblx0Y3JlYXRlQ2xhc3MsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNsb25lRWxlbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGZpbmRET01Ob2RlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIGFzIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdHZlcnNpb24sXG5cdERPTSxcblx0UHJvcFR5cGVzLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRjcmVhdGVDbGFzcyxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y2xvbmVFbGVtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0ZmluZERPTU5vZGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdENvbXBvbmVudCxcblx0UHVyZUNvbXBvbmVudCxcblx0dW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wcmVhY3QtY29tcGF0L3NyYy9pbmRleC5qcyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICBwcml2YXRlIHR5cGVWYWx1ZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2hvaWNlc1ZhbHVlOiBBcnJheTxhbnk+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2hvaWNlc2Z1bmM6ICgpID0+IEFycmF5PGFueT4gPSBudWxsO1xyXG4gICAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBhbHRlcm5hdGl2ZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xhc3NOYW1lUGFydDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbDtcclxuICAgIHB1YmxpYyByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGlzTG9jYWxpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZXJpYWxpemF0aW9uUHJvcGVydHk6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgb25HZXRWYWx1ZTogKG9iajogYW55KSA9PiBhbnkgPSBudWxsO1xyXG4gICAgcHVibGljIG9uU2V0VmFsdWU6IChvYmo6IGFueSwgdmFsdWU6IGFueSwganNvbkNvbnY6IEpzb25PYmplY3QpID0+IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudHlwZVZhbHVlID8gdGhpcy50eXBlVmFsdWUgOiBcInN0cmluZ1wiOyB9XHJcbiAgICBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IHN0cmluZykgeyB0aGlzLnR5cGVWYWx1ZSA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1RvVXNlR2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLm9uR2V0VmFsdWUgfHwgdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHk7IH1cclxuICAgIHB1YmxpYyBpc0RlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmRlZmF1bHRWYWx1ZSkgPyAodGhpcy5kZWZhdWx0VmFsdWUgPT0gdmFsdWUpIDogISh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uR2V0VmFsdWUpIHJldHVybiB0aGlzLm9uR2V0VmFsdWUob2JqKTtcclxuICAgICAgICBpZih0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uZ2V0SnNvbigpO1xyXG4gICAgICAgIHJldHVybiBvYmpbdGhpcy5uYW1lXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55KTogYW55IHtcclxuICAgICAgICBpZih0aGlzLmlzTG9jYWxpemFibGUpIHJldHVybiBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUob2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVG9Vc2VTZXRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMub25TZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTsgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNldFZhbHVlKG9iaiwgdmFsdWUsIGpzb25Db252KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkgXHJcbiAgICAgICAgICAgICAgICBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnNldEpzb24odmFsdWUpO1xyXG4gICAgICAgICAgICBlbHNlIG9ialt0aGlzLm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldE9ialR5cGUob2JqVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsYXNzTmFtZVBhcnQpIHJldHVybiBvYmpUeXBlO1xyXG4gICAgICAgIHJldHVybiBvYmpUeXBlLnJlcGxhY2UodGhpcy5jbGFzc05hbWVQYXJ0LCBcIlwiKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5jbGFzc05hbWVQYXJ0ICYmIGNsYXNzTmFtZS5pbmRleE9mKHRoaXMuY2xhc3NOYW1lUGFydCkgPCAwKSA/IGNsYXNzTmFtZSArIHRoaXMuY2xhc3NOYW1lUGFydCA6IGNsYXNzTmFtZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNmdW5jICE9IG51bGwpIHJldHVybiB0aGlzLmNob2ljZXNmdW5jKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q2hvaWNlcyh2YWx1ZTogQXJyYXk8YW55PiwgdmFsdWVGdW5jOiAoKSA9PiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmNob2ljZXNmdW5jID0gdmFsdWVGdW5jO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICBzdGF0aWMgcmVxdWlyZWRTeW1ib2wgPSAnISc7XHJcbiAgICBzdGF0aWMgdHlwZVN5bWJvbCA9ICc6JztcclxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4gPSBudWxsO1xyXG4gICAgcmVxdWlyZWRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IEFycmF5PGFueT4sIHB1YmxpYyBjcmVhdG9yOiAoKSA9PiBhbnkgPSBudWxsLCBwdWJsaWMgcGFyZW50TmFtZTogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5jcmVhdGVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldKTtcclxuICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZpbmQobmFtZTogc3RyaW5nKTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucHJvcGVydGllc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlUHJvcGVydHkocHJvcEluZm86IGFueSk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHR5cGVvZiBwcm9wSW5mbyA9PT0gXCJzdHJpbmdcIiA/IHByb3BJbmZvIDogcHJvcEluZm8ubmFtZTtcclxuICAgICAgICBpZiAoIXByb3BlcnR5TmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBudWxsO1xyXG4gICAgICAgIHZhciB0eXBlSW5kZXggPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZihKc29uTWV0YWRhdGFDbGFzcy50eXBlU3ltYm9sKTtcclxuICAgICAgICBpZiAodHlwZUluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyh0eXBlSW5kZXggKyAxKTtcclxuICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCB0eXBlSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSB0aGlzLmdldFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIHZhciBwcm9wID0gbmV3IEpzb25PYmplY3RQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICAgICAgcHJvcC50eXBlID0gcHJvcGVydHlUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHByb3BJbmZvID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLnR5cGUgPSBwcm9wSW5mby50eXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmRlZmF1bHRWYWx1ZSA9IHByb3BJbmZvLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8udmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHByb3AudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5pc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VQcm9wZXJ0eVJlcXVpcmVkKHByb3AubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNob2ljZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaG9pY2VzRnVuYyA9IHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzID09PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHZhciBjaG9pY2VzVmFsdWUgPSB0eXBlb2YgcHJvcEluZm8uY2hvaWNlcyAhPT0gXCJmdW5jdGlvblwiID8gcHJvcEluZm8uY2hvaWNlcyA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBwcm9wLnNldENob2ljZXMoY2hvaWNlc1ZhbHVlLCBjaG9pY2VzRnVuYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLm9uR2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3Aub25HZXRWYWx1ZSA9IHByb3BJbmZvLm9uR2V0VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLm9uU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3Aub25TZXRWYWx1ZSA9IHByb3BJbmZvLm9uU2V0VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSA9IHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcclxuICAgICAgICAgICAgICAgIHZhciBzOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBpZihwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJiBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eS5pbmRleE9mKFwibG9jXCIpID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSB0cnVlOyAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby5pc0xvY2FsaXphYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSBwcm9wSW5mby5pc0xvY2FsaXphYmxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuY2xhc3NOYW1lID0gcHJvcEluZm8uY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5iYXNlQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmJhc2VDbGFzc05hbWUgPSBwcm9wSW5mby5iYXNlQ2xhc3NOYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWVQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmNsYXNzTmFtZVBhcnQgPSBwcm9wSW5mby5jbGFzc05hbWVQYXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPSBwcm9wSW5mby5hbHRlcm5hdGl2ZU5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5sZW5ndGggPT0gMCB8fCBwcm9wZXJ0eU5hbWVbMF0gIT0gSnNvbk1ldGFkYXRhQ2xhc3MucmVxdWlyZWRTeW1ib2wpIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnNsaWNlKDEpO1xyXG4gICAgICAgIHRoaXMubWFrZVByb3BlcnR5UmVxdWlyZWQocHJvcGVydHlOYW1lKTtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtYWtlUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1aXJlZFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZFByb3BlcnRpZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlcXVpcmVkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YSB7XHJcbiAgICBwcml2YXRlIGNsYXNzZXM6IEhhc2hUYWJsZTxKc29uTWV0YWRhdGFDbGFzcz4gPSB7fTtcclxuICAgIHByaXZhdGUgY2hpbGRyZW5DbGFzc2VzOiBIYXNoVGFibGU8QXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjbGFzc1Byb3BlcnRpZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjbGFzc1JlcXVpcmVkUHJvcGVydGllczogSGFzaFRhYmxlPEFycmF5PHN0cmluZz4+ID0ge307XHJcbiAgICBwdWJsaWMgYWRkQ2xhc3MobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiBBcnJheTxhbnk+LCBjcmVhdG9yOiAoKSA9PiBhbnkgPSBudWxsLCBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gbmV3IEpzb25NZXRhZGF0YUNsYXNzKG5hbWUsIHByb3BlcnRpZXMsIGNyZWF0b3IsIHBhcmVudE5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2xhc3Nlc1tuYW1lXSA9IG1ldGFEYXRhQ2xhc3M7XHJcbiAgICAgICAgaWYgKHBhcmVudE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV07XHJcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0ucHVzaChtZXRhRGF0YUNsYXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhQ2xhc3M7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb3ZlcnJpZGVDbGFzc0NyZWF0b3JlKG5hbWU6IHN0cmluZywgY3JlYXRvcjogKCkgPT4gYW55KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcykge1xyXG4gICAgICAgICAgICBtZXRhRGF0YUNsYXNzLmNyZWF0b3IgPSBjcmVhdG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzUHJvcGVydGllc1tjbGFzc05hbWVdO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzUHJvcGVydGllc1tjbGFzc05hbWVdID0gcHJvcGVydGllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZmluZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykgOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmKHByb3BlcnRpZXNbaV0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHJldHVybiBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVDbGFzcyhuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbWV0YURhdGFDbGFzcy5jcmVhdG9yKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW5DbGFzc2VzKG5hbWU6IHN0cmluZywgY2FuQmVDcmVhdGVkOiBib29sZWFuID0gZmFsc2UpOiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZSwgY2FuQmVDcmVhdGVkLCByZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5jbGFzc1JlcXVpcmVkUHJvcGVydGllc1tuYW1lXTtcclxuICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlcXVpcmVkUHJvcGVydGllcyhuYW1lLCBwcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc1JlcXVpcmVkUHJvcGVydGllc1tuYW1lXSA9IHByb3BlcnRpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eUluZm86IGFueSkge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcclxuICAgICAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5SW5mbyk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlUb0NsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmZpbmQocHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkUHJvcGVydHlUb0NsYXNzKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eS5uYW1lKSAhPSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhtZXRhRGF0YUNsYXNzOiBKc29uTWV0YWRhdGFDbGFzcywgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KTtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XHJcbiAgICAgICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gbWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzOiBKc29uTWV0YWRhdGFDbGFzcykge1xyXG4gICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW21ldGFEYXRhQ2xhc3MubmFtZV0gPSBudWxsO1xyXG4gICAgICAgIHZhciBjaGlsZENsYXNzZXMgPSB0aGlzLmdldENoaWxkcmVuQ2xhc3NlcyhtZXRhRGF0YUNsYXNzLm5hbWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaWxsQ2hpbGRyZW5DbGFzc2VzKG5hbWU6IHN0cmluZywgY2FuQmVDcmVhdGVkOiBib29sZWFuLCByZXN1bHQ6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPikge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW25hbWVdO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4pIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghY2FuQmVDcmVhdGVkIHx8IGNoaWxkcmVuW2ldLmNyZWF0b3IpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZpbGxDaGlsZHJlbkNsYXNzZXMoY2hpbGRyZW5baV0ubmFtZSwgY2FuQmVDcmVhdGVkLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBmaW5kQ2xhc3MobmFtZTogc3RyaW5nKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsYXNzZXNbbmFtZV07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbGxQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZywgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Pikge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSwgbGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlDb3JlKG1ldGFEYXRhQ2xhc3MucHJvcGVydGllc1tpXSwgbGlzdCwgbGlzdC5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkUHJvcGVydHlDb3JlKHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksIGxpc3Q6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sIGVuZEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZEluZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIGxpc3QucHVzaChwcm9wZXJ0eSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsaXN0W2luZGV4XSA9IHByb3BlcnR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZmlsbFJlcXVpcmVkUHJvcGVydGllcyhuYW1lOiBzdHJpbmcsIGxpc3Q6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsaXN0LCBtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSwgbGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uRXJyb3Ige1xyXG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGF0OiBOdW1iZXIgPSAtMTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlOiBzdHJpbmcsIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRGdWxsRGVzY3JpcHRpb24oKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZSArICh0aGlzLmRlc2NyaXB0aW9uID8gXCJcXG5cIiArIHRoaXMuZGVzY3JpcHRpb24gOiBcIlwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoXCJ1bmtub3ducHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgJ1wiICsgcHJvcGVydHlOYW1lICsgXCInIGluIGNsYXNzICdcIiArIGNsYXNzTmFtZSArIFwiJyBpcyB1bmtub3duLlwiKTtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGFyZTogXCI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gcHJvcGVydGllc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gJy4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcsIHB1YmxpYyB0eXBlOiBzdHJpbmcsIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcih0eXBlLCBtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBhdmFpbGFibGU6IFwiO1xyXG4gICAgICAgIHZhciB0eXBlcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0Q2hpbGRyZW5DbGFzc2VzKGJhc2VDbGFzc05hbWUsIHRydWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIidcIiArIHR5cGVzW2ldLm5hbWUgKyBcIidcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIi5cIjtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3IgZXh0ZW5kcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoYmFzZUNsYXNzTmFtZSwgXCJtaXNzaW5ndHlwZXByb3BlcnR5XCIsIFwiVGhlIHByb3BlcnR5IHR5cGUgaXMgbWlzc2luZyBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IgZXh0ZW5kcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoYmFzZUNsYXNzTmFtZSwgXCJpbmNvcnJlY3R0eXBlcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBpbmNvcnJlY3QgaW4gdGhlIG9iamVjdC4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHByb3BlcnR5OiAnXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIicuXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoXCJyZXF1aXJlZHByb3BlcnR5XCIsIFwiVGhlIHByb3BlcnR5ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJyBpcyByZXF1aXJlZCBpbiBjbGFzcyAnXCIgKyBjbGFzc05hbWUgKyBcIicuXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdCB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyB0eXBlUHJvcGVydHlOYW1lID0gXCJ0eXBlXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBwb3NpdGlvblByb3BlcnR5TmFtZSA9IFwicG9zXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBtZXRhRGF0YVZhbHVlID0gbmV3IEpzb25NZXRhZGF0YSgpO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgbWV0YURhdGEoKSB7IHJldHVybiBKc29uT2JqZWN0Lm1ldGFEYXRhVmFsdWU7IH1cclxuICAgIHB1YmxpYyBlcnJvcnMgPSBuZXcgQXJyYXk8SnNvbkVycm9yPigpO1xyXG4gICAgcHVibGljIHRvSnNvbk9iamVjdChvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Kc29uT2JqZWN0Q29yZShvYmosIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHRvT2JqZWN0KGpzb25PYmo6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWpzb25PYmopIHJldHVybjtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKG9iai5nZXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT0gSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGtleSA9PSBKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGpzb25PYmpba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZmluZFByb3BlcnR5KHByb3BlcnRpZXMsIGtleSk7XHJcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IobmV3IEpzb25Vbmtub3duUHJvcGVydHlFcnJvcihrZXkudG9TdHJpbmcoKSwgb2JqLmdldFR5cGUoKSksIGpzb25PYmopO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvT2JqKGpzb25PYmpba2V5XSwgb2JqLCBrZXksIHByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdG9Kc29uT2JqZWN0Q29yZShvYmo6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFvYmouZ2V0VHlwZSkgcmV0dXJuIG9iajtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKHByb3BlcnR5ICE9IG51bGwgJiYgKCFwcm9wZXJ0eS5jbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWVdID0gcHJvcGVydHkuZ2V0T2JqVHlwZShvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvSnNvbihvYmosIHJlc3VsdCwgcHJvcGVydGllc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0pzb24ob2JqOiBhbnksIHJlc3VsdDogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydHkuZ2V0VmFsdWUob2JqKTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZVtpXSwgcHJvcGVydHkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWx1ZSA9IGFyclZhbHVlLmxlbmd0aCA+IDAgPyBhcnJWYWx1ZSA6IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSnNvbk9iamVjdENvcmUodmFsdWUsIHByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9PYmoodmFsdWU6IGFueSwgb2JqOiBhbnksIGtleTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5oYXNUb1VzZVNldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5LnNldFZhbHVlKG9iaiwgdmFsdWUsIHRoaXMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvQXJyYXkodmFsdWUsIG9iaiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBuZXdPYmogPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZSwgcHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChuZXdPYmoubmV3T2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9PYmplY3QodmFsdWUsIG5ld09iai5uZXdPYmopO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ld09iai5uZXdPYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbmV3T2JqLmVycm9yKSB7XHJcbiAgICAgICAgICAgIG9ialtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUFycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHsgcmV0dXJuIHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpOyB9XHJcbiAgICBwcml2YXRlIGNyZWF0ZU5ld09iaih2YWx1ZTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0geyBuZXdPYmo6IG51bGwsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHZhbHVlW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgaWYgKCFjbGFzc05hbWUgJiYgcHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5jbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgY2xhc3NOYW1lID0gcHJvcGVydHkuY2xhc3NOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5nZXRDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuICAgICAgICByZXN1bHQubmV3T2JqID0gKGNsYXNzTmFtZSkgPyBKc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGNsYXNzTmFtZSkgOiBudWxsO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY2hlY2tOZXdPYmplY3RPbkVycm9ycyhyZXN1bHQubmV3T2JqLCB2YWx1ZSwgcHJvcGVydHksIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tOZXdPYmplY3RPbkVycm9ycyhuZXdPYmo6IGFueSwgdmFsdWU6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBKc29uRXJyb3Ige1xyXG4gICAgICAgIHZhciBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgaWYgKG5ld09iaikge1xyXG4gICAgICAgICAgICB2YXIgcmVxdWlyZWRQcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRSZXF1aXJlZFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlW3JlcXVpcmVkUHJvcGVydGllc1tpXV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcihyZXF1aXJlZFByb3BlcnRpZXNbaV0sIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEpzb25NaXNzaW5nVHlwZUVycm9yKHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmJhc2VDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBKc29uSW5jb3JyZWN0VHlwZUVycm9yKHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmJhc2VDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkTmV3RXJyb3IoZXJyb3I6IEpzb25FcnJvciwganNvbk9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKGpzb25PYmogJiYganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICBlcnJvci5hdCA9IGpzb25PYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0uc3RhcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB2YWx1ZVRvQXJyYXkodmFsdWU6IEFycmF5PGFueT4sIG9iajogYW55LCBrZXk6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xyXG4gICAgICAgIGlmKG9ialtrZXldICYmIHZhbHVlLmxlbmd0aCA+IDApIG9ialtrZXldLnNwbGljZSgwLCBvYmpba2V5XS5sZW5ndGgpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdPYmoodmFsdWVbaV0sIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLm5ld09iaikge1xyXG4gICAgICAgICAgICAgICAgb2JqW2tleV0ucHVzaChuZXdWYWx1ZS5uZXdPYmopO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b09iamVjdCh2YWx1ZVtpXSwgbmV3VmFsdWUubmV3T2JqKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghbmV3VmFsdWUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XS5wdXNoKHZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZmluZFByb3BlcnR5KHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sIGtleTogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChwcm9wLm5hbWUgPT0ga2V5IHx8IHByb3AuYWx0ZXJuYXRpdmVOYW1lID09IGtleSkgcmV0dXJuIHByb3A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2pzb25vYmplY3QudHMiLCJleHBvcnQgaW50ZXJmYWNlIEhhc2hUYWJsZTxUPiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBUO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleURhdGEge1xyXG4gICAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xyXG4gICAgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTtcclxuICAgIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleSBleHRlbmRzIElTdXJ2ZXlEYXRhIHtcclxuICAgIGN1cnJlbnRQYWdlOiBJUGFnZTtcclxuICAgIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pO1xyXG4gICAgcXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYm9vbGVhbik7XHJcbiAgICBxdWVzdGlvbkFkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KTtcclxuICAgIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSk7XHJcbiAgICBxdWVzdGlvblJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbik7XHJcbiAgICBwYW5lbFJlbW92ZWQocGFuZWw6IElFbGVtZW50KTtcclxuICAgIHZhbGlkYXRlUXVlc3Rpb24obmFtZTogc3RyaW5nKTogU3VydmV5RXJyb3I7XHJcbiAgICBwcm9jZXNzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBpc0Rpc3BsYXlNb2RlOiBib29sZWFuO1xyXG4gICAgaXNEZXNpZ25Nb2RlOiBib29sZWFuO1xyXG4gICAgaXNMb2FkaW5nRnJvbUpzb246IGJvb2xlYW47XHJcbiAgICByZXF1aXJlZFRleHQ6IHN0cmluZztcclxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogc3RyaW5nO1xyXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogYm9vbGVhbjtcclxuICAgIHVwbG9hZEZpbGUobmFtZTogc3RyaW5nLCBmaWxlOiBGaWxlLCBzdG9yZURhdGFBc1RleHQ6IGJvb2xlYW4sIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcpID0+IGFueSk6IGJvb2xlYW47XHJcbiAgICBhZnRlclJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50KTtcclxuICAgIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudCk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJQ29uZGl0aW9uUnVubmVyIHtcclxuICAgIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50ICBleHRlbmRzIElDb25kaXRpb25SdW5uZXJ7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gICAgc2V0RGF0YShuZXdWYWx1ZTogSVN1cnZleURhdGEpO1xyXG4gICAgcm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByZW5kZXJXaWR0aDogc3RyaW5nO1xyXG4gICAgd2lkdGg6IHN0cmluZztcclxuICAgIHJpZ2h0SW5kZW50OiBudW1iZXI7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBib29sZWFuO1xyXG4gICAgaXNQYW5lbDogYm9vbGVhbjtcclxuICAgIG9uU3VydmV5TG9hZCgpO1xyXG4gICAgb25Mb2NhbGVDaGFuZ2VkKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXN0aW9uIGV4dGVuZHMgSUVsZW1lbnQge1xyXG4gICAgaGFzVGl0bGU6IGJvb2xlYW47XHJcbiAgICBzZXRWaXNpYmxlSW5kZXgodmFsdWU6IG51bWJlcik7XHJcbiAgICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KTtcclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCk6IGJvb2xlYW47XHJcbiAgICBjbGVhclVudXNlZFZhbHVlcygpO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhbmVsIGV4dGVuZHMgSUVsZW1lbnQge1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2UgZXh0ZW5kcyBJQ29uZGl0aW9uUnVubmVyIHtcclxuICAgIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICBvblN1cnZleUxvYWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2Uge1xyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGlzIGFic3RyYWN0Jyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaXNUd29WYWx1ZUVxdWFscyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh4ID09PSB5KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiB4KSB7XHJcbiAgICAgICAgICAgIGlmICgheC5oYXNPd25Qcm9wZXJ0eShwKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICgheS5oYXNPd25Qcm9wZXJ0eShwKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoeFtwXSA9PT0geVtwXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHhbcF0pICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHhbcF0sIHlbcF0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAocCBpbiB5KSB7XHJcbiAgICAgICAgICAgIGlmICh5Lmhhc093blByb3BlcnR5KHApICYmICF4Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBtZXRob2QgaXMgYWJzdHJhY3QnKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBTdXJ2ZXlQYWdlSWQ6IHN0cmluZztcclxuU3VydmV5UGFnZUlkID0gXCJzcV9wYWdlXCI7XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgU2Nyb2xsRWxlbWVudFRvVG9wKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50SWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xyXG4gICAgICAgIGlmICghZWwgfHwgIWVsLnNjcm9sbEludG9WaWV3KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGVsZW1Ub3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgaWYgKGVsZW1Ub3AgPCAwKSAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICByZXR1cm4gZWxlbVRvcCA8IDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIEdldEZpcnN0Tm9uVGV4dEVsZW1lbnQoZWxlbWVudHM6IGFueSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI3RleHRcIiAmJiBlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiNjb21tZW50XCIpIHJldHVybiBlbGVtZW50c1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIEZvY3VzRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZWxlbWVudElkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcclxuICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgZWwuZm9jdXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEV2ZW50PFQgZXh0ZW5kcyBGdW5jdGlvbiwgT3B0aW9ucz4gIHtcclxuICAgIHByaXZhdGUgY2FsbGJhY2tzOiBBcnJheTxUPjtcclxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY2FsbGJhY2tzID09IG51bGwgfHwgdGhpcy5jYWxsYmFja3MubGVuZ3RoID09IDA7IH1cclxuICAgIHB1YmxpYyBmaXJlKHNlbmRlcjogYW55LCBvcHRpb25zOiBPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB2YXIgY2FsbFJlc3VsdCA9IHRoaXMuY2FsbGJhY2tzW2ldKHNlbmRlciwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGQoZnVuYzogVCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzID0gbmV3IEFycmF5PFQ+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZnVuYyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlKGZ1bmM6IFQpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoZnVuYywgMCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9iYXNlLnRzIiwiaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gJy4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtJRWxlbWVudCwgSGFzaFRhYmxlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG4vL1RPRE8gcmVwbGFjZSBjb21wbGV0ZWx5IHdpdGggRWxlbWVudEZhY3RvcnlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRmFjdG9yeSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUXVlc3Rpb25GYWN0b3J5KCk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q2hvaWNlcygpOiBzdHJpbmdbXSB7IFxyXG4gICAgICAgIHJldHVybiBbXCIxfFwiICsgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfZmlyc3RJdGVtXCIpLCBcIjJ8XCIgKyBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19zZWNvbmRJdGVtXCIpLCBcIjN8XCIgKyBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc190aGlyZEl0ZW1cIildO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdENvbHVtcygpOiBzdHJpbmdbXSB7IFxyXG4gICAgICAgIHZhciBjb2xOYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9jb2x1bW5cIikgKyBcIiBcIjtcclxuICAgICAgICByZXR1cm4gW2NvbE5hbWUgKyBcIjFcIiwgY29sTmFtZSArIFwiMlwiLCBjb2xOYW1lICsgXCIzXCJdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdFJvd3MoKTogc3RyaW5nW10geyBcclxuICAgICAgICB2YXIgcm93TmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfcm93XCIpICsgXCIgXCI7XHJcbiAgICAgICAgcmV0dXJuIFtyb3dOYW1lICsgXCIxXCIsIHJvd05hbWUgKyBcIjJcIl07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gUXVlc3Rpb25CYXNlPiA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3JIYXNoID0ge307XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb25CYXNlIHtcclxuICAgICAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gY3JlYXRvcihuYW1lKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGYWN0b3J5IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IEVsZW1lbnRGYWN0b3J5ID0gbmV3IEVsZW1lbnRGYWN0b3J5KCk7XHJcbiAgICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnQ+ID0ge307XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBlbGVtZW50Q3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2ggPSB7fTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmdldEFsbFR5cGVzKCk7XHJcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IElFbGVtZW50IHtcclxuICAgICAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xyXG4gICAgICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oZWxlbWVudFR5cGUsIG5hbWUpO1xyXG4gICAgICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50cyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gXCIuLi9iYXNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVhY3RRdWVzdGlvbkZhY3Rvcnkge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUmVhY3RRdWVzdGlvbkZhY3RvcnkoKTtcclxuICAgIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcXVlc3Rpb25DcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gY3JlYXRvcihwYXJhbXMpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25mYWN0b3J5LnRzeCIsImV4cG9ydCBpbnRlcmZhY2UgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgZ2V0TG9jYWxlKCk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgIGRlZmF1bHRMb2NhbGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG4gICAgcHJpdmF0ZSB2YWx1ZXMgPSB7fTtcclxuICAgIGNvbnN0cnVjdG9yIChwdWJsaWMgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyKSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtyZXR1cm4gdGhpcy5vd25lciA/IHRoaXMub3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRleHQoKSA6IHN0cmluZyB7IFxyXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpO1xyXG4gICAgICAgIGlmKGtleXMubGVuZ3RoID09IDApIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmxvY2FsZTtcclxuICAgICAgICBpZighbG9jKSBsb2MgPSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnZhbHVlc1tsb2NdO1xyXG4gICAgICAgIGlmKCFyZXMgJiYgbG9jICE9PSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IHRoaXMudmFsdWVzW0xvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogdGhpcy52YWx1ZXNba2V5c1swXV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dCh0aGlzLmxvY2FsZSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldExvY2FsZVRleHQobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmKCFsb2MpIGxvYyA9IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IFwiXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmKCFsb2MpIGxvYyA9IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgaWYoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudmFsdWVzW2xvY10pIGRlbGV0ZSB0aGlzLnZhbHVlc1tsb2NdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZihsb2MgIT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSAmJiB2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQoTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQobG9jLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbbG9jXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGxvYyA9PSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xyXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpO1xyXG4gICAgICAgIGlmKGtleXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmKGtleXMubGVuZ3RoID09IDEgJiYga2V5c1swXSA9PSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSByZXR1cm4gdGhpcy52YWx1ZXNba2V5c1swXV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldEpzb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XHJcbiAgICAgICAgaWYoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KG51bGwsIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGtleSwgdmFsdWVba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdChkZWZhdWx0VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZihrZXlzW2ldID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZih0aGlzLnZhbHVlc1trZXlzW2ldXSA9PSBkZWZhdWx0VmFsdWUpIGRlbGV0ZSB0aGlzLnZhbHVlc1trZXlzW2ldXTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSAnLi4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvcn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIHByb3RlY3RlZCByb290Q3NzOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgaXNEaXNwbGF5TW9kZTogYm9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBwcm9wcy5jc3M7XHJcbiAgICAgICAgdGhpcy5yb290Q3NzID0gcHJvcHMucm9vdENzcztcclxuICAgICAgICB0aGlzLmlzRGlzcGxheU1vZGUgPSBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3NzID0gbmV4dFByb3BzLmNzcztcclxuICAgICAgICB0aGlzLnJvb3RDc3MgPSBuZXh0UHJvcHMucm9vdENzcztcclxuICAgICAgICB0aGlzLmlzRGlzcGxheU1vZGUgPSBuZXh0UHJvcHMuaXNEaXNwbGF5TW9kZSB8fCBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZSB7XHJcbiAgICBwcm90ZWN0ZWQgcXVlc3Rpb25CYXNlOiBRdWVzdGlvbkJhc2U7XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRvcjogSVN1cnZleUNyZWF0b3I7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlID0gcHJvcHMucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UgPSBuZXh0UHJvcHMucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0IHx8ICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyO1xyXG4gICAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uZWxlbWVudC50c3giLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSAnLi9zdXJ2ZXlTdHJpbmdzJztcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpICB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEVycm9yXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRXhjZWVkU2l6ZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xyXG4gICAgcHJpdmF0ZSBtYXhTaXplOiBudW1iZXI7XHJcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplOiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVtcImZvcm1hdFwiXSh0aGlzLmdldFRleHRTaXplKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcclxuICAgICAgICB2YXIgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICAgICAgdmFyIGZpeGVkID0gWzAsIDAsIDIsIDMsIDNdO1xyXG4gICAgICAgIGlmICh0aGlzLm1heFNpemUgPT0gMCkgcmV0dXJuICcwIEJ5dGUnO1xyXG4gICAgICAgIHZhciBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyh0aGlzLm1heFNpemUpIC8gTWF0aC5sb2coMTAyNCkpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMubWF4U2l6ZSAvIE1hdGgucG93KDEwMjQsIGkpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKGZpeGVkW2ldKSArICcgJyArIHNpemVzW2ldO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lcnJvci50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSAnLi9qc29ub2JqZWN0JztcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gJy4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvciwgU3VydmV5RWxlbWVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0Fuc3dlclJlcXVpcmVkRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7U3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lcn0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbiBleHRlbmRzIFF1ZXN0aW9uQmFzZSBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciB7XHJcbiAgICBwcml2YXRlIGxvY1RpdGxlVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NDb21tZW50VGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbkNvbW1lbnQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc0NvbW1lbnRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBoYXNPdGhlclZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcclxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+ID0gW107XHJcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+ID0gbmV3IEFycmF5PFN1cnZleVZhbGlkYXRvcj4oKTtcclxuICAgIHZhbHVlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29tbWVudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGVycm9yc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHRpdGxlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NDb21tZW50VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuaWQgKyBcImlcIjsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyBcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5sb2NUaXRsZS50ZXh0O1xyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLm5hbWU7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZS50ZXh0ID0gbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy50aXRsZUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTsgfSBcclxuICAgIHB1YmxpYyBnZXQgbG9jQ29tbWVudFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21tZW50VGV4dFZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHsgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5wcm9jZXNzVGV4dCh0aGlzLnRpdGxlKSA6IHRoaXMudGl0bGU7IH1cclxuICAgIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGV4dFByZVByb2Nlc3Nvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vbkhhc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5jYW5Qcm9jZXNzZWRUZXh0VmFsdWVzKG5hbWUudG9Mb3dlckNhc2UoKSk7IH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzKHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMucmVxdWlyZWRUZXh0O1xyXG4gICAgICAgIGlmIChyZXF1aXJlVGV4dCkgcmVxdWlyZVRleHQgKz0gXCIgXCI7XHJcbiAgICAgICAgdmFyIG5vID0gdGhpcy5ubztcclxuICAgICAgICBpZiAobm8pIG5vICs9IFwiLiBcIjtcclxuICAgICAgICByZXR1cm4gbm8gKyByZXF1aXJlVGV4dCArIHRoaXMucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AodGhpcy5pZCk7XHJcbiAgICAgICAgdmFyIGlkID0gIW9uRXJyb3IgPyB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKSA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XHJcbiAgICAgICAgaWYgKFN1cnZleUVsZW1lbnQuRm9jdXNFbGVtZW50KGlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmZvY3VzQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRJZDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY2FuUHJvY2Vzc2VkVGV4dFZhbHVlcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbmFtZSA9PSBcIm5vXCIgfHwgbmFtZSA9PSBcInRpdGxlXCIgfHwgbmFtZSA9PSBcInJlcXVpcmVcIjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAobmFtZSA9PSBcIm5vXCIpIHJldHVybiB0aGlzLm5vO1xyXG4gICAgICAgIGlmIChuYW1lID09IFwidGl0bGVcIikgcmV0dXJuIHRoaXMucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJyZXF1aXJlXCIpIHJldHVybiB0aGlzLnJlcXVpcmVkVGV4dDtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXF1aXJlZCA9PSB2YWwpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUmVxdWlyZWRWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnRpdGxlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzQ29tbWVudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGhhc0NvbW1lbnQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRDb21tZW50KCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhc0NvbW1lbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb21tZW50KSB0aGlzLmhhc090aGVyID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbW1lbnRUZXh0KCk6IHN0cmluZyB7IFxyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmxvY0NvbW1lbnRUZXh0LnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY29tbWVudFRleHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jQ29tbWVudFRleHQudGV4dCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzT3RoZXJWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBoYXNPdGhlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydE90aGVyKCkgfHwgdGhpcy5oYXNPdGhlciA9PSB2YWwpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhc090aGVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzT3RoZXIpIHRoaXMuaGFzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzT3RoZXJDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkgeyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLnJlYWRPbmx5IHx8ICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlKTt9XHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5yZWFkT25seVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMucmVhZE9ubHkgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlYWRPbmx5VmFsdWUgPSB2YWx1ZTsgXHJcbiAgICAgICAgdGhpcy5yZWFkT25seUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZWFkT25seUNoYW5nZWQoKSB7IFxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBubygpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGVJbmRleCA8IDApIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gMTtcclxuICAgICAgICB2YXIgaXNOdW1lcmljID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc3RyID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHRoaXMuc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleDtcclxuICAgICAgICAgICAgaWYgKHBhcnNlSW50KHN0cikpIHN0YXJ0SW5kZXggPSBwYXJzZUludChzdHIpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChzdHIubGVuZ3RoID09IDEpIGlzTnVtZXJpYyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOdW1lcmljKSByZXR1cm4gKHRoaXMudmlzaWJsZUluZGV4ICsgc3RhcnRJbmRleCkudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdCgwKSArIHRoaXMudmlzaWJsZUluZGV4KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblNldERhdGEoKSB7XHJcbiAgICAgICAgc3VwZXIub25TZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZyb21EYXRhKHRoaXMuZ2V0VmFsdWVDb3JlKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB0aGlzLmlzdmFsdWVDaGFuZ2VkQ2FsbGJhY2tGaXJpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29tbWVudCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDb21tZW50KCk7IH1cclxuICAgIHB1YmxpYyBzZXQgY29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCA9PSBuZXdWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRDb21tZW50KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgIT0gbnVsbCA/IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMubmFtZSkgOiB0aGlzLnF1ZXN0aW9uQ29tbWVudDsgfVxyXG4gICAgcHJvdGVjdGVkIHNldENvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmFsdWUgPT0gbnVsbDsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ZvckVycm9ycyhmaXJlQ2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgIT0gbnVsbCAmJiB0aGlzLmlzUmVxdWlyZWQgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiOyB9XHJcbiAgICBwdWJsaWMgYWRkRXJyb3IoZXJyb3I6IFN1cnZleUVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja0ZvckVycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgZXJyb3JMZW5ndGggPSB0aGlzLmVycm9ycyA/IHRoaXMuZXJyb3JzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tGb3JFcnJvcnModGhpcy5lcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPT0gMCAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMucnVuVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLmVycm9ycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLnN1cnZleS52YWxpZGF0ZVF1ZXN0aW9uKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayAmJiAoZXJyb3JMZW5ndGggIT0gdGhpcy5lcnJvcnMubGVuZ3RoIHx8IGVycm9yTGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVxdWlyZWRFcnJvcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc1JlcXVpcmVkRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmlzRW1wdHkoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBydW5WYWxpZGF0b3JzKCk6IFN1cnZleUVycm9yIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJ1bm5lcigpLnJ1bih0aGlzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5KSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZVRvRGF0YShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlQ29yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhICE9IG51bGwgPyB0aGlzLmRhdGEuZ2V0VmFsdWUodGhpcy5uYW1lKSA6IHRoaXMucXVlc3Rpb25WYWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKHRoaXMubmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHsgcmV0dXJuIHZhbDsgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHsgcmV0dXJuIHZhbDsgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KHRoaXMubmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy9JUXVlc3Rpb25cclxuICAgIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lWYWxpZGF0b3JPd25lclxyXG4gICAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIG51bGw7IH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicXVlc3Rpb25cIiwgW3sgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXHJcbiAgICB7IG5hbWU6IFwiY29tbWVudFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIgfSxcclxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsIFwicmVhZE9ubHk6Ym9vbGVhblwiLCB7IG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCJ9XSwgbnVsbCwgXCJxdWVzdGlvbmJhc2VcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uLnRzIiwiaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgU2VwYXJhdG9yID0gJ3wnO1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVBcnJheShsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICB2YXIgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0dXBBcnJheShpdGVtcywgbG9jT3duZXIpO1xyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0dXBBcnJheShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyKSB7XHJcbiAgICAgICAgaXRlbXMucHVzaCA9IGZ1bmN0aW9uKHZhbHVlKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaXRlbXMuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IEl0ZW1WYWx1ZVtdKTogSXRlbVZhbHVlW10ge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IGxvY093bmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsdWVzOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgaXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgaXRlbS5zZXREYXRhKHZhbHVlKTtcclxuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmhhc1RleHQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgdmFsdWU6IGl0ZW0udmFsdWUsIHRleHQ6IGl0ZW0ubG9jVGV4dC5nZXRKc29uKCkgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRJdGVtQnlWYWx1ZShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsOiBhbnkpOiBJdGVtVmFsdWUge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtc1tpXS52YWx1ZSA9PSB2YWwpIHJldHVybiBpdGVtc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpdGVtVmFsdWVQcm9wID0gWyBcInRleHRcIiwgXCJ2YWx1ZVwiLCBcImhhc1RleHRcIiwgXCJsb2NPd25lclwiLCBcImxvY1RleHRcIl07XHJcbiAgICBwcml2YXRlIGl0ZW1WYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBsb2NUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IodmFsdWU6IGFueSwgdGV4dDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMubG9jVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKG51bGwpO1xyXG4gICAgICAgIGlmKHRleHQpIHRoaXMubG9jVGV4dC50ZXh0ID0gdGV4dDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJpdGVtdmFsdWVcIjsgfVxyXG4gICAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGV4dFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY093bmVyKCkgOiBJTG9jYWxpemFibGVPd25lciB7IHJldHVybiB0aGlzLmxvY1RleHQub3duZXI7IH1cclxuICAgIHB1YmxpYyBzZXQgbG9jT3duZXIodmFsdWU6IElMb2NhbGl6YWJsZU93bmVyKSB7IHRoaXMubG9jVGV4dC5vd25lciA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7IHJldHVybiB0aGlzLml0ZW1WYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuaXRlbVZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHN0cjogc3RyaW5nID0gdGhpcy5pdGVtVmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICB2YXIgaW5kZXggPSBzdHIuaW5kZXhPZihJdGVtVmFsdWUuU2VwYXJhdG9yKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1WYWx1ZSA9IHN0ci5zbGljZSgwLCBpbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHN0ci5zbGljZShpbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVGV4dCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubG9jVGV4dC50ZXh0ID8gdHJ1ZSA6IGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNUZXh0KSByZXR1cm4gdGhpcy5sb2NUZXh0LnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHJldHVybiB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHRleHQobmV3VGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NUZXh0LnRleHQgPSBuZXdUZXh0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHZhbHVlLnZhbHVlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT2JqSXRlbVZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUuaXRlbVZhbHVlID0gdmFsdWUuaXRlbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NUZXh0LnNldEpzb24odmFsdWUubG9jVGV4dC5nZXRKc29uKCkpO1xyXG4gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gSXRlbVZhbHVlLml0ZW1WYWx1ZVByb3A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5QXR0cmlidXRlcyh2YWx1ZSwgZXhjZXB0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSAgaXNPYmpJdGVtVmFsdWUob2JqOiBhbnkpIHsgcmV0dXJuIHR5cGVvZiAob2JqLmdldFR5cGUpICE9PSAndW5kZWZpbmVkJyAmJiBvYmouZ2V0VHlwZSgpID09ICdpdGVtdmFsdWUnfVxyXG4gICAgcHJpdmF0ZSBjb3B5QXR0cmlidXRlcyhzcmM6IGFueSwgZXhjZXB0b25zOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoKHR5cGVvZiBzcmNba2V5XSA9PSAnZnVuY3Rpb24nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChleGNlcHRvbnMgJiYgZXhjZXB0b25zLmluZGV4T2Yoa2V5KSA+IC0xKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYoa2V5ID09IFwidGV4dFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY1RleHQuc2V0SnNvbihzcmNba2V5XSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBzcmNba2V5XTsgICAgXHJcbiAgICAgICAgICAgIH0gIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaXRlbXZhbHVlLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQ29tbWVudE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25CbHVyID0gdGhpcy5oYW5kbGVPbkJsdXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25Db21tZW50TW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Db21tZW50TW9kZWw7IH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkJsdXIoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCAnJyB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKVxyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzc30+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+KVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzfSB0eXBlPVwidGV4dFwiIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfSBwbGFjZWhvbGRlcj17dGhpcy5xdWVzdGlvbi5wbGFjZUhvbGRlcn0gb25CbHVyPXt0aGlzLmhhbmRsZU9uQmx1cn0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IGNvbHM9e3RoaXMucXVlc3Rpb24uY29sc30gcm93cz17dGhpcy5xdWVzdGlvbi5yb3dzfSAvPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogUXVlc3Rpb247XHJcbiAgICBwcml2YXRlIGNvbW1lbnQ6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMuY29tbWVudCA9IHRoaXMucXVlc3Rpb24uY29tbWVudDtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5jb21tZW50IH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQmx1ciA9IHRoaXMuaGFuZGxlT25CbHVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkNoYW5nZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuY29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMuY29tbWVudCB9KTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQmx1cihldmVudCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29tbWVudCA9IHRoaXMuY29tbWVudDtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbmV4dFByb3BzLnF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnF1ZXN0aW9uLmNvbW1lbnR9Pnt0aGlzLmNvbW1lbnR9PC9kaXY+KTtcclxuICAgICAgICByZXR1cm4gKDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT17dGhpcy5jc3MucXVlc3Rpb24uY29tbWVudH0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfSBvbkJsdXI9e3RoaXMuaGFuZGxlT25CbHVyfSAvPik7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Db21tZW50LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY29tbWVudC50c3giLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7Q2hvaWNlc1Jlc3RmdWxsfSBmcm9tIFwiLi9jaG9pY2VzUmVzdGZ1bGxcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlbGVjdEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwcml2YXRlIHZpc2libGVDaG9pY2VzQ2FjaGU6IEFycmF5PEl0ZW1WYWx1ZT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb21tZW50VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgb3RoZXJJdGVtVmFsdWU6IEl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJvdGhlclwiLCBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKSk7XHJcbiAgICBwcml2YXRlIGxvY090aGVyVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jT3RoZXJFcnJvclRleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVkVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgY2hvaWNlc0Zyb21Vcmw6IEFycmF5PEl0ZW1WYWx1ZT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjYWNoZWRWYWx1ZUZvclVybFJlcXVlc3Rpb246IGFueSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZXM6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwdWJsaWMgY2hvaWNlc0J5VXJsOiBDaG9pY2VzUmVzdGZ1bGw7XHJcbiAgICBwdWJsaWMgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzT3JkZXJWYWx1ZTogc3RyaW5nID0gXCJub25lXCI7XHJcbiAgICBjaG9pY2VzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzVmFsdWVzID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsID0gdGhpcy5jcmVhdGVSZXN0ZnVsbCgpO1xyXG4gICAgICAgIHRoaXMubG9jT3RoZXJUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPdGhlckVycm9yVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybC5nZXRSZXN1bHRDYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtczogQXJyYXk8SXRlbVZhbHVlPikgeyBzZWxmLm9uTG9hZENob2ljZXNGcm9tVXJsKGl0ZW1zKSB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvdGhlckl0ZW0oKTogSXRlbVZhbHVlIHtcclxuICAgICAgICB0aGlzLm90aGVySXRlbVZhbHVlLnRleHQgPSB0aGlzLm90aGVyVGV4dCA/IHRoaXMub3RoZXJUZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc090aGVyU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSA/IHRoaXMuZ2V0SGFzT3RoZXIodGhpcy52YWx1ZSkgOiB0aGlzLmdldEhhc090aGVyKHRoaXMuY2FjaGVkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEhhc090aGVyKHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSZXN0ZnVsbCgpOiBDaG9pY2VzUmVzdGZ1bGwgeyByZXR1cm4gbmV3IENob2ljZXNSZXN0ZnVsbCgpOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q29tbWVudCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiBzdXBlci5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1NldHRpbmdDb21tZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgc2V0Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSlcclxuICAgICAgICAgICAgc3VwZXIuc2V0Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NldHRpbmdDb21tZW50ICYmIG5ld1ZhbHVlICE9IHRoaXMuY29tbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50VmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3RoZXJTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWVJbkRhdGEodGhpcy5jYWNoZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbiA9IG5ld1ZhbHVlOyAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiBzdXBlci52YWx1ZUZyb21EYXRhKHZhbCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZSA9IHRoaXMudmFsdWVGcm9tRGF0YUNvcmUodmFsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRWYWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHN1cGVyLnZhbHVlVG9EYXRhKHZhbCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZSA9IHZhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVRvRGF0YUNvcmUodmFsKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwpKSByZXR1cm4gdmFsO1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHJldHVybiB2YWw7XHJcbiAgICAgICAgdGhpcy5jb21tZW50ID0gdmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm90aGVySXRlbS52YWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUgJiYgdGhpcy5nZXRDb21tZW50KCkpIHtcclxuICAgICAgICAgICAgdmFsID0gdGhpcy5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzVW5rbm93blZhbHVlKHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmFjdGl2ZUNob2ljZXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNbaV0udmFsdWUgPT0gdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNob2ljZXNWYWx1ZXM7IH1cclxuICAgIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jaG9pY2VzVmFsdWVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2hvaWNlc09yZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNob2ljZXNPcmRlclZhbHVlOyB9XHJcbiAgICBzZXQgY2hvaWNlc09yZGVyKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT0gdGhpcy5jaG9pY2VzT3JkZXJWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc09yZGVyVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG90aGVyVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlclRleHQudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBvdGhlclRleHQodmFsdWU6IHN0cmluZykgeyBcclxuICAgICAgICB0aGlzLmxvY090aGVyVGV4dC50ZXh0ID0gdmFsdWU7IFxyXG4gICAgICAgIHRoaXMudXBkYXRlT3RoZXJJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG90aGVyRXJyb3JUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY090aGVyRXJyb3JUZXh0LnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgb3RoZXJFcnJvclRleHQodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY090aGVyRXJyb3JUZXh0LnRleHQgPSB2YWx1ZTsgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jT3RoZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJUZXh0VmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0IGxvY090aGVyRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJFcnJvclRleHRWYWx1ZTsgfSBcclxuICAgIFxyXG4gICAgZ2V0IHZpc2libGVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNPdGhlciAmJiB0aGlzLmNob2ljZXNPcmRlciA9PSBcIm5vbmVcIikgcmV0dXJuIHRoaXMuYWN0aXZlQ2hvaWNlcztcclxuICAgICAgICBpZighdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZSA9IHRoaXMuc29ydFZpc2libGVDaG9pY2VzKHRoaXMuYWN0aXZlQ2hvaWNlcy5zbGljZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3RoZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZS5wdXNoKHRoaXMub3RoZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgYWN0aXZlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc0Zyb21VcmwgPyB0aGlzLmNob2ljZXNGcm9tVXJsIDogdGhpcy5jaG9pY2VzOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCB0aGlzLmNvbW1lbnQpIHJldHVybjtcclxuICAgICAgICB2YXIgdGV4dCA9IHRoaXMub3RoZXJFcnJvclRleHQ7XHJcbiAgICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgICAgIHRleHQgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJSZXF1aXJlZEVycm9yXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3IodGV4dCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uTG9jYWxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBzdXBlci5vbkxvY2FsZUNoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU90aGVySXRlbSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVPdGhlckl0ZW0oKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLm90aGVySXRlbTsgLy8gc2V0IHRoZSBjb3JyZWN0IHRleHRcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNob2ljZXNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgeyByZXR1cm4gdGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCAmJiAodGhpcy5zdXJ2ZXkgIT0gbnVsbCA/IHRoaXMuc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IDogdHJ1ZSk7IH1cclxuICAgIG9uU3VydmV5TG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwpIHRoaXMuY2hvaWNlc0J5VXJsLnJ1bigpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkxvYWRDaG9pY2VzRnJvbVVybChhcnJheTogQXJyYXk8SXRlbVZhbHVlPikge1xyXG4gICAgICAgIHZhciBlcnJvckNvdW50ID0gdGhpcy5lcnJvcnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvaWNlc0J5VXJsICYmIHRoaXMuY2hvaWNlc0J5VXJsLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2godGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3JDb3VudCA+IDAgfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBuZXdDaG9pY2VzID0gbnVsbDtcclxuICAgICAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBuZXdDaG9pY2VzID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcclxuICAgICAgICAgICAgSXRlbVZhbHVlLnNldERhdGEobmV3Q2hvaWNlcywgYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNob2ljZXNGcm9tVXJsID0gbmV3Q2hvaWNlcztcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc29ydFZpc2libGVDaG9pY2VzKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAob3JkZXIgPT0gXCJhc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAxKTtcclxuICAgICAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgLTEpO1xyXG4gICAgICAgIGlmIChvcmRlciA9PSBcInJhbmRvbVwiKSByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzb3J0QXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4sIG11bHQ6IG51bWJlcik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgIGlmIChhLnRleHQgPCBiLnRleHQpIHJldHVybiAtMSAqIG11bHQ7XHJcbiAgICAgICAgICAgIGlmIChhLnRleHQgPiBiLnRleHQpIHJldHVybiAxICogbXVsdDtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJhbmRvbWl6ZUFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgYXJyYXlbaV0gPSBhcnJheVtqXTtcclxuICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9XHJcbiAgICBjbGVhclVudXNlZFZhbHVlcygpIHtcclxuICAgICAgICBzdXBlci5jbGVhclVudXNlZFZhbHVlcygpO1xyXG4gICAgICAgIGlmKCF0aGlzLmlzT3RoZXJTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIGV4dGVuZHMgUXVlc3Rpb25TZWxlY3RCYXNlIHtcclxuICAgIHByaXZhdGUgY29sQ291bnRWYWx1ZTogbnVtYmVyID0gMTtcclxuICAgIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gNCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY29sQ291bnRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzZWxlY3RiYXNlXCIsIFtcImhhc0NvbW1lbnQ6Ym9vbGVhblwiLCBcImhhc090aGVyOmJvb2xlYW5cIixcclxuICAgIHsgbmFtZTogXCJjaG9pY2VzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmouY2hvaWNlcyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmouY2hvaWNlcyA9IHZhbHVlOyB9fSxcclxuICAgIHsgbmFtZTogXCJjaG9pY2VzT3JkZXJcIiwgZGVmYXVsdDogXCJub25lXCIsIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJhc2NcIiwgXCJkZXNjXCIsIFwicmFuZG9tXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwiY2hvaWNlc0J5VXJsOnJlc3RmdWxsXCIsIGNsYXNzTmFtZTogXCJDaG9pY2VzUmVzdGZ1bGxcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBvYmouY2hvaWNlc0J5VXJsLmlzRW1wdHkgPyBudWxsIDogb2JqLmNob2ljZXNCeVVybDsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzQnlVcmwuc2V0RGF0YSh2YWx1ZSk7IH0gfSxcclxuICAgIHsgbmFtZTogXCJvdGhlclRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY090aGVyVGV4dFwiIH0sIHtuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlckVycm9yVGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWV9XSwgbnVsbCwgXCJxdWVzdGlvblwiKTtcclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjaGVja2JveGJhc2VcIiwgW3sgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMSwgY2hvaWNlczogWzAsIDEsIDIsIDMsIDRdIH1dLCBudWxsLCBcInNlbGVjdGJhc2VcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2Jhc2VzZWxlY3QudHMiLCJpbXBvcnQge0hhc2hUYWJsZX0gZnJvbSAnLi9iYXNlJztcclxuaW1wb3J0IHtDb25kaXRpb25zUGFyc2VyfSBmcm9tICcuL2NvbmRpdGlvbnNQYXJzZXInO1xyXG5pbXBvcnQge1Byb2Nlc3NWYWx1ZX0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uIHtcclxuICAgIHN0YXRpYyBvcGVyYXRvcnNWYWx1ZTogSGFzaFRhYmxlPEZ1bmN0aW9uPiA9IG51bGw7XHJcbiAgICBzdGF0aWMgZ2V0IG9wZXJhdG9ycygpIHtcclxuICAgICAgICBpZiAoQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpIHJldHVybiBDb25kaXRpb24ub3BlcmF0b3JzVmFsdWU7XHJcbiAgICAgICAgQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlID0ge1xyXG4gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiAhbGVmdDsgfSxcclxuICAgICAgICAgICAgbm90ZW1wdHk6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gISghbGVmdCk7IH0sXHJcbiAgICAgICAgICAgIGVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPT0gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIG5vdGVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgJiYgbGVmdFtcImluZGV4T2ZcIl0gJiYgbGVmdC5pbmRleE9mKHJpZ2h0KSA+IC0xOyB9LFxyXG4gICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiAhbGVmdCB8fCAhbGVmdFtcImluZGV4T2ZcIl0gfHwgbGVmdC5pbmRleE9mKHJpZ2h0KSA9PSAtMTsgfSxcclxuICAgICAgICAgICAgZ3JlYXRlcjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ID4gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGxlc3M6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA8IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ID49IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBsZXNzb3JlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0IDw9IHJpZ2h0OyB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcFZhbHVlOiBzdHJpbmcgPSBcImVxdWFsXCI7XHJcbiAgICBwdWJsaWMgbGVmdDogYW55O1xyXG4gICAgcHVibGljIHJpZ2h0OiBhbnk7XHJcbiAgICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm9wVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFDb25kaXRpb24ub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub3BWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHBlcmZvcm0obGVmdDogYW55ID0gbnVsbCwgcmlnaHQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWxlZnQpIGxlZnQgPSB0aGlzLmxlZnQ7XHJcbiAgICAgICAgaWYgKCFyaWdodCkgcmlnaHQgPSB0aGlzLnJpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uLm9wZXJhdG9yc1t0aGlzLm9wZXJhdG9yXSh0aGlzLmdldFB1cmVWYWx1ZShsZWZ0KSwgdGhpcy5nZXRQdXJlVmFsdWUocmlnaHQpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHVyZVZhbHVlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAodHlwZW9mIHZhbCAhPSBcInN0cmluZ1wiKSkgcmV0dXJuIHZhbDtcclxuICAgICAgICB2YXIgc3RyID0gXCJcIjtcclxuICAgICAgICBpZiAodmFsLmxlbmd0aCA+IDAgJiYgKHZhbFswXSA9PSBcIidcIiB8fCB2YWxbMF0gPT0gJ1wiJykpICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xyXG4gICAgICAgIHZhciBsZW4gPSB2YWwubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsZW4gPiAwICYmICh2YWxbbGVuIC0gMV0gPT0gXCInXCIgfHwgdmFsW2xlbiAtIDFdID09ICdcIicpKSAgdmFsID0gdmFsLnN1YnN0cigwLCBsZW4gLSAxKTtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25Ob2RlIHtcclxuICAgIHByaXZhdGUgY29ubmVjdGl2ZVZhbHVlOiBzdHJpbmcgPSBcImFuZFwiO1xyXG4gICAgcHVibGljIGNoaWxkcmVuOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7IH1cclxuICAgIHB1YmxpYyBnZXQgY29ubmVjdGl2ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25uZWN0aXZlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29ubmVjdGl2ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCImXCIgfHwgdmFsdWUgPT0gXCImJlwiKSB2YWx1ZSA9IFwiYW5kXCI7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwifFwiIHx8IHZhbHVlID09IFwifHxcIikgdmFsdWUgPSBcIm9yXCI7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IFwiYW5kXCIgJiYgdmFsdWUgIT0gXCJvclwiKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aXZlVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7IH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aXZlID0gXCJhbmRcIjtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uUnVubmVyIHtcclxuICAgIHByaXZhdGUgZXhwcmVzc2lvblZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHByb2Nlc3NWYWx1ZTogUHJvY2Vzc1ZhbHVlO1xyXG4gICAgcHJpdmF0ZSByb290OiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+O1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucm9vdCA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcclxuICAgICAgICB0aGlzLnByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbiA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgbmV3IENvbmRpdGlvbnNQYXJzZXIoKS5wYXJzZSh0aGlzLmV4cHJlc3Npb25WYWx1ZSwgdGhpcy5yb290KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW4odmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bk5vZGUodGhpcy5yb290KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcnVuTm9kZShub2RlOiBDb25kaXRpb25Ob2RlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIG9uRmlyc3RGYWlsID0gbm9kZS5jb25uZWN0aXZlID09IFwiYW5kXCI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLnJ1bk5vZGVDb25kaXRpb24obm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzICYmIG9uRmlyc3RGYWlsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgIW9uRmlyc3RGYWlsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9uRmlyc3RGYWlsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Ob2RlQ29uZGl0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHZhbHVlW1wiY2hpbGRyZW5cIl0pIHJldHVybiB0aGlzLnJ1bk5vZGUodmFsdWUpO1xyXG4gICAgICAgIGlmICh2YWx1ZVtcImxlZnRcIl0pIHJldHVybiB0aGlzLnJ1bkNvbmRpdGlvbih2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Db25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb24pOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgbGVmdCA9IGNvbmRpdGlvbi5sZWZ0O1xyXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUobGVmdCk7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NWYWx1ZS5oYXNWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcykpIHJldHVybiBjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZW1wdHlcIjtcclxuICAgICAgICAgICAgbGVmdCA9IHRoaXMucHJvY2Vzc1ZhbHVlLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xyXG4gICAgICAgIG5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZShyaWdodCk7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NWYWx1ZS5oYXNWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25kaXRpb24ucGVyZm9ybShsZWZ0LCByaWdodCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlTmFtZShub2RlVmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghbm9kZVZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodHlwZW9mIG5vZGVWYWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmIChub2RlVmFsdWUubGVuZ3RoIDwgMyB8fCBub2RlVmFsdWVbMF0gIT0gJ3snIHx8IG5vZGVWYWx1ZVtub2RlVmFsdWUubGVuZ3RoIC0gMV0gIT0gJ30nKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbm9kZVZhbHVlLnN1YnN0cigxLCBub2RlVmFsdWUubGVuZ3RoIC0gMik7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uZGl0aW9ucy50cyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gJy4uL3F1ZXN0aW9uYmFzZSc7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gJy4uL3F1ZXN0aW9uJztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtfSBmcm9tICcuL3JlYWN0cXVlc3Rpb25jb21tZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3Ige1xyXG4gICAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UpOiBKU1guRWxlbWVudDtcclxuICAgIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvclRleHQ6IHN0cmluZyk6IEpTWC5FbGVtZW50O1xyXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uQmFzZTogUXVlc3Rpb25CYXNlO1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICAgIHByaXZhdGUgY3JlYXRvcjogSVN1cnZleUNyZWF0b3I7XHJcbiAgICBwcm90ZWN0ZWQgY3NzOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UXVlc3Rpb24ocHJvcHMucXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IHByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBwcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBuZXh0UHJvcHMuY3NzO1xyXG4gICAgICAgIHRoaXMuc2V0UXVlc3Rpb24obmV4dFByb3BzLnF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UXVlc3Rpb24ocXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBxdWVzdGlvbiBpbnN0YW5jZW9mIFF1ZXN0aW9uID8gcXVlc3Rpb24gOiBudWxsO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucXVlc3Rpb24gPyB0aGlzLnF1ZXN0aW9uLnZhbHVlIDogbnVsbDtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyBcclxuICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZSwgdmFsdWU6IHZhbHVlLCBlcnJvcjogMCwgcmVuZGVyV2lkdGg6IDAsXHJcbiAgICAgICAgICAgIHZpc2libGVJbmRleFZhbHVlOiAtMSwgaXNSZWFkT25seSA6IHRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHlcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2VbXCJyZWFjdFwiXSA9IHNlbGY7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5yZW5kZXJXaWR0aCA9IHNlbGYuc3RhdGUucmVuZGVyV2lkdGggKyAxO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlSW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUudmlzaWJsZUluZGV4VmFsdWUgPSBzZWxmLnF1ZXN0aW9uQmFzZS52aXNpYmxlSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmlzUmVhZE9ubHkgPSBzZWxmLnF1ZXN0aW9uQmFzZS5pc1JlYWRPbmx5O1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgICAgICBpZiAoZWwgJiYgdGhpcy5xdWVzdGlvbkJhc2Uuc3VydmV5KSB0aGlzLnF1ZXN0aW9uQmFzZS5zdXJ2ZXkuYWZ0ZXJSZW5kZXJRdWVzdGlvbih0aGlzLnF1ZXN0aW9uQmFzZSwgZWwpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlbCA9IHRoaXMucmVmc1tcIndpZGdldFwiXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbCkgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZVtcInJlYWN0XCJdID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlSW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcclxuICAgICAgICAgICAgZWwgPSB0aGlzLnJlZnNbXCJ3aWRnZXRcIl07XHJcbiAgICAgICAgICAgIGlmIChlbCkgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpbGxVbm1vdW50KHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlIHx8ICF0aGlzLmNyZWF0b3IpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uUmVuZGVyID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xyXG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMucXVlc3Rpb25CYXNlLmhhc1RpdGxlID8gdGhpcy5yZW5kZXJUaXRsZSgpIDogbnVsbDtcclxuICAgICAgICB2YXIgdGl0bGVUb3AgPSB0aGlzLmNyZWF0b3IucXVlc3Rpb25UaXRsZUxvY2F0aW9uKCkgPT0gXCJ0b3BcIiA/IHRpdGxlIDogbnVsbDtcclxuICAgICAgICB2YXIgdGl0bGVCb3R0b20gPSB0aGlzLmNyZWF0b3IucXVlc3Rpb25UaXRsZUxvY2F0aW9uKCkgPT0gXCJib3R0b21cIiA/IHRpdGxlIDogbnVsbDtcclxuICAgICAgICB2YXIgY29tbWVudCA9ICh0aGlzLnF1ZXN0aW9uICYmIHRoaXMucXVlc3Rpb24uaGFzQ29tbWVudCkgPyB0aGlzLnJlbmRlckNvbW1lbnQoKSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGVycm9ycyA9IHRoaXMucmVuZGVyRXJyb3JzKCk7XHJcbiAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSAodGhpcy5xdWVzdGlvbkJhc2UuaW5kZW50ID4gMCkgPyB0aGlzLnF1ZXN0aW9uQmFzZS5pbmRlbnQgKiB0aGlzLmNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCIgOiBudWxsO1xyXG4gICAgICAgIHZhciBwYWRkaW5nUmlnaHQgPSAodGhpcy5xdWVzdGlvbkJhc2UucmlnaHRJbmRlbnQgPiAwKSA/IHRoaXMucXVlc3Rpb25CYXNlLnJpZ2h0SW5kZW50ICogdGhpcy5jc3MucXVlc3Rpb24uaW5kZW50ICsgXCJweFwiIDogbnVsbDtcclxuICAgICAgICB2YXIgcm9vdFN0eWxlID0geyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywgdmVydGljYWxBbGlnbjogJ3RvcCcgfTtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyV2lkdGgpIHJvb3RTdHlsZVtcIndpZHRoXCJdID0gdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyV2lkdGg7XHJcbiAgICAgICAgaWYgKG1hcmdpbkxlZnQpIHJvb3RTdHlsZVtcIm1hcmdpbkxlZnRcIl0gPSBtYXJnaW5MZWZ0O1xyXG4gICAgICAgIGlmIChwYWRkaW5nUmlnaHQpIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHBhZGRpbmdSaWdodDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2ICByZWY9XCJyb290XCIgaWQ9e3RoaXMucXVlc3Rpb25CYXNlLmlkfSBjbGFzc05hbWU9e3RoaXMuY3NzLnF1ZXN0aW9uLnJvb3R9IHN0eWxlPXtyb290U3R5bGV9PlxyXG4gICAgICAgICAgICAgICAge3RpdGxlVG9wfVxyXG4gICAgICAgICAgICAgICAge2Vycm9yc31cclxuICAgICAgICAgICAgICAgIHtxdWVzdGlvblJlbmRlcn1cclxuICAgICAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICAgICAge3RpdGxlQm90dG9tfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0O1xyXG4gICAgICAgIGlmICghY3VzdG9tV2lkZ2V0KSByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudCh0aGlzLnF1ZXN0aW9uQmFzZSk7XHJcbiAgICAgICAgdmFyIHdpZGdldCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgcmVmPVwid2lkZ2V0XCI+e3RoaXMuY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQodGhpcy5xdWVzdGlvbkJhc2UpfTwvZGl2PlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcikge1xyXG4gICAgICAgICAgICB3aWRnZXQgPSBjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiByZWY9XCJ3aWRnZXRcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfT48L2Rpdj4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8ZGl2IHJlZj1cIndpZGdldFwiPnt3aWRnZXR9PC9kaXY+XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciB0aXRsZVRleHQgPSB0aGlzLnF1ZXN0aW9uLmZ1bGxUaXRsZTtcclxuICAgICAgICByZXR1cm4gKDxoNSBjbGFzc05hbWU9e3RoaXMuY3NzLnF1ZXN0aW9uLnRpdGxlfT57dGl0bGVUZXh0fTwvaDU+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJDb21tZW50KCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gKDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLmNvbW1lbnRUZXh0fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMuY3NzfSAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckVycm9ycygpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlRdWVzdGlvbkVycm9ycyBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLmNzc30gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSAvPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FcnJvcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByb3RlY3RlZCBxdWVzdGlvbjogUXVlc3Rpb247XHJcbiAgICBwcml2YXRlIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFF1ZXN0aW9uKHByb3BzLnF1ZXN0aW9uKTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBwcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0UXVlc3Rpb24obmV4dFByb3BzLnF1ZXN0aW9uKTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldFF1ZXN0aW9uKHF1ZXN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHF1ZXN0aW9uIGluc3RhbmNlb2YgUXVlc3Rpb24gPyBxdWVzdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmVycm9yc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUuZXJyb3IgPSBzZWxmLnN0YXRlLmVycm9yICsgMTtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZXJyb3I6IDAgfTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uIHx8IHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgZXJyb3JzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JUZXh0ID0gdGhpcy5xdWVzdGlvbi5lcnJvcnNbaV0uZ2V0VGV4dCgpO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJlcnJvclwiICsgaTtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5jcmVhdG9yLnJlbmRlckVycm9yKGtleSwgZXJyb3JUZXh0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmVycm9yLnJvb3R9PntlcnJvcnN9PC9kaXY+KTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtSZWFjdFN1cnZleU1vZGVsfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XHJcbmltcG9ydCB7U3VydmV5UGFnZX0gZnJvbSBcIi4vcmVhY3RwYWdlXCI7XHJcbmltcG9ydCB7U3VydmV5TmF2aWdhdGlvbn0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7SVN1cnZleUNyZWF0b3J9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtzdXJ2ZXlDc3N9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XHJcbmltcG9ydCB7U3VydmV5UHJvZ3Jlc3N9IGZyb20gXCIuL3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQYWdlSWR9IGZyb20gXCIuLi9iYXNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGNzc1R5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBzZXQgY3NzVHlwZSh2YWx1ZTogc3RyaW5nKSB7IHN1cnZleUNzcy5jdXJyZW50VHlwZSA9IHZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgc3VydmV5OiBSZWFjdFN1cnZleU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBpc0N1cnJlbnRQYWdlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTdXJ2ZXkocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU3VydmV5KG5leHRQcm9wcyk7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0N1cnJlbnRQYWdlQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdXJ2ZXkuZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1cnZleS5mb2N1c0ZpcnN0UXVlc3Rpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMucmVmc1tcInJvb3RcIl07XHJcbiAgICAgICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5kb0FmdGVyUmVuZGVyU3VydmV5KGVsKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkXCIpIHJldHVybiB0aGlzLnJlbmRlckNvbXBsZXRlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImxvYWRpbmdcIikgcmV0dXJuIHRoaXMucmVuZGVyTG9hZGluZygpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclN1cnZleSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjc3MoKTogYW55IHsgcmV0dXJuIHN1cnZleUNzcy5nZXRDc3MoKTsgfVxyXG4gICAgcHVibGljIHNldCBjc3ModmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm1lcmdlQ3NzKHZhbHVlLCB0aGlzLmNzcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZighdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbCB9O1xyXG4gICAgICAgIHJldHVybiAoPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xyXG4gICAgICAgIHJldHVybiAoPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyU3VydmV5KCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnN1cnZleS50aXRsZSAmJiB0aGlzLnN1cnZleS5zaG93VGl0bGUgPyB0aGlzLnJlbmRlclRpdGxlKCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBjdXJyZW50UGFnZSA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlID8gdGhpcy5yZW5kZXJQYWdlKCkgOiBudWxsO1xyXG4gICAgICAgIHZhciB0b3BQcm9ncmVzcyA9IHRoaXMuc3VydmV5LnNob3dQcm9ncmVzc0JhciA9PSBcInRvcFwiID8gdGhpcy5yZW5kZXJQcm9ncmVzcyh0cnVlKSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGJvdHRvbVByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuc2hvd1Byb2dyZXNzQmFyID09IFwiYm90dG9tXCIgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGJ1dHRvbnMgPSAoY3VycmVudFBhZ2UgJiYgdGhpcy5zdXJ2ZXkuc2hvd05hdmlnYXRpb25CdXR0b25zKSA/IHRoaXMucmVuZGVyTmF2aWdhdGlvbigpIDogbnVsbDtcclxuICAgICAgICBpZiAoIWN1cnJlbnRQYWdlKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gdGhpcy5yZW5kZXJFbXB0eVN1cnZleSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHJlZj1cInJvb3RcIiBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAge3RpdGxlfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD17U3VydmV5UGFnZUlkfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9PlxyXG4gICAgICAgICAgICAgICAgICAgIHt0b3BQcm9ncmVzc31cclxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudFBhZ2V9XHJcbiAgICAgICAgICAgICAgICAgICAge2JvdHRvbVByb2dyZXNzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7YnV0dG9uc31cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJ9PjxoMz57dGhpcy5zdXJ2ZXkucHJvY2Vzc2VkVGl0bGV9PC9oMz48L2Rpdj47XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUGFnZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlQYWdlIHN1cnZleT17dGhpcy5zdXJ2ZXl9IHBhZ2U9e3RoaXMuc3VydmV5LmN1cnJlbnRQYWdlfSBjc3M9e3RoaXMuY3NzfSBjcmVhdG9yPXt0aGlzfSAvPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJQcm9ncmVzcyhpc1RvcDogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPFN1cnZleVByb2dyZXNzIHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9IGlzVG9wPXtpc1RvcH0gIC8+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRpb24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5TmF2aWdhdGlvbiBzdXJ2ZXkgPSB7dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9Lz47XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyRW1wdHlTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiAoPHNwYW4+e3RoaXMuc3VydmV5LmVtcHR5U3VydmV5VGV4dH08L3NwYW4+KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcclxuICAgICAgICBpZiAobmV3UHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1cnZleSA9IG5ld1Byb3BzLm1vZGVsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1Byb3BzLmpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cnZleSA9IG5ldyBSZWFjdFN1cnZleU1vZGVsKG5ld1Byb3BzLmpzb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgUmVhY3RTdXJ2ZXlNb2RlbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzLmNsaWVudElkKSB0aGlzLnN1cnZleS5jbGllbnRJZCA9IG5ld1Byb3BzLmNsaWVudElkO1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMuZGF0YSkgdGhpcy5zdXJ2ZXkuZGF0YSA9IG5ld1Byb3BzLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcy5jc3MpIHRoaXMuc3VydmV5Lm1lcmdlQ3NzKG5ld1Byb3BzLmNzcywgdGhpcy5jc3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9zZXQgdGhlIGZpcnN0IHBhZ2VcclxuICAgICAgICB2YXIgZHVtbXkgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgcGFnZUluZGV4Q2hhbmdlOiAwLCBpc0NvbXBsZXRlZDogZmFsc2UsIG1vZGVsQ2hhbmdlZDogMCB9O1xyXG4gICAgICAgIHRoaXMuc2V0U3VydmV5RXZlbnRzKG5ld1Byb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMobmV3UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgPSBzZWxmLnN0YXRlLm1vZGVsQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRlLmFkZCgoc2VuZGVyKSA9PiB7IHNlbGYuc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlOyBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7IHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7IH0pO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGYuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnBhZ2VJbmRleENoYW5nZSA9IHNlbGYuc3RhdGUucGFnZUluZGV4Q2hhbmdlICsgMTtcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzICYmIG5ld1Byb3BzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkKSBuZXdQcm9wcy5vbkN1cnJlbnRQYWdlQ2hhbmdlZChzZW5kZXIsIG9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uVmlzaWJsZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucXVlc3Rpb24gJiYgb3B0aW9ucy5xdWVzdGlvbi5yZWFjdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gb3B0aW9ucy5xdWVzdGlvbi5yZWFjdC5zdGF0ZTtcclxuICAgICAgICAgICAgICAgIHN0YXRlLnZpc2libGUgPSBvcHRpb25zLnF1ZXN0aW9uLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnJlYWN0LnNldFN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uVmFsdWVDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uICYmIG9wdGlvbnMucXVlc3Rpb24ucmVhY3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IG9wdGlvbnMucXVlc3Rpb24ucmVhY3Quc3RhdGU7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnJlYWN0LnNldFN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghbmV3UHJvcHMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnN1cnZleS5vblZhbHVlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMuZGF0YSkgbmV3UHJvcHMuZGF0YVtvcHRpb25zLm5hbWVdID0gb3B0aW9ucy52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzLm9uVmFsdWVDaGFuZ2VkKSBuZXdQcm9wcy5vblZhbHVlQ2hhbmdlZChzZW5kZXIsIG9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vbkNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKChzZW5kZXIpID0+IHsgbmV3UHJvcHMub25Db21wbGV0ZShzZW5kZXIpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uUGFydGlhbFNlbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25QYXJ0aWFsU2VuZC5hZGQoKHNlbmRlcikgPT4geyBuZXdQcm9wcy5vblBhcnRpYWxTZW5kKHNlbmRlcik7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBpZiAobmV3UHJvcHMub25QYWdlVmlzaWJsZUNoYW5nZWQpIG5ld1Byb3BzLm9uUGFnZVZpc2libGVDaGFuZ2VkKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgPSBuZXdQcm9wcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25RdWVzdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uUXVlc3Rpb25BZGRlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vblF1ZXN0aW9uQWRkZWQoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblF1ZXN0aW9uUmVtb3ZlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblF1ZXN0aW9uUmVtb3ZlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vblF1ZXN0aW9uUmVtb3ZlZChzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uVmFsaWRhdGVRdWVzdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblZhbGlkYXRlUXVlc3Rpb24uYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25WYWxpZGF0ZVF1ZXN0aW9uKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25TZW5kUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uU2VuZFJlc3VsdC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vblNlbmRSZXN1bHQoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vbkdldFJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vbkdldFJlc3VsdC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vbkdldFJlc3VsdChzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uUHJvY2Vzc0h0bWwpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9jZXNzSHRtbC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vblByb2Nlc3NIdG1sKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25BZnRlclJlbmRlclN1cnZleSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vbkFmdGVyUmVuZGVyU3VydmV5LmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vbkFmdGVyUmVuZGVyUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vbkFmdGVyUmVuZGVyUGFnZS5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vbkFmdGVyUmVuZGVyUGFnZShzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vbkFmdGVyUmVuZGVyUXVlc3Rpb24uYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25BZnRlclJlbmRlclF1ZXN0aW9uKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL0lTdXJ2ZXlDcmVhdG9yXHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uQ3NzID0gdGhpcy5jc3NbcXVlc3Rpb24uZ2V0VHlwZSgpXTtcclxuICAgICAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb24uZ2V0VHlwZSgpLCB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbiwgY3NzOiBxdWVzdGlvbkNzcywgcm9vdENzczogdGhpcy5jc3MsIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksIGNyZWF0b3I6IHRoaXNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3JUZXh0OiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT17dGhpcy5jc3MuZXJyb3IuaXRlbX0+e2Vycm9yVGV4dH08L2Rpdj47XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247IH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdFN1cnZleS50c3giLCJpbXBvcnQge0Jhc2UsIFN1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hvaWNlc1Jlc3RmdWxsIGV4dGVuZHMgQmFzZSB7XHJcbiAgICBwdWJsaWMgdXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHBhdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgdmFsdWVOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHRpdGxlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJ1bigpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXJsIHx8ICF0aGlzLmdldFJlc3VsdENhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB0aGlzLnVybCk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLm9uTG9hZChKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImNob2ljZXNCeVVybFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnVybCAmJiAhdGhpcy5wYXRoICYmICF0aGlzLnZhbHVlTmFtZSAmJiAhdGhpcy50aXRsZU5hbWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0RGF0YShqc29uOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgaWYgKGpzb24udXJsKSB0aGlzLnVybCA9IGpzb24udXJsO1xyXG4gICAgICAgIGlmIChqc29uLnBhdGgpIHRoaXMucGF0aCA9IGpzb24ucGF0aDtcclxuICAgICAgICBpZiAoanNvbi52YWx1ZU5hbWUpIHRoaXMudmFsdWVOYW1lID0ganNvbi52YWx1ZU5hbWU7XHJcbiAgICAgICAgaWYgKGpzb24udGl0bGVOYW1lKSB0aGlzLnRpdGxlTmFtZSA9IGpzb24udGl0bGVOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMudXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBhdGggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkKHJlc3VsdDogYW55KSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5nZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0KTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdFtcImxlbmd0aFwiXSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IHJlc3VsdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICghaXRlbVZhbHVlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobmV3IEl0ZW1WYWx1ZSh2YWx1ZSwgdGl0bGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVybEdldENob2ljZXNFcnJvclwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVycm9yKHN0YXR1czogc3RyaW5nLCByZXNwb25zZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBDdXN0b21FcnJvcihzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsUmVxdWVzdEVycm9yXCIpW1wiZm9ybWF0XCJdKHN0YXR1cywgcmVzcG9uc2UpKTtcclxuICAgICAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKFtdKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhdGgpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgdmFyIHBhdGhlcyA9IHRoaXMuZ2V0UGF0aGVzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhlc1tpXV07XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UGF0aGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwYXRoZXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5wYXRoLmluZGV4T2YoJzsnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHBhdGhlcyA9IHRoaXMucGF0aC5zcGxpdCgnOycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhdGhlcyA9IHRoaXMucGF0aC5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF0aGVzLmxlbmd0aCA9PSAwKSBwYXRoZXMucHVzaCh0aGlzLnBhdGgpO1xyXG4gICAgICAgIHJldHVybiBwYXRoZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lKSByZXR1cm4gaXRlbVt0aGlzLnZhbHVlTmFtZV07XHJcbiAgICAgICAgdmFyIGxlbiA9IE9iamVjdC5rZXlzKGl0ZW0pLmxlbmd0aDtcclxuICAgICAgICBpZiAobGVuIDwgMSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bT2JqZWN0LmtleXMoaXRlbSlbMF1dO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUaXRsZShpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdGhpcy50aXRsZU5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMudGl0bGVOYW1lXTtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiY2hvaWNlc0J5VXJsXCIsIFtcInVybFwiLCBcInBhdGhcIiwgXCJ2YWx1ZU5hbWVcIiwgXCJ0aXRsZU5hbWVcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nob2ljZXNSZXN0ZnVsbC50cyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2Nlc3NWYWx1ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIGdldEZpcnN0TmFtZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgdmFyIHJlcyA9IFwiXCI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaCA9IHRleHRbaV07XHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ1snKSBicmVhaztcclxuICAgICAgICAgICAgcmVzICs9IGNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc1ZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xyXG4gICAgICAgIHJldHVybiByZXMuaGFzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcclxuICAgICAgICByZXR1cm4gcmVzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHsgaGFzVmFsdWU6IGZhbHNlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICAgIHZhciBjdXJWYWx1ZSA9IHZhbHVlcztcclxuICAgICAgICBpZiAoIWN1clZhbHVlKSByZXR1cm4gcmVzO1xyXG4gICAgICAgIHZhciBpc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAodGV4dCAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzQXJyYXkgPSAhaXNGaXJzdCAmJiB0ZXh0WzBdID09ICdbJztcclxuICAgICAgICAgICAgaWYgKCFpc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3QpIHRleHQgPSB0ZXh0LnN1YnN0cigxKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdE5hbWUodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1ck5hbWUpIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1clZhbHVlW2N1ck5hbWVdKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBjdXJWYWx1ZVtjdXJOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKGN1ck5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJWYWx1ZSkpIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0W2luZGV4XSAhPSAnXScpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGV4dFtpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRleHQgPSBpbmRleCA8IHRleHQubGVuZ3RoID8gdGV4dC5zdWJzdHIoaW5kZXggKyAxKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0SW50VmFsdWUoc3RyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gY3VyVmFsdWUubGVuZ3RoKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBjdXJWYWx1ZVtpbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMudmFsdWUgPSBjdXJWYWx1ZTtcclxuICAgICAgICByZXMuaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEludFZhbHVlKHN0cjogYW55KSB7XHJcbiAgICAgICAgaWYgKHN0ciA9PSBcIjBcIiB8fCAoKHN0ciB8IDApID4gMCAmJiBzdHIgJSAxID09IDApKVxyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHN0cik7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsImV4cG9ydCB2YXIgc3VydmV5Q3NzID0ge1xyXG4gICAgY3VycmVudFR5cGU6IFwiXCIsXHJcbiAgICBnZXRDc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50VHlwZSA/IHRoaXNbdGhpcy5jdXJyZW50VHlwZV0gOiBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICAgICAgaWYgKCFsb2MpIGxvYyA9IGRlZmF1bHRTdGFuZGFyZENzcztcclxuICAgICAgICByZXR1cm4gbG9jO1xyXG4gICAgfSxcclxufTtcclxuXHJcbmV4cG9ydCB2YXIgZGVmYXVsdFN0YW5kYXJkQ3NzID0ge1xyXG4gICAgcm9vdDogXCJzdl9tYWluXCIsXHJcbiAgICBoZWFkZXI6IFwiXCIsXHJcbiAgICBib2R5OiBcInN2X2JvZHlcIixcclxuICAgIGZvb3RlcjogXCJzdl9uYXZcIixcclxuICAgIG5hdmlnYXRpb25CdXR0b246IFwiXCIsIG5hdmlnYXRpb246IHsgY29tcGxldGU6IFwiXCIsIHByZXY6XCJcIiwgbmV4dDogXCJcIn0sXHJcbiAgICBwcm9ncmVzczogXCJzdl9wcm9ncmVzc1wiLCBwcm9ncmVzc0JhcjogXCJcIixcclxuICAgIHBhZ2VUaXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICByb3c6IFwic3Zfcm93XCIsXHJcbiAgICBxdWVzdGlvbjogeyByb290OiBcInN2X3FcIiwgdGl0bGU6IFwic3ZfcV90aXRsZVwiLCBjb21tZW50OiBcIlwiLCBpbmRlbnQ6IDIwIH0sXHJcbiAgICBlcnJvcjogeyByb290OiBcInN2X3FfZXJib3hcIiwgaWNvbjogXCJcIiwgaXRlbTogXCJcIiB9LFxyXG5cclxuICAgIGNoZWNrYm94OiB7IHJvb3Q6IFwic3ZfcWNiY1wiLCBpdGVtOiBcInN2X3FfY2hlY2tib3hcIiwgb3RoZXI6IFwic3ZfcV9vdGhlclwiIH0sXHJcbiAgICBjb21tZW50OiBcIlwiLFxyXG4gICAgZHJvcGRvd246IHsgcm9vdDogXCJcIiwgY29udHJvbDogXCJcIiB9LFxyXG4gICAgbWF0cml4OiB7IHJvb3Q6IFwic3ZfcV9tYXRyaXhcIiB9LFxyXG4gICAgbWF0cml4ZHJvcGRvd246IHsgcm9vdDogXCJzdl9xX21hdHJpeFwiIH0sXHJcbiAgICBtYXRyaXhkeW5hbWljOiB7IHJvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcIlwiIH0sXHJcbiAgICBtdWx0aXBsZXRleHQ6IHsgcm9vdDogXCJcIiwgaXRlbVRpdGxlOiBcIlwiLCBpdGVtVmFsdWU6IFwiXCIgfSxcclxuICAgIHJhZGlvZ3JvdXA6IHsgcm9vdDogXCJzdl9xY2JjXCIsIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsIGxhYmVsOiBcIlwiLCBvdGhlcjogXCJzdl9xX290aGVyXCIgfSxcclxuICAgIHJhdGluZzogeyByb290OiBcInN2X3FfcmF0aW5nXCIsIGl0ZW06IFwic3ZfcV9yYXRpbmdfaXRlbVwiIH0sXHJcbiAgICB0ZXh0OiBcIlwiLFxyXG4gICAgd2luZG93OiB7XHJcbiAgICAgICAgcm9vdDogXCJzdl93aW5kb3dcIiwgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxyXG4gICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLCB0aXRsZTogXCJcIiwgYnV0dG9uOiBcIlwiLCBidXR0b25FeHBhbmRlZDogXCJcIiwgYnV0dG9uQ29sbGFwc2VkOiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuc3VydmV5Q3NzW1wic3RhbmRhcmRcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmQudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtCYXNlLCBJU3VydmV5RGF0YSwgSGFzaFRhYmxlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkRyb3Bkb3duTW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9jaGVja2JveFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25UZXh0TW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5pbXBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxsXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgb25Sb3dDaGFuZ2VkKGNlbGw6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBuZXdSb3dWYWx1ZTogYW55KTtcclxuICAgIGNvbHVtbnM6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPjtcclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbjtcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93bkNvbHVtbiBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc090aGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWluV2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY2VsbFR5cGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG4gICAgcHVibGljIGlucHV0VHlwZTogc3RyaW5nID0gXCJ0ZXh0XCI7XHJcbiAgICBwdWJsaWMgY2hvaWNlc09yZGVyOiBzdHJpbmcgPSBcIm5vbmVcIjtcclxuICAgIHB1YmxpYyBjaG9pY2VzQnlVcmw6IENob2ljZXNSZXN0ZnVsbDtcclxuICAgIHB1YmxpYyBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybCA9IG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCkgeyByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiIH1cclxuICAgIFxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbih2YWx1ZTogc3RyaW5nKXsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAtMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlID0gZGF0YS5jcmVhdGVRdWVzdGlvbih0aGlzLnJvdywgdGhpcy5jb2x1bW4pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZS5zZXREYXRhKHJvdyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5xdWVzdGlvbi52YWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RGF0YSwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaWRDb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWQoKTogc3RyaW5nIHsgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrOyB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YTtcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSByb3dDb21tZW50czogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaWRWYWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5nZXRJZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRDZWxscygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm93VmFsdWVzID0ge307XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1ZhbHVlc1trZXldID0gdmFsdWVba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jZWxsc1tpXS5xdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLmdldFZhbHVlKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93VmFsdWVzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiKSBuZXdWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXNbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yb3dWYWx1ZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQodGhpcywgdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NvbW1lbnRzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDb21tZW50c1tuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCkge1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxuICAgIHByaXZhdGUgYnVpbGRDZWxscygpIHtcclxuICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZGF0YS5jb2x1bW5zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGV4dGVuZHMgUXVlc3Rpb24gaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgIGFkZERlZmF1bHRDb2x1bW5zKG1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSkge1xyXG4gICAgICAgIHZhciBjb2xOYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkgKyspXHJcbiAgICAgICAgICAgIG1hdHJpeC5hZGRDb2x1bW4oY29sTmFtZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNlbGxUeXBlVmFsdWU6IHN0cmluZyA9IFwiZHJvcGRvd25cIjtcclxuICAgIHByaXZhdGUgY29sdW1uQ29sQ291bnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb2x1bW5NaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29sdW1uc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHB1YmxpYyB1cGRhdGVDZWxsc0NhbGxiYWs6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29sdW1uc01ldGhvZHMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbHVtbnModmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPikge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vdmVycmlkZUNvbHVtbnNNZXRob2RzKCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVDb2x1bW5zTWV0aG9kcygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlLmxvY093bmVyID0gc2VsZjtcclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZS5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTWF0cml4RHJvcGRvd25Db2x1bW5bXSk6IE1hdHJpeERyb3Bkb3duQ29sdW1uW10ge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IHNlbGY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY2VsbFR5cGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjZWxsVHlwZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2VsbFR5cGUgPT0gbmV3VmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNlbGxUeXBlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnVwZGF0ZUNlbGxzQ2FsbGJhayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbHVtbkNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sdW1uQ29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Db2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy51cGRhdGVDZWxsc0NhbGxiYWspO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENvbHVtblRpdGxlKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5pc1JlcXVpcmVkICYmIHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dDtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVUZXh0KSByZXF1aXJlVGV4dCArPSBcIiBcIjtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVxdWlyZVRleHQgKyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5taW5XaWR0aCA/IGNvbHVtbi5taW5XaWR0aCA6IHRoaXMuY29sdW1uTWluV2lkdGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNob2ljZXNWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jaG9pY2VzVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIik7IH1cclxuICAgIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24obmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xyXG4gICAgICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlLnB1c2goY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3cobmFtZTogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoY3VyVmFsdWU6IGFueSk6IGFueSB7IHJldHVybiAhY3VyVmFsdWUgPyB7fSA6IGN1clZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgcXVlc3Rpb25WYWx1ZTogYW55LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7fTtcclxuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZighKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xyXG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgICAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiYgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBlcnJvc0luQ29sdW1ucyA9IHRoaXMuaGFzRXJyb3JJbkNvbHVtbnMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJbkNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Db2x1bW5zKGZpcmVDYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBjZWxscyAmJiBjZWxsc1tjb2xJbmRleF0gJiYgY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uICYmIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKSB8fCByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0Q2VsbFF1ZXN0aW9uKHRydWUpO1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uLmN1cnJlbnRFcnJvckNvdW50ID4gMCkgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RHJvcGRvd25EYXRhXHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uQ29yZShyb3csIGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24ubmFtZSA9IGNvbHVtbi5uYW1lO1xyXG4gICAgICAgIHF1ZXN0aW9uLmlzUmVxdWlyZWQgPSBjb2x1bW4uaXNSZXF1aXJlZDtcclxuICAgICAgICBxdWVzdGlvbi5oYXNPdGhlciA9IGNvbHVtbi5oYXNPdGhlcjtcclxuICAgICAgICBxdWVzdGlvbi5yZWFkT25seSA9IHRoaXMucmVhZE9ubHk7XHJcbiAgICAgICAgcXVlc3Rpb24uc2V0RGF0YSh0aGlzLnN1cnZleSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5oYXNPdGhlcikge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24gaW5zdGFuY2VvZiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcclxuICAgICAgICAgICAgICAgICg8UXVlc3Rpb25TZWxlY3RCYXNlPnF1ZXN0aW9uKS5zdG9yZU90aGVyc0FzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgY2VsbFR5cGUgPSBjb2x1bW4uY2VsbFR5cGUgPT0gXCJkZWZhdWx0XCIgPyB0aGlzLmNlbGxUeXBlIDogY29sdW1uLmNlbGxUeXBlO1xyXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRRdWVzdGlvbk5hbWUocm93LCBjb2x1bW4pO1xyXG4gICAgICAgIGlmIChjZWxsVHlwZSA9PSBcImNoZWNrYm94XCIpIHJldHVybiB0aGlzLmNyZWF0ZUNoZWNrYm94KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwicmFkaW9ncm91cFwiKSByZXR1cm4gdGhpcy5jcmVhdGVSYWRpb2dyb3VwKG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwidGV4dFwiKSByZXR1cm4gdGhpcy5jcmVhdGVUZXh0KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwiY29tbWVudFwiKSByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRHJvcGRvd24obmFtZSwgY29sdW1uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRRdWVzdGlvbk5hbWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7IHJldHVybiByb3cucm93TmFtZSArIFwiX1wiICsgY29sdW1uLm5hbWU7IH1cclxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBBcnJheTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLmNob2ljZXMgJiYgY29sdW1uLmNob2ljZXMubGVuZ3RoID4gMCA/IGNvbHVtbi5jaG9pY2VzIDogdGhpcy5jaG9pY2VzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW4ub3B0aW9uc0NhcHRpb24gPyBjb2x1bW4ub3B0aW9uc0NhcHRpb24gOiB0aGlzLm9wdGlvbnNDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURyb3Bkb3duKG5hbWU6IHN0cmluZywgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxLCBjb2x1bW4pO1xyXG4gICAgICAgIHEub3B0aW9uc0NhcHRpb24gPSB0aGlzLmdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2hlY2tib3gobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkNoZWNrYm94TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJjaGVja2JveFwiLCBuYW1lKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdEJhc2VQcm9wZXJ0aWVzKHEsIGNvbHVtbik7XHJcbiAgICAgICAgcS5jb2xDb3VudCA9IGNvbHVtbi5jb2xDb3VudCA+IC0gMSA/IGNvbHVtbi5jb2xDb3VudCA6IHRoaXMuY29sdW1uQ29sQ291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUmFkaW9ncm91cChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0QmFzZVByb3BlcnRpZXMocSwgY29sdW1uKTtcclxuICAgICAgICBxLmNvbENvdW50ID0gY29sdW1uLmNvbENvdW50ID4gLSAxID8gY29sdW1uLmNvbENvdW50IDogdGhpcy5jb2x1bW5Db2xDb3VudDtcclxuICAgICAgICByZXR1cm4gcTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc09yZGVyID0gY29sdW1uLmNob2ljZXNPcmRlcjtcclxuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5nZXRDb2x1bW5DaG9pY2VzKGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc0J5VXJsLnNldERhdGEoY29sdW1uLmNob2ljZXNCeVVybCk7XHJcbiAgICAgICAgaWYoIXF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblRleHRNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25UZXh0TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJ0ZXh0XCIsIG5hbWUpO1xyXG4gICAgICAgIHEuaW5wdXRUeXBlID0gY29sdW1uLmlucHV0VHlwZTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbW1lbnQobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25Db21tZW50TW9kZWwge1xyXG4gICAgICAgIHZhciBxID0gPFF1ZXN0aW9uQ29tbWVudE1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiY29tbWVudFwiLCBuYW1lKTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNlbGxRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIHJldHVybiA8UXVlc3Rpb24+UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUobmV3VmFsdWU6IGFueSwgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XHJcbiAgICAgICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25Sb3dDaGFuZ2VkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIG5ld1Jvd1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCBuZXdWYWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSBkZWxldGUgcm93VmFsdWVba2V5XTtcclxuICAgICAgICBpZiAobmV3Um93VmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuZXdSb3dWYWx1ZSkgcm93VmFsdWVba2V5XSA9IG5ld1Jvd1ZhbHVlW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKG5ld1ZhbHVlLCByb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIiwgW1wibmFtZVwiLCB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNob2ljZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICAgICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifSAsIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sQ291bnRcIiwgZGVmYXVsdDogLTEsIGNob2ljZXM6IFstMSwgMCwgMSwgMiwgMywgNF0gfSwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgXCJoYXNPdGhlcjpib29sZWFuXCIsIFwibWluV2lkdGhcIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc09yZGVyXCIsIGRlZmF1bHQ6IFwibm9uZVwiLCBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIiwgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIG9iai5jaG9pY2VzQnlVcmwuaXNFbXB0eSA/IG51bGwgOiBvYmouY2hvaWNlc0J5VXJsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTsgfSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJpbnB1dFR5cGVcIiwgZGVmYXVsdDogXCJ0ZXh0XCIsIGNob2ljZXM6IFtcImNvbG9yXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIiwgXCJlbWFpbFwiLCBcIm1vbnRoXCIsIFwibnVtYmVyXCIsIFwicGFzc3dvcmRcIiwgXCJyYW5nZVwiLCBcInRlbFwiLCBcInRleHRcIiwgXCJ0aW1lXCIsIFwidXJsXCIsIFwid2Vla1wiXSB9XSxcclxuICAgICAgICBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25iYXNlXCIsIFt7IG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIiwgY2xhc3NOYW1lOiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCJ9LFxyXG4gICAgICAgIFwiaG9yaXpvbnRhbFNjcm9sbDpib29sZWFuXCIsXHJcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jaG9pY2VzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzID0gdmFsdWU7IH19LFxyXG4gICAgICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRyb3Bkb3duXCIsIGNob2ljZXM6IFtcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sdW1uQ29sQ291bnRcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDMsIDRdIH0sIFwiY29sdW1uTWluV2lkdGhcIl0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwiaW1wb3J0IHtCYXNlLCBJUXVlc3Rpb24sIElDb25kaXRpb25SdW5uZXIsIElTdXJ2ZXlEYXRhLCBJU3VydmV5LCBIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcbmltcG9ydCB7UXVlc3Rpb25DdXN0b21XaWRnZXR9IGZyb20gJy4vcXVlc3Rpb25DdXN0b21XaWRnZXRzJztcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tICcuL2pzb25vYmplY3QnO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSAnLi9jb25kaXRpb25zJztcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lcn0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJhc2UgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVF1ZXN0aW9uLCBJQ29uZGl0aW9uUnVubmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBxdWVzdGlvbkNvdW50ZXIgPSAxMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbkJhc2UucXVlc3Rpb25Db3VudGVyKys7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSVN1cnZleURhdGE7XHJcbiAgICBwcml2YXRlIHN1cnZleVZhbHVlOiBJU3VydmV5O1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XHJcbiAgICBwdWJsaWMgY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldDtcclxuICAgIHB1YmxpYyB2aXNpYmxlSWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgc3RhcnRXaXRoTmV3TGluZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgdmlzaWJsZUluZGV4VmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSByZW5kZXJXaWR0aFZhbHVlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSByaWdodEluZGVudFZhbHVlOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGluZGVudDogbnVtYmVyID0gMDtcclxuICAgIGZvY3VzQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgdmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkOyAgICBcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvbkJhc2UuZ2V0UXVlc3Rpb25JZCgpO1xyXG4gICAgICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnZpc2libGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQoPElRdWVzdGlvbj50aGlzLCB0aGlzLnZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlIHx8ICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVJbmRleCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy52aXNpYmxlSW5kZXhWYWx1ZTsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gMDsgfVxyXG4gICAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHsgXHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGFydFdpdGhOZXdMaW5lVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZih0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByZW5kZXJXaWR0aCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5yZW5kZXJXaWR0aFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlbmRlcldpZHRoKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnJlbmRlcldpZHRoKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZW5kZXJXaWR0aFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yaWdodEluZGVudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnJpZ2h0SW5kZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yaWdodEluZGVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzKG9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZSkgeyB9XHJcbiAgICBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIGlmKG5ld1ZhbHVlICYmIG5ld1ZhbHVlW1wicXVlc3Rpb25BZGRlZFwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleVZhbHVlID0gPElTdXJ2ZXk+bmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25TZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBmaXJlQ2FsbGJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25TZXREYXRhKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHsgfVxyXG4gICAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGVJZikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25SdW5uZXIpIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgLy9JUXVlc3Rpb25cclxuICAgIHB1YmxpYyBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZUluZGV4VmFsdWUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZpc2libGVJbmRleFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy52aXNpYmxlSW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBjbGVhclVudXNlZFZhbHVlcygpIHt9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge31cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gKDxJTG9jYWxpemFibGVPd25lcj48YW55PnRoaXMuZGF0YSkuZ2V0TG9jYWxlKCkgOiBcIlwiOyBcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicXVlc3Rpb25iYXNlXCIsIFtcIiFuYW1lXCIsIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcInZpc2libGVJZjpleHByZXNzaW9uXCIsXHJcbiAgICB7IG5hbWU6IFwid2lkdGhcIiB9LCB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWV9LCB7bmFtZTogXCJpbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXX1dKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25iYXNlLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbkJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByb3RlY3RlZCBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN1cnZleSA9IHByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB1cGRhdGU6IDAgfTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnN1cnZleSA9IG5leHRQcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBuZXh0UHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUZ1bmN0aW9uOiBhbnkgPSBudWxsO1xyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS51cGRhdGUgPSBzZWxmLnN0YXRlLnVwZGF0ZSArIDE7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQucmVtb3ZlKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2UudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVhY3RTdXJ2ZXlNb2RlbCBleHRlbmRzIFN1cnZleU1vZGVsIHtcclxuICAgIHJlbmRlckNhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IoanNvbk9iajogYW55ID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKGpzb25PYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJDYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG1lcmdlQ3NzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1lcmdlVmFsdWVzKHNyYywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9BZnRlclJlbmRlclN1cnZleShlbCkge1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbC50c3giLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtCYXNlLCBJU3VydmV5LCBIYXNoVGFibGUsIElRdWVzdGlvbiwgSUVsZW1lbnQsIElDb25kaXRpb25SdW5uZXIsIElQYWdlLCBTdXJ2ZXlFcnJvciwgRXZlbnR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtJU3VydmV5VHJpZ2dlck93bmVyLCBTdXJ2ZXlUcmlnZ2VyfSBmcm9tIFwiLi90cmlnZ2VyXCI7XHJcbmltcG9ydCB7UGFnZU1vZGVsfSBmcm9tIFwiLi9wYWdlXCI7XHJcbmltcG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5pbXBvcnQge1Byb2Nlc3NWYWx1ZX0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XHJcbmltcG9ydCB7ZHhTdXJ2ZXlTZXJ2aWNlfSBmcm9tIFwiLi9keFN1cnZleVNlcnZpY2VcIjtcclxuaW1wb3J0IHtKc29uRXJyb3J9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0N1c3RvbVdpZGdldENvbGxlY3Rpb259IGZyb20gJy4vcXVlc3Rpb25DdXN0b21XaWRnZXRzJztcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TW9kZWwgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVN1cnZleSwgSVN1cnZleVRyaWdnZXJPd25lciwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHVibGljIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIHN1cnZleVBvc3RJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjbGllbnRJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjb29raWVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNvbW1lbnRQcmVmaXg6IHN0cmluZyA9IFwiLUNvbW1lbnRcIjtcclxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd1RpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93UGFnZVRpdGxlczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd0NvbXBsZXRlZFBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHJlcXVpcmVkVGV4dDogc3RyaW5nID0gXCIqXCI7XHJcbiAgICBwdWJsaWMgcXVlc3Rpb25TdGFydEluZGV4OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHNob3dQcm9ncmVzc0Jhcjogc3RyaW5nID0gXCJvZmZcIjtcclxuICAgIHB1YmxpYyBzdG9yZU90aGVyc0FzQ29tbWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgZ29OZXh0UGFnZUF1dG9tYXRpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHBhZ2VzOiBBcnJheTxQYWdlTW9kZWw+ID0gbmV3IEFycmF5PFBhZ2VNb2RlbD4oKTtcclxuICAgIHB1YmxpYyB0cmlnZ2VyczogQXJyYXk8U3VydmV5VHJpZ2dlcj4gPSBuZXcgQXJyYXk8U3VydmV5VHJpZ2dlcj4oKTtcclxuICAgIHB1YmxpYyBjbGVhckludmlzaWJsZVZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZSA6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NDb21wbGV0ZWRIdG1sVmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGFnZVByZXZUZXh0VmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGFnZU5leHRUZXh0VmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jQ29tcGxldGVUZXh0VmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudFBhZ2VWYWx1ZTogUGFnZU1vZGVsID0gbnVsbDtcclxuICAgIHByaXZhdGUgdmFsdWVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgdmFyaWFibGVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgcGFnZVByZXZUZXh0VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcGFnZU5leHRUZXh0VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgY29tcGxldGVUZXh0VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgc2hvd1BhZ2VOdW1iZXJzVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc2hvd1F1ZXN0aW9uTnVtYmVyc1ZhbHVlOiBzdHJpbmcgPSBcIm9uXCI7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlOiBzdHJpbmcgPSBcInRvcFwiO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgaXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHByb2Nlc3NlZFRleHRWYWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XHJcbiAgICBwcml2YXRlIGlzVmFsaWRhdGluZ09uU2VydmVyVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbW9kZVZhbHVlOiBzdHJpbmcgPSBcImVkaXRcIjtcclxuICAgIHByaXZhdGUgaXNEZXNpZ25Nb2RlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYXJ0aWFsU2VuZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25DdXJyZW50UGFnZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblZhbHVlQ2hhbmdlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uVmlzaWJsZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblBhZ2VWaXNpYmxlQ2hhbmdlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUXVlc3Rpb25BZGRlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUXVlc3Rpb25SZW1vdmVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYW5lbEFkZGVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYW5lbFJlbW92ZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblZhbGlkYXRlUXVlc3Rpb246IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zOiAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnk7XHJcbiAgICBwdWJsaWMgb25Qcm9jZXNzSHRtbDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uU2VuZFJlc3VsdDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uR2V0UmVzdWx0OiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25VcGxvYWRGaWxlOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclN1cnZleTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJQYWdlOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclF1ZXN0aW9uOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclBhbmVsOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMganNvbkVycm9yczogQXJyYXk8SnNvbkVycm9yPiA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoanNvbk9iajogYW55ID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jQ29tcGxldGVkSHRtbFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGFnZVByZXZUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NQYWdlTmV4dFRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY0NvbXBsZXRlVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yKCk7XHJcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uSGFzVmFsdWUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7IHJldHVybiBzZWxmLmhhc1Byb2Nlc3NlZFRleHRWYWx1ZShuYW1lKTsgfTtcclxuICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgdGhpcy5wYWdlcy5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEgPSBzZWxmO1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJzLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUuc2V0T3duZXIoc2VsZik7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvY2Vzc2VkVGV4dFZhbHVlcygpO1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDcmVhdGluZygpO1xyXG4gICAgICAgIGlmIChqc29uT2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SnNvbk9iamVjdChqc29uT2JqKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5SWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFN1cnZleUZyb21TZXJ2aWNlKHRoaXMuc3VydmV5SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwic3VydmV5XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY2FsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5jdXJyZW50TG9jYWxlID0gdmFsdWU7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ub25Mb2NhbGVDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9JTG9jYWxpemFibGVPd25lclxyXG4gICAgcHVibGljIGdldExvY2FsZSgpIHsgcmV0dXJuIHRoaXMubG9jYWxlOyB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jU3RyaW5nKHN0cjogc3RyaW5nKSB7IHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGVtcHR5U3VydmV5VGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJlbXB0eVN1cnZleVwiKTsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NUaXRsZS50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVkSHRtbC50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgY29tcGxldGVkSHRtbCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jQ29tcGxldGVkSHRtbC50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NDb21wbGV0ZWRIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVkSHRtbFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgcGFnZVByZXZUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BhZ2VQcmV2VGV4dC50ZXh0ID8gdGhpcy5sb2NQYWdlUHJldlRleHQudGV4dCA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGFnZVByZXZUZXh0XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IHBhZ2VQcmV2VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGFnZVByZXZUZXh0LnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQYWdlUHJldlRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlUHJldlRleHRWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IHBhZ2VOZXh0VGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlTmV4dFRleHQudGV4dCA/IHRoaXMubG9jUGFnZU5leHRUZXh0LnRleHQgOiB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VOZXh0VGV4dFwiKTsgfVxyXG4gICAgcHVibGljIHNldCBwYWdlTmV4dFRleHQobmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BhZ2VOZXh0VGV4dC50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGFnZU5leHRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZU5leHRUZXh0VmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBjb21wbGV0ZVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVUZXh0LnRleHQgPyB0aGlzLmxvY0NvbXBsZXRlVGV4dC50ZXh0IDogdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0ZVRleHRcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgY29tcGxldGVUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NDb21wbGV0ZVRleHQudGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0NvbXBsZXRlVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlVGV4dFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZS50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUudGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlVmFsdWU7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3dQYWdlTnVtYmVycygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc2hvd1BhZ2VOdW1iZXJzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd1BhZ2VOdW1iZXJzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dQYWdlTnVtYmVycykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2hvd1BhZ2VOdW1iZXJzVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNob3dRdWVzdGlvbk51bWJlcnMoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVyc1ZhbHVlOyB9O1xyXG4gICAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVyc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7IHJldHVybiB0aGlzLnByb2Nlc3NUZXh0KHRoaXMudGl0bGUpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZTsgfTtcclxuICAgIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uVmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlID0gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgcHVibGljIGdldCBtb2RlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm1vZGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5tb2RlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IFwiZWRpdFwiICYmIHZhbHVlICE9IFwiZGlzcGxheVwiKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tb2RlVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXNIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy52YWx1ZXNIYXNoW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldERhdGFWYWx1ZShkYXRhOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNIYXNoW2tleV0gPSBkYXRhW2tleV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGRhdGEoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNIYXNoID0ge307XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGFWYWx1ZShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1RyaWdnZXJzKGtleSwgZGF0YVtrZXldLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1trZXkudG9Mb3dlckNhc2UoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNba2V5LnRvTG93ZXJDYXNlKCldID0gXCJ2YWx1ZVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29tbWVudHMoKTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFsdWVzSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5jb21tZW50UHJlZml4KSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy52YWx1ZXNIYXNoW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8UGFnZU1vZGVsPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5wYWdlcztcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PFBhZ2VNb2RlbD4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnBhZ2VzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGggPT0gMDsgfVxyXG4gICAgcHVibGljIGdldCBQYWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVQYWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50UGFnZSgpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IG51bGwgJiYgdlBhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudFBhZ2UodmFsdWU6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2UGFnZXMuaW5kZXhPZih2YWx1ZSkgPCAwKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUN1c3RvbVdpZGdldHModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VDaGFuZ2VkKHZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRQYWdlTm8oKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudFBhZ2VObyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdGhpcy52aXNpYmxlUGFnZXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VzW3ZhbHVlXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0UXVlc3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUuc2Nyb2xsVG9Ub3AoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybiBcImxvYWRpbmdcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCkgcmV0dXJuIFwiY29tcGxldGVkXCI7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlKSA/IFwicnVubmluZ1wiIDogXCJlbXB0eVwiXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoY2xlYXJEYXRhOiBib29sZWFuID0gdHJ1ZSwgZ290b0ZpcnN0UGFnZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoY2xlYXJEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzSGFzaCA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGdvdG9GaXJzdFBhZ2UgJiYgdGhpcy52aXNpYmxlUGFnZUNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG1lcmdlVmFsdWVzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcclxuICAgICAgICBpZiAoIWRlc3QgfHwgIXNyYykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gc3JjW2tleV07XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc3Rba2V5XSkgZGVzdFtrZXldID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCBkZXN0W2tleV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVzdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ3VzdG9tV2lkZ2V0cyhwYWdlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2UucXVlc3Rpb25zW2ldLmN1c3RvbVdpZGdldCA9IEN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuZ2V0Q3VzdG9tV2lkZ2V0KHBhZ2UucXVlc3Rpb25zW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudFBhZ2VDaGFuZ2VkKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmZpcmUodGhpcywgeyAnb2xkQ3VycmVudFBhZ2UnOiBvbGRWYWx1ZSwgJ25ld0N1cnJlbnRQYWdlJzogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UHJvZ3Jlc3MoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gMDtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKChpbmRleCAqIDEwMCAvIHRoaXMudmlzaWJsZVBhZ2VDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09IFwic2hvd1wiIHx8XHJcbiAgICAgICAgICAgIChwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSAhPSBcImhpZGVcIiAmJiB0aGlzLnNob3dOYXZpZ2F0aW9uQnV0dG9ucyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm1vZGUgPT0gXCJlZGl0XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubW9kZSA9PSBcImRpc3BsYXlcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc0Rlc2lnbk1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzRGVzaWduTW9kZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0RGVzaWduTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNEZXNpZ25Nb2RlVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29va2llKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWU7XHJcbiAgICAgICAgcmV0dXJuIGNvb2tpZXMgJiYgY29va2llcy5pbmRleE9mKHRoaXMuY29va2llTmFtZSArIFwiPXRydWVcIikgPiAtMTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDb29raWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHJldHVybjtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSB0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlOyBleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMDowOjAgR01UXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGVsZXRlQ29va2llKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm47XHJcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gdGhpcy5jb29raWVOYW1lICsgXCI9O1wiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuaXNDdXJyZW50UGFnZUhhc0Vycm9ycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRvU2VydmVyVmFsaWRhdGlvbigpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb05leHRQYWdlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBnZXQgaXNDdXJyZW50UGFnZUhhc0Vycm9ycygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZS5oYXNFcnJvcnModHJ1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcHJldlBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCAtIDFdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNvbXBsZXRlTGFzdFBhZ2UoKSA6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUgJiYgdGhpcy5pc0N1cnJlbnRQYWdlSGFzRXJyb3JzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9TZXJ2ZXJWYWxpZGF0aW9uKCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmRvQ29tcGxldGUoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7IFxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHJldHVybiB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSA9PSB2UGFnZXMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkb0NvbXBsZXRlKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcclxuICAgICAgICB0aGlzLnNldENvb2tpZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tcGxldGVkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmZpcmUodGhpcywgbnVsbCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5UG9zdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFJlc3VsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWYWxpZGF0aW5nT25TZXJ2ZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyVmFsdWU7IH1cclxuICAgIHByaXZhdGUgc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlclZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMub25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpIHsgfVxyXG4gICAgcHJvdGVjdGVkIGRvU2VydmVyVmFsaWRhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgZGF0YToge30sIGVycm9yczoge30sIHN1cnZleTogdGhpcywgY29tcGxldGUgOiBmdW5jdGlvbiAoKSB7IHNlbGYuY29tcGxldGVTZXJ2ZXJWYWxpZGF0aW9uKG9wdGlvbnMpOyB9IH07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRQYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmN1cnJlbnRQYWdlLnF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZShxdWVzdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSBvcHRpb25zLmRhdGFbcXVlc3Rpb24ubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih0cnVlKTtcclxuICAgICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKGZhbHNlKTtcclxuICAgICAgICBpZiAoIW9wdGlvbnMgJiYgIW9wdGlvbnMuc3VydmV5KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHNlbGYgPSBvcHRpb25zLnN1cnZleTtcclxuICAgICAgICB2YXIgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucy5lcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHNlbGYuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiYgcXVlc3Rpb25bXCJlcnJvcnNcIl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uW1wiYWRkRXJyb3JcIl0obmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3JzW25hbWVdKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaXNMYXN0UGFnZSkgc2VsZi5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2VsZi5kb05leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGRvTmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja09uUGFnZVRyaWdnZXJzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VuZFJlc3VsdE9uUGFnZU5leHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kUmVzdWx0KHRoaXMuc3VydmV5UG9zdElkLCB0aGlzLmNsaWVudElkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbaW5kZXggKyAxXTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRDb21wbGV0ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWRIdG1sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMuY29tcGxldGVkSHRtbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleVwiKSArIFwiPC9oMz5cIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkTG9hZGluZ0h0bWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCI8aDM+XCIgKyB0aGlzLmdldExvY1N0cmluZyhcImxvYWRpbmdTdXJ2ZXlcIikgKyBcIjwvaDM+XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKGluZGV4LCB2UGFnZXMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBhZnRlclJlbmRlclN1cnZleShodG1sRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclN1cnZleS5maXJlKHRoaXMsIHsgc3VydmV5OiB0aGlzLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgICBhZnRlclJlbmRlclBhZ2UoaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5pc0VtcHR5KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5maXJlKHRoaXMsIHsgcGFnZTogdGhpcy5jdXJyZW50UGFnZSwgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50IH0pO1xyXG4gICAgfVxyXG4gICAgYWZ0ZXJSZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuICAgIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclBhbmVsLmZpcmUodGhpcywgeyBwYW5lbDogcGFuZWwsIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBsb2FkRmlsZShuYW1lOiBzdHJpbmcsIGZpbGU6IEZpbGUsIHN0b3JlRGF0YUFzVGV4dDogYm9vbGVhbiwgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZyk9PmFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBhY2NlcHQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25VcGxvYWRGaWxlLmZpcmUodGhpcywgeyBuYW1lOiBuYW1lLCBmaWxlOiBmaWxlLCBhY2NlcHQ6IGFjY2VwdCB9KTtcclxuICAgICAgICBpZiAoIWFjY2VwdCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghc3RvcmVEYXRhQXNUZXh0ICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvcmUobmFtZSwgZmlsZSwgdXBsb2FkaW5nQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGxvYWRGaWxlQ29yZShuYW1lOiBzdHJpbmcsIGZpbGU6IEZpbGUsIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcpID0+IGFueSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAodXBsb2FkaW5nQ2FsbGJhY2spIHVwbG9hZGluZ0NhbGxiYWNrKFwidXBsb2FkaW5nXCIpO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5zZW5kRmlsZSh0aGlzLnN1cnZleVBvc3RJZCwgZmlsZSwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhzdWNjZXNzID8gXCJzdWNjZXNzXCIgOiBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRWYWx1ZShuYW1lLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGdldFBhZ2UoaW5kZXg6IG51bWJlcik6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgYWRkUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICBpZiAocGFnZSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYWdlcy5wdXNoKHBhZ2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH1cclxuICAgIGFkZE5ld1BhZ2UobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UobmFtZSk7XHJcbiAgICAgICAgdGhpcy5hZGRQYWdlKHBhZ2UpO1xyXG4gICAgICAgIHJldHVybiBwYWdlO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YocGFnZSk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IHBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXMubGVuZ3RoID4gMCA/IHRoaXMucGFnZXNbMF0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nLCBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElRdWVzdGlvbiB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbk5hbWUgPSBxdWVzdGlvbnNbaV0ubmFtZTtcclxuICAgICAgICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkgcXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmKHF1ZXN0aW9uTmFtZSA9PSBuYW1lKSByZXR1cm4gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRRdWVzdGlvbnNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UpOiBJUXVlc3Rpb25bXSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghbmFtZXNbaV0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWVzW2ldLCBjYXNlSW5zZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24pIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlQnlFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogUGFnZU1vZGVsIHtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XHJcbiAgICAgICAgICAgIGlmKHBhZ2UuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gcGFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucGFnZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VzQnlOYW1lcyhuYW1lczogc3RyaW5nW10pOiBQYWdlTW9kZWxbXXtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKCFuYW1lcykgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFuYW1lc1tpXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2UpIHJlc3VsdC5wdXNoKHBhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFF1ZXN0aW9ucyh2aXNpYmxlT25seTogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SVF1ZXN0aW9uPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUXVlc3Rpb24+KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFnZShuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIG5ldyBQYWdlTW9kZWwobmFtZSk7IH1cclxuICAgIHByaXZhdGUgbm90aWZ5UXVlc3Rpb25PblZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5uYW1lICE9IG5hbWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5kb1N1cnZleVZhbHVlQ2hhbmdlZChxdWVzdGlvbiwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgeyAnbmFtZSc6IG5hbWUsICdxdWVzdGlvbic6IHF1ZXN0aW9uLCAndmFsdWUnOiBuZXdWYWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmRvU3VydmV5VmFsdWVDaGFuZ2VkKHF1ZXN0aW9uc1tpXSwgdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0ubmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkb1N1cnZleVZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgcXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja09uUGFnZVRyaWdnZXJzKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVHJpZ2dlcnMocXVlc3Rpb24ubmFtZSwgdmFsdWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb25CYXNlPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBwYWdlLnF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbi52aXNpYmxlIHx8ICFxdWVzdGlvbi5uYW1lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja1RyaWdnZXJzKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSwgaXNPbk5leHRQYWdlOiBib29sZWFuKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMudHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJzW2ldO1xyXG4gICAgICAgICAgICBpZiAodHJpZ2dlci5uYW1lID09IG5hbWUgJiYgdHJpZ2dlci5pc09uTmV4dFBhZ2UgPT0gaXNPbk5leHRQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyLmNoZWNrKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9FbGVtZW50c09uTG9hZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5vblN1cnZleUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bkNvbmRpdGlvbnMoKSB7XHJcbiAgICAgICAgdmFyIHBhZ2VzID0gdGhpcy5wYWdlcztcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzW2ldLnJ1bkNvbmRpdGlvbih0aGlzLnZhbHVlc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0KHBvc3RJZDogc3RyaW5nID0gbnVsbCwgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmIHRoaXMub25QYXJ0aWFsU2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uUGFydGlhbFNlbmQuZmlyZSh0aGlzLCBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcG9zdElkICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XHJcbiAgICAgICAgICAgIHBvc3RJZCA9IHRoaXMuc3VydmV5UG9zdElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBvc3RJZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjbGllbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gY2xpZW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQgJiYgIXRoaXMuY2xpZW50SWQpIHJldHVybjtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbmV3IGR4U3VydmV5U2VydmljZSgpLnNlbmRSZXN1bHQocG9zdElkLCB0aGlzLmRhdGEsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIHNlbGYub25TZW5kUmVzdWx0LmZpcmUoc2VsZiwgeyBzdWNjZXNzOiBzdWNjZXNzLCByZXNwb25zZTogcmVzcG9uc2V9KTtcclxuICAgICAgICB9LCB0aGlzLmNsaWVudElkLCBpc1BhcnRpYWxDb21wbGV0ZWQpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFJlc3VsdChyZXN1bHRJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbmV3IGR4U3VydmV5U2VydmljZSgpLmdldFJlc3VsdChyZXN1bHRJZCwgbmFtZSwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIGRhdGE6IGFueSwgZGF0YUxpc3Q6IGFueVtdLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7IHN1Y2Nlc3M6IHN1Y2Nlc3MsIGRhdGE6IGRhdGEsIGRhdGFMaXN0OiBkYXRhTGlzdCwgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXlGcm9tU2VydmljZShzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzdXJ2ZXlJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleUlkID0gc3VydmV5SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5sb2FkU3VydmV5KHRoaXMuc3VydmV5SWQsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0SnNvbk9iamVjdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrUGFnZVZpc2liaWxpdHkocXVlc3Rpb246IElRdWVzdGlvbiwgb2xkUXVlc3Rpb25WaXNpYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmdldFBhZ2VCeVF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybjtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBwYWdlLmlzVmlzaWJsZTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgIT0gcGFnZS5nZXRJc1BhZ2VWaXNpYmxlKHF1ZXN0aW9uKSB8fCBvbGRRdWVzdGlvblZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlVmlzaWJsZUluZGV4ZXMoKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXModGhpcy5zaG93UGFnZU51bWJlcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblBhZ2VcIikge1xyXG4gICAgICAgICAgICB2YXIgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvblZpc2libGVJbmRleGVzKHZpc1BhZ2VzW2ldLnF1ZXN0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uVmlzaWJsZUluZGV4ZXModGhpcy5nZXRBbGxRdWVzdGlvbnMoZmFsc2UpLCB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyhzaG93SW5kZXg6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCA9IHRoaXMucGFnZXNbaV0udmlzaWJsZSA/IChpbmRleCsrKSA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLm51bSA9IHNob3dJbmRleCAmJiB0aGlzLnBhZ2VzW2ldLnZpc2libGUgPyB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCArIDEgOiAtMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVF1ZXN0aW9uVmlzaWJsZUluZGV4ZXMocXVlc3Rpb25zOiBJUXVlc3Rpb25bXSwgc2hvd0luZGV4OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0uc2V0VmlzaWJsZUluZGV4KHNob3dJbmRleCAmJiBxdWVzdGlvbnNbaV0udmlzaWJsZSAmJiBxdWVzdGlvbnNbaV0uaGFzVGl0bGUgPyAoaW5kZXgrKykgOiAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2V0IGlzTG9hZGluZ0Zyb21Kc29uKCkgeyByZXR1cm4gdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlOyB9XHJcbiAgICBwcml2YXRlIHNldEpzb25PYmplY3QoanNvbk9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKCFqc29uT2JqKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5qc29uRXJyb3JzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHZhciBqc29uQ29udmVydGVyID0gbmV3IEpzb25PYmplY3QoKTtcclxuICAgICAgICBqc29uQ29udmVydGVyLnRvT2JqZWN0KGpzb25PYmosIHRoaXMpO1xyXG4gICAgICAgIGlmIChqc29uQ29udmVydGVyLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbkVycm9ycyA9IGpzb25Db252ZXJ0ZXIuZXJyb3JzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2Nlc3NlZFRleHRWYWx1ZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb29raWUpIHtcclxuICAgICAgICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xyXG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0aW5nKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHsgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQcm9jZXNzZWRUZXh0VmFsdWVzKCkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbXCJwYWdlbm9cIl0gPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gc2VsZi5jdXJyZW50UGFnZSAhPSBudWxsID8gc2VsZi52aXNpYmxlUGFnZXMuaW5kZXhPZihzZWxmLmN1cnJlbnRQYWdlKSArIDEgOiAwOyB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW1wicGFnZWNvdW50XCJdID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHNlbGYudmlzaWJsZVBhZ2VDb3VudDsgfVxyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUXVlc3Rpb25Ub1Byb2Nlc3NlZFRleHRWYWx1ZXMocXVlc3Rpb25zW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFkZFF1ZXN0aW9uVG9Qcm9jZXNzZWRUZXh0VmFsdWVzKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbcXVlc3Rpb24ubmFtZS50b0xvd2VyQ2FzZSgpXSA9IFwicXVlc3Rpb25cIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaGFzUHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZShuYW1lKTtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2ZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHZhbCA9PSBcInZhcmlhYmxlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUobmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbCA9PSBcInF1ZXN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgbmFtZSA9IHF1ZXN0aW9uLm5hbWUgKyBuYW1lLnN1YnN0cihmaXJzdE5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsID09IFwidmFsdWVcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzSGFzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWwobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNsZWFyVW51c2VkVmFsdWVzKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV0udmlzaWJsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZShxdWVzdGlvbnNbaV0ubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXNIYXNoW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gXCJ2YXJpYWJsZVwiO1xyXG4gICAgfVxyXG4gICAgLy9JU3VydmV5IGRhdGFcclxuICAgIHByb3RlY3RlZCBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgLy9kbyBub3QgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBpbnN0YW5jZSEhIVxyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZXNIYXNoW25hbWVdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRXF1YWwobmFtZSwgbmV3VmFsdWUpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiIHx8IG5ld1ZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc0hhc2hbbmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gXCJ2YWx1ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeVF1ZXN0aW9uT25WYWx1ZUNoYW5nZWQobmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhuYW1lLCBuZXdWYWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUVxdWFsKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSBcIlwiKSBuZXdWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IG51bGwpIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgfHwgIXRoaXMuY3VycmVudFBhZ2UpIHJldHVybjtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbiAmJiAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkpKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zW2ldLmhhc0lucHV0ICYmICF0aGlzLmdldFZhbHVlKHF1ZXN0aW9uc1tpXS5uYW1lKSkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2UuaGFzRXJyb3JzKHRydWUsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGFbbmFtZSArIHRoaXMuY29tbWVudFByZWZpeF07XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBuYW1lID0gbmFtZSArIHRoaXMuY29tbWVudFByZWZpeDtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzSGFzaFtuYW1lXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc0hhc2hbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhclZhbHVlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb21tZW50KG5hbWUsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7ICdxdWVzdGlvbic6IHF1ZXN0aW9uLCAnbmFtZSc6IHF1ZXN0aW9uLm5hbWUsICd2aXNpYmxlJzogbmV3VmFsdWUgfSk7XHJcbiAgICAgICAgdGhpcy5jaGVja1BhZ2VWaXNpYmlsaXR5KHF1ZXN0aW9uLCAhbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2U6IElQYWdlLCBuZXdWYWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywgeyAncGFnZSc6IHBhZ2UsICd2aXNpYmxlJzogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBxdWVzdGlvbkFkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMuYWRkUXVlc3Rpb25Ub1Byb2Nlc3NlZFRleHRWYWx1ZXMocXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMub25RdWVzdGlvbkFkZGVkLmZpcmUodGhpcywgeyAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ25hbWUnOiBxdWVzdGlvbi5uYW1lLCAnaW5kZXgnOiBpbmRleCwgJ3BhcmVudFBhbmVsJzogcGFyZW50UGFuZWwsICdyb290UGFuZWwnOiByb290UGFuZWwgfSk7XHJcbiAgICB9XHJcbiAgICBxdWVzdGlvblJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUXVlc3Rpb25SZW1vdmVkLmZpcmUodGhpcywgeyAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ25hbWUnOiBxdWVzdGlvbi5uYW1lIH0pO1xyXG4gICAgfVxyXG4gICAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25QYW5lbEFkZGVkLmZpcmUodGhpcywgeyAncGFuZWwnOiBwYW5lbCwgJ25hbWUnOiBwYW5lbC5uYW1lLCAnaW5kZXgnOiBpbmRleCwgJ3BhcmVudFBhbmVsJzogcGFyZW50UGFuZWwsICdyb290UGFuZWwnOiByb290UGFuZWwgfSk7XHJcbiAgICB9XHJcbiAgICBwYW5lbFJlbW92ZWQocGFuZWw6IElFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25QYW5lbFJlbW92ZWQuZmlyZSh0aGlzLCB7ICdwYW5lbCc6IHBhbmVsLCAnbmFtZSc6IHBhbmVsLm5hbWUgfSk7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZVF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFN1cnZleUVycm9yIHtcclxuICAgICAgICBpZiAodGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IG5hbWU6IG5hbWUsIHZhbHVlOiB0aGlzLmdldFZhbHVlKG5hbWUpLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvcikgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJvY2Vzc0h0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgaHRtbDogaHRtbCB9O1xyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzSHRtbC5maXJlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUZXh0KG9wdGlvbnMuaHRtbCk7XHJcbiAgICB9XHJcbiAgICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0KTtcclxuICAgIH1cclxuICAgIC8vSVN1cnZleVRyaWdnZXJPd25lclxyXG4gICAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXXtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocmVzdWx0LCB0aGlzLmdldFBhZ2VzQnlOYW1lcyhwYWdlcykpO1xyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRRdWVzdGlvbnNCeU5hbWVzKHF1ZXN0aW9ucykpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBzZXRUcmlnZ2VyVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc1ZhcmlhYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vL01ha2UgbG9jYWxpemFibGU6IGNvbXBsZXRlZEh0bWwsIHBhZ2VQcmV2VGV4dCwgcGFnZU5leHRUZXh0LCBjb21wbGV0ZVRleHRcclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW3sgbmFtZTogXCJsb2NhbGVcIiwgY2hvaWNlczogKCkgPT4geyByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXMoKSB9IH0sXHJcbiAgICB7bmFtZTogXCJ0aXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIn0sIHsgbmFtZTogXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlfSwgXHJcbiAgICB7bmFtZTogXCJjb21wbGV0ZWRIdG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlZEh0bWxcIn0sIHsgbmFtZTogXCJwYWdlc1wiLCBjbGFzc05hbWU6IFwicGFnZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxyXG4gICAgeyBuYW1lOiBcInF1ZXN0aW9uc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInF1ZXN0aW9uXCIsIHZpc2libGU6IGZhbHNlLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBudWxsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWx1ZSwganNvbkNvbnZlcnRlcikgeyB2YXIgcGFnZSA9IG9iai5hZGROZXdQYWdlKFwiXCIpOyBqc29uQ29udmVydGVyLnRvT2JqZWN0KHsgcXVlc3Rpb25zOiB2YWx1ZSB9LCBwYWdlKTsgfSB9LFxyXG4gICAgeyBuYW1lOiBcInRyaWdnZXJzOnRyaWdnZXJzXCIsIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dHJpZ2dlclwiLCBjbGFzc05hbWVQYXJ0OiBcInRyaWdnZXJcIiB9LFxyXG4gICAgXCJzdXJ2ZXlJZFwiLCBcInN1cnZleVBvc3RJZFwiLCBcImNvb2tpZU5hbWVcIiwgXCJzZW5kUmVzdWx0T25QYWdlTmV4dDpib29sZWFuXCIsXHJcbiAgICB7IG5hbWU6IFwic2hvd05hdmlnYXRpb25CdXR0b25zOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCB7IG5hbWU6IFwic2hvd1RpdGxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcclxuICAgIHsgbmFtZTogXCJzaG93UGFnZVRpdGxlczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgeyBuYW1lOiBcInNob3dDb21wbGV0ZWRQYWdlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxyXG4gICAgXCJzaG93UGFnZU51bWJlcnM6Ym9vbGVhblwiLCB7IG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCBkZWZhdWx0OiBcIm9uXCIsIGNob2ljZXM6IFtcIm9uXCIsIFwib25QYWdlXCIsIFwib2ZmXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwidG9wXCIsIGNob2ljZXM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSB9LFxyXG4gICAgeyBuYW1lOiBcInNob3dQcm9ncmVzc0JhclwiLCBkZWZhdWx0OiBcIm9mZlwiLCBjaG9pY2VzOiBbXCJvZmZcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0gfSxcclxuICAgIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxyXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcImdvTmV4dFBhZ2VBdXRvbWF0aWM6Ym9vbGVhblwiLCBcImNsZWFySW52aXNpYmxlVmFsdWVzOmJvb2xlYW5cIixcclxuICAgIHsgbmFtZTogXCJwYWdlUHJldlRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VQcmV2VGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJwYWdlTmV4dFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VOZXh0VGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJjb21wbGV0ZVRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlVGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJyZXF1aXJlZFRleHRcIiwgZGVmYXVsdDogXCIqXCIgfSwgXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwge25hbWU6IFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGVcIn1dKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5LnRzIiwiZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3JJdGVtIHtcclxuICAgIHB1YmxpYyBzdGFydDogbnVtYmVyO1xyXG4gICAgcHVibGljIGVuZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvciB7XHJcbiAgICBwdWJsaWMgb25Qcm9jZXNzOiAobmFtZTogc3RyaW5nKSA9PiBhbnk7XHJcbiAgICBwdWJsaWMgb25IYXNWYWx1ZTogKG5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgICBwdWJsaWMgcHJvY2Vzcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uUHJvY2VzcykgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5nZXRJdGVtcyh0ZXh0KTtcclxuICAgICAgICBmb3IgKHZhciBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldE5hbWUodGV4dC5zdWJzdHJpbmcoaXRlbS5zdGFydCArIDEsIGl0ZW0uZW5kKSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Qcm9jZXNzTmFtZShuYW1lKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uSGFzVmFsdWUgJiYgIXRoaXMub25IYXNWYWx1ZShuYW1lKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMub25Qcm9jZXNzKG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHIoMCwgaXRlbS5zdGFydCkgKyB2YWx1ZSArIHRleHQuc3Vic3RyKGl0ZW0uZW5kICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtcyh0ZXh0OiBzdHJpbmcpOiBBcnJheTxUZXh0UHJlUHJvY2Vzc29ySXRlbT4ge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgICAgICB2YXIgc3RhcnQgPSAtMTtcclxuICAgICAgICB2YXIgY2ggPSAnJztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNoID0gdGV4dFtpXTtcclxuICAgICAgICAgICAgaWYgKGNoID09ICd7Jykgc3RhcnQgPSBpO1xyXG4gICAgICAgICAgICBpZiAoY2ggPT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IFRleHRQcmVQcm9jZXNzb3JJdGVtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGFydCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5kID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICByZXR1cm4gbmFtZS50cmltKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNhblByb2Nlc3NOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2ggPSBuYW1lW2ldO1xyXG4gICAgICAgICAgICAvL1RPRE9cclxuICAgICAgICAgICAgaWYgKGNoID09ICcgJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJyYnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHMiLCJpbXBvcnQge0Jhc2UsIFN1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3IsIFJlcXVyZU51bWVyaWNFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tICcuL2pzb25vYmplY3QnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IGFueSwgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGwpIHtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVZhbGlkYXRvciBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIDogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy50ZXh0KSByZXR1cm4gdGhpcy50ZXh0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRFcnJvclRleHQobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvck93bmVyIHtcclxuICAgIHZhbGlkYXRvcnM6IEFycmF5PFN1cnZleVZhbGlkYXRvcj47XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSdW5uZXIge1xyXG4gICAgcHVibGljIHJ1bihvd25lcjogSVZhbGlkYXRvck93bmVyKTogU3VydmV5RXJyb3Ige1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3duZXIudmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmFsaWRhdG9yUmVzdWx0ID0gb3duZXIudmFsaWRhdG9yc1tpXS52YWxpZGF0ZShvd25lci52YWx1ZSwgb3duZXIuZ2V0VmFsaWRhdG9yVGl0bGUoKSk7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3JSZXN1bHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvclJlc3VsdC5lcnJvcikgcmV0dXJuIHZhbGlkYXRvclJlc3VsdC5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3JSZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvd25lci52YWx1ZSA9IHZhbGlkYXRvclJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWNWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1pblZhbHVlOiBudW1iZXIgPSBudWxsLCBwdWJsaWMgbWF4VmFsdWU6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwibnVtZXJpY3ZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdGhpcy5pc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IFJlcXVyZU51bWVyaWNFcnJvcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWYWxpZGF0b3JSZXN1bHQocGFyc2VGbG9hdCh2YWx1ZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLm1pblZhbHVlICYmIHRoaXMubWluVmFsdWUgPiByZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yID0gbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgJiYgdGhpcy5tYXhWYWx1ZSA8IHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpID8gbnVsbCA6IHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciB2TmFtZSA9IG5hbWUgPyBuYW1lIDogXCJ2YWx1ZVwiO1xyXG4gICAgICAgIGlmICh0aGlzLm1pblZhbHVlICYmIHRoaXMubWF4VmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljTWluTWF4XCIpW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljTWluXCIpW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1pblZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNNYXhcIilbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWF4VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNOdW1iZXIodmFsdWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSAmJiBpc0Zpbml0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBtaW5MZW5ndGg6IG51bWJlciA9IDAsIHB1YmxpYyBtYXhMZW5ndGg6IG51bWJlciA9IDApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidGV4dHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwICYmIHRoaXMubWF4TGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0ZXh0TWluTWF4TGVuZ3RoXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluTGVuZ3RoLCB0aGlzLm1heExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCkgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0ZXh0TWluTGVuZ3RoXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluTGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRleHRNYXhMZW5ndGhcIilbXCJmb3JtYXRcIl0odGhpcy5tYXhMZW5ndGgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQW5zd2VyQ291bnRWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1pbkNvdW50OiBudW1iZXIgPSBudWxsLCBwdWJsaWMgbWF4Q291bnQ6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmNvbnN0cnVjdG9yICE9IEFycmF5KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgY291bnQgPSB2YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMubWluQ291bnQgJiYgY291bnQgPCB0aGlzLm1pbkNvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWluU2VsZWN0RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5taW5Db3VudCkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heENvdW50ICYmIGNvdW50ID4gdGhpcy5tYXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQoc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1heFNlbGVjdEVycm9yXCIpW1wiZm9ybWF0XCJdKHRoaXMubWF4Q291bnQpKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVnZXhWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlZ2V4OiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInJlZ2V4dmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAoIXRoaXMucmVnZXggfHwgIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRoaXMucmVnZXgpO1xyXG4gICAgICAgIGlmIChyZS50ZXN0KHZhbHVlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSkpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBFbWFpbFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBwcml2YXRlIHJlID0gL14oKFtePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl17Mix9KSQvaTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJlbWFpbHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiaW52YWxpZEVtYWlsXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5dmFsaWRhdG9yXCIsIFtcInRleHRcIl0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibnVtZXJpY3ZhbGlkYXRvclwiLCBbXCJtaW5WYWx1ZTpudW1iZXJcIiwgXCJtYXhWYWx1ZTpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBOdW1lcmljVmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidGV4dHZhbGlkYXRvclwiLCBbXCJtaW5MZW5ndGg6bnVtYmVyXCIsIFwibWF4TGVuZ3RoOm51bWJlclwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFRleHRWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJhbnN3ZXJjb3VudHZhbGlkYXRvclwiLCBbXCJtaW5Db3VudDpudW1iZXJcIiwgXCJtYXhDb3VudDpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBBbnN3ZXJDb3VudFZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInJlZ2V4dmFsaWRhdG9yXCIsIFtcInJlZ2V4XCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUmVnZXhWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJlbWFpbHZhbGlkYXRvclwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEVtYWlsVmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy92YWxpZGF0b3IudHMiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5fSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93IGV4dGVuZHMgU3VydmV5IHtcclxuICAgIHByaXZhdGUgdGl0bGU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkV4cGFuZGVkID0gdGhpcy5oYW5kbGVPbkV4cGFuZGVkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZCA9ICF0aGlzLnN0YXRlLmV4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmhpZGRlbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XHJcbiAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnN0YXRlLmV4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgcG9zaXRpb246IFwiZml4ZWRcIiwgYm90dG9tOiBcIjNweFwiLCByaWdodDogXCIxMHB4XCIgfTtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLndpbmRvdy5yb290fSBzdHlsZT17c3R5bGV9PlxyXG4gICAgICAgICAgICB7aGVhZGVyfVxyXG4gICAgICAgICAgICB7Ym9keX1cclxuICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHN0eWxlQSA9IHsgd2lkdGg6IFwiMTAwJVwiIH07XHJcbiAgICAgICAgdmFyIHN0eWxlVGl0bGUgPSB7IHBhZGRpbmdSaWdodDogXCIxMHB4XCIgfTtcclxuICAgICAgICB2YXIgZ2x5cGhDbGFzc05hbWUgPSB0aGlzLnN0YXRlLmV4cGFuZGVkID8gdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25Db2xsYXBzZWQgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xyXG4gICAgICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmhlYWRlci5yb290fT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+e3RoaXMudGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnbHlwaENsYXNzTmFtZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckJvZHkoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmJvZHl9PlxyXG4gICAgICAgIHt0aGlzLnJlbmRlclN1cnZleSgpIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci51cGRhdGVTdXJ2ZXkobmV3UHJvcHMpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBuZXdQcm9wcy50aXRsZSA/IG5ld1Byb3BzLnRpdGxlIDogdGhpcy5zdXJ2ZXkudGl0bGU7XHJcbiAgICAgICAgdmFyIGhhc0V4cGFuZGVkID0gbmV3UHJvcHNbXCJleHBhbmRlZFwiXSA/IG5ld1Byb3BzLmV4cGFuZGVkIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZXhwYW5kZWQ6IGhhc0V4cGFuZGVkLCBoaWRkZW46IGZhbHNlIH07XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKGZ1bmN0aW9uIChzOiBTdXJ2ZXlNb2RlbCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3cudHN4IiwiaW1wb3J0IHtDb25kaXRpb24sIENvbmRpdGlvbk5vZGV9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyIHtcclxuICAgIHByaXZhdGUgdGV4dDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByb290OiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uTm9kZXM6IEFycmF5PENvbmRpdGlvbk5vZGU+O1xyXG4gICAgcHJpdmF0ZSBub2RlOiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBhdDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBsZW5ndGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwYXJzZSh0ZXh0OiBzdHJpbmcsIHJvb3Q6IENvbmRpdGlvbk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XHJcbiAgICAgICAgdGhpcy5yb290LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hdCA9IDA7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLnRleHQubGVuZ3RoO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnBhcnNlVGV4dCgpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9TdHJpbmcocm9vdDogQ29uZGl0aW9uTm9kZSk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlVG9TdHJpbmcocm9vdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHRvU3RyaW5nQ29yZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAodmFsdWVbXCJjaGlsZHJlblwiXSkgcmV0dXJuIHRoaXMubm9kZVRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICBpZiAodmFsdWVbXCJsZWZ0XCJdKSByZXR1cm4gdGhpcy5jb25kaXRpb25Ub1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vZGVUb1N0cmluZyhub2RlOiBDb25kaXRpb25Ob2RlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobm9kZS5pc0VtcHR5KSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgcmVzID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVUZXh0ID0gdGhpcy50b1N0cmluZ0NvcmUobm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykgcmVzICs9ICcgJyArIG5vZGUuY29ubmVjdGl2ZSArICcgJztcclxuICAgICAgICAgICAgICAgIHJlcyArPSBub2RlVGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSAhPSB0aGlzLnJvb3QgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJlcyA9ICcoJyArIHJlcyArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBDb25kaXRpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uLnJpZ2h0IHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7XHJcbiAgICAgICAgaWYgKGxlZnQgJiYgIXRoaXMuaXNOdW1lcmljKGxlZnQpKSBsZWZ0ID0gXCInXCIgKyBsZWZ0ICsgXCInXCI7XHJcbiAgICAgICAgdmFyIHJlcyA9IGxlZnQgKyAnICcgKyB0aGlzLm9wZXJhdGlvblRvU3RyaW5nKGNvbmRpdGlvbi5vcGVyYXRvcik7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb1JpZ2h0T3BlcmF0aW9uKGNvbmRpdGlvbi5vcGVyYXRvcikpIHJldHVybiByZXM7XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xyXG4gICAgICAgIGlmIChyaWdodCAmJiAhdGhpcy5pc051bWVyaWMocmlnaHQpKSByaWdodCA9IFwiJ1wiICsgcmlnaHQgKyBcIidcIjtcclxuICAgICAgICByZXR1cm4gcmVzICsgJyAnICsgcmlnaHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wZXJhdGlvblRvU3RyaW5nKG9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChvcCA9PSBcImVxdWFsXCIpIHJldHVybiBcIj1cIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJub3RlcXVhbFwiKSByZXR1cm4gXCIhPVwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJcIikgcmV0dXJuIFwiPlwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImxlc3NcIikgcmV0dXJuIFwiPFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJvcmVxdWFsXCIpIHJldHVybiBcIj49XCI7XHJcbiAgICAgICAgaWYgKG9wID09IFwibGVzc29yZXF1YWxcIikgcmV0dXJuIFwiPD1cIjtcclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtZXJpYyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBhcnNlVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTm9kZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKHRoaXMubm9kZSk7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMucmVhZENvbmRpdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gcmVzICYmIHRoaXMuYXQgPj0gdGhpcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRDb25kaXRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlYWRDb25kaXRpb24oKTtcclxuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIHJlcztcclxuICAgICAgICB2YXIgY29ubmVjdGl2ZSA9IHRoaXMucmVhZENvbm5lY3RpdmUoKTtcclxuICAgICAgICBpZiAoY29ubmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENvbm5lY3RpdmUoY29ubmVjdGl2ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRDb25kaXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29uZGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBleHBSZXMgPSB0aGlzLnJlYWRFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgaWYgKGV4cFJlcyA8IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZihleHBSZXMgPT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIGxlZnQgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWxlZnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRPcGVyYXRvcigpO1xyXG4gICAgICAgIGlmICghb3ApIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgYyA9IG5ldyBDb25kaXRpb24oKTtcclxuICAgICAgICBjLmxlZnQgPSBsZWZ0OyBjLm9wZXJhdG9yID0gb3A7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTm9SaWdodE9wZXJhdGlvbihvcCkpIHtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmICghcmlnaHQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgYy5yaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENvbmRpdGlvbihjKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZEV4cHJlc3Npb24oKTogbnVtYmVyIHtcclxuICAgICAgICB0aGlzLnNraXAoKTtcclxuICAgICAgICBpZiAodGhpcy5hdCA+PSB0aGlzLmxlbmd0aCB8fCB0aGlzLmNoICE9ICcoJykgcmV0dXJuIDA7XHJcbiAgICAgICAgdGhpcy5hdCsrO1xyXG4gICAgICAgIHRoaXMucHVzaEV4cHJlc3Npb24oKTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5yZWFkQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5za2lwKCk7XHJcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuY2ggPT0gPHN0cmluZz4nKSc7XHJcbiAgICAgICAgICAgIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgdGhpcy5wb3BFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBjaCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmF0KTsgfVxyXG4gICAgcHJpdmF0ZSBza2lwKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGggJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSB0aGlzLmF0Kys7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU3BhY2UoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1xcbicgfHwgYyA9PSAnXFx0JyB8fCBjID09ICdcXHInO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1F1b3RlcyhjOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYyA9PSBcIidcIiB8fCBjID09ICdcIidcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNPcGVyYXRvckNoYXIoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJz4nIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz0nIHx8IGMgPT0gJyEnO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0JyYWNrZXRzKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjID09ICcoJyB8fCBjID09ICcpJztcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZFN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgIHRoaXMuc2tpcCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0ID49IHRoaXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmF0O1xyXG4gICAgICAgIHZhciBoYXNRdW90ZXMgPSB0aGlzLmlzUXVvdGVzKHRoaXMuY2gpO1xyXG4gICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICB2YXIgaXNGaXJzdE9wQ2ggPSB0aGlzLmlzT3BlcmF0b3JDaGFyKHRoaXMuY2gpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFoYXNRdW90ZXMgJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNRdW90ZXModGhpcy5jaCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaGFzUXVvdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdE9wQ2ggIT0gdGhpcy5pc09wZXJhdG9yQ2hhcih0aGlzLmNoKSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0JyYWNrZXRzKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmF0IDw9IHN0YXJ0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy50ZXh0LnN1YnN0cihzdGFydCwgdGhpcy5hdCAtIHN0YXJ0KTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMSAmJiB0aGlzLmlzUXVvdGVzKHJlc1swXSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSByZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUXVvdGVzKHJlc1tyZXMubGVuZ3RoIC0gMV0pKSBsZW4tLTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5zdWJzdHIoMSwgbGVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc05vUmlnaHRPcGVyYXRpb24ob3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBvcCA9PSBcImVtcHR5XCIgfHwgb3AgPT0gXCJub3RlbXB0eVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkT3BlcmF0b3IoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIW9wKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBvcCA9IG9wLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKG9wID09ICc+Jykgb3AgPSBcImdyZWF0ZXJcIjtcclxuICAgICAgICBpZiAob3AgPT0gJzwnKSBvcCA9IFwibGVzc1wiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPj0nIHx8IG9wID09ICc9PicpIG9wID0gXCJncmVhdGVyb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPD0nIHx8IG9wID09ICc9PCcpIG9wID0gXCJsZXNzb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPScgfHwgb3AgPT0gJz09Jykgb3AgPSBcImVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICc8PicgfHwgb3AgPT0gJyE9Jykgb3AgPSBcIm5vdGVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdjb250YWluJykgb3AgPSBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdub3Rjb250YWluJykgb3AgPSBcIm5vdGNvbnRhaW5zXCI7XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29ubmVjdGl2ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBjb24gPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWNvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uID0gY29uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGNvbiA9PSBcIiZcIiB8fCBjb24gPT0gXCImJlwiKSBjb24gPSBcImFuZFwiO1xyXG4gICAgICAgIGlmIChjb24gPT0gXCJ8XCIgfHwgY29uID09IFwifHxcIikgY29uID0gXCJvclwiO1xyXG4gICAgICAgIGlmIChjb24gIT0gXCJhbmRcIiAmJiBjb24gIT0gXCJvclwiKSBjb24gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBjb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHB1c2hFeHByZXNzaW9uKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBvcEV4cHJlc3Npb24oKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wb3AoKTtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlc1t0aGlzLmV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkQ29uZGl0aW9uKGM6IENvbmRpdGlvbikge1xyXG4gICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKGMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRDb25uZWN0aXZlKGNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0aXZlID0gY29uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY29ubmVjdGl2ZSAhPSBjb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDb24gPSB0aGlzLm5vZGUuY29ubmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDaGlsZHJlbiA9IHRoaXMubm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3RpdmUgPSBjb247XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTm9kZSA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNvbm5lY3RpdmUgPSBvbGRDb247XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChvbGROb2RlKTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwiZXhwb3J0IGNsYXNzIGR4U3VydmV5U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlcnZpY2VVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly9keHN1cnZleWFwaS5henVyZXdlYnNpdGVzLm5ldC9hcGkvU3VydmV5XCI7XHJcbiAgICAvL3B1YmxpYyBzdGF0aWMgc2VydmljZVVybDogc3RyaW5nID0gXCJodHRwOi8vbG9jYWxob3N0OjUwNDg4L2FwaS9TdXJ2ZXlcIjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXkoc3VydmV5SWQ6IHN0cmluZywgb25Mb2FkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy9nZXRTdXJ2ZXk/c3VydmV5SWQ9JyArIHN1cnZleUlkKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0KHBvc3RJZDogc3RyaW5nLCByZXN1bHQ6IEpTT04sIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpPT4gdm9pZCwgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdQT1NUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL3Bvc3QvJyk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7IHBvc3RJZDogcG9zdElkLCBzdXJ2ZXlSZXN1bHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgfTtcclxuICAgICAgICBpZiAoY2xpZW50SWQpIGRhdGFbJ2NsaWVudElkJ10gPSBjbGllbnRJZDtcclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkKSBkYXRhWydpc1BhcnRpYWxDb21wbGV0ZWQnXSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGRhdGFTdHJpbmdpZnk6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XHJcbiAgICAgICAgICAgIG9uU2VuZFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKGRhdGFTdHJpbmdpZnkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNlbmRGaWxlKHBvc3RJZDogc3RyaW5nLCBmaWxlOiBGaWxlLCBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kRmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy91cGxvYWQvJywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJwb3N0SWRcIiwgcG9zdElkKTtcclxuICAgICAgICB4aHIuc2VuZChmb3JtRGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgb25HZXRSZXN1bHQ6IChzdWNjZXNzOiBib29sZWFuLCBkYXRhOiBhbnksIGRhdGFMaXN0OiBBcnJheTxhbnk+LCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmbmFtZT0nICsgbmFtZTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL2dldFJlc3VsdD8nICsgZGF0YSk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LlF1ZXN0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0geyBuYW1lOiBrZXksIHZhbHVlOiByZXN1bHQuUXVlc3Rpb25SZXN1bHRba2V5XSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25HZXRSZXN1bHQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgbGlzdCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNDb21wbGV0ZWQocmVzdWx0SWQ6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZywgb25Jc0NvbXBsZXRlZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmY2xpZW50SWQ9JyArIGNsaWVudElkO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArICcvaXNDb21wbGV0ZWQ/JyArIGRhdGEpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvbklzQ29tcGxldGVkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElQYWdlLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5LCBJRWxlbWVudCwgSVF1ZXN0aW9uLCBIYXNoVGFibGUsIFN1cnZleUVsZW1lbnQsIFN1cnZleVBhZ2VJZH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7Q29uZGl0aW9uUnVubmVyfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbH0gZnJvbSBcIi4vcGFuZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElQYWdlIHtcclxuICAgIHByaXZhdGUgbnVtVmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eTogc3RyaW5nID0gXCJpbmhlcml0XCI7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicGFnZVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG51bSgpIHsgcmV0dXJuIHRoaXMubnVtVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgbnVtKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5udW1WYWx1ZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubnVtVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9uTnVtQ2hhbmdlZCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24uaGFzSW5wdXQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpXS5mb2N1cygpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb25zW2ldLnZpc2libGUgfHwgdGhpcy5xdWVzdGlvbnNbaV0uY3VycmVudEVycm9yQ291bnQgPT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2ldLmZvY3VzKHRydWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AoU3VydmV5UGFnZUlkKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbk51bUNoYW5nZWQodmFsdWU6IG51bWJlcikge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMudmlzaWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInBhZ2VcIiwgW3sgbmFtZTogXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIiwgZGVmYXVsdDogXCJpbmhlcml0XCIsIGNob2ljZXM6IFtcImloZXJpdFwiLCBcInNob3dcIiwgXCJoaWRlXCJdIH1dLCBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQYWdlTW9kZWwoKTsgfSwgXCJwYW5lbFwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGFnZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElQYWdlLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5LCBJU3VydmV5RGF0YSwgSUVsZW1lbnQsIElRdWVzdGlvbiwgSGFzaFRhYmxlLCBTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlQYWdlSWR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUm93TW9kZWwge1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW47XHJcbiAgICB2aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gcGFuZWwuZGF0YSAmJiBwYW5lbC5kYXRhLmlzRGVzaWduTW9kZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBlbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+ID0gW107XHJcbiAgICAvL1RPRE8gcmVtb3ZlIGFmdGVyIHVwZGF0aW5nIHJlYWN0IGFuZCB2dWVcclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PElFbGVtZW50PiB7IHJldHVybiB0aGlzLmVsZW1lbnRzO30gXHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdXBkYXRlVmlzaWJsZSgpIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmNhbGNWaXNpYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEVsZW1lbnQocTogSUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2gocSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKSB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0V2lkdGgoKSB7XHJcbiAgICAgICAgdmFyIHZpc0NvdW50ID0gdGhpcy5nZXRWaXNpYmxlQ291bnQoKTtcclxuICAgICAgICBpZiAodmlzQ291bnQgPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHEgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgcS5yZW5kZXJXaWR0aCA9IHEud2lkdGggPyBxLndpZHRoIDogTWF0aC5mbG9vcigxMDAgLyB2aXNDb3VudCkgKyAnJSc7XHJcbiAgICAgICAgICAgICAgICBxLnJpZ2h0SW5kZW50ID0gY291bnRlciA8IHZpc0NvdW50IC0gMSA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZpc2libGVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciByZXMgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHJlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjYWxjVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUNvdW50KCkgPiAwOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsQmFzZSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJQ29uZGl0aW9uUnVubmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBwYW5lbENvdW50ZXIgPSAxMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYW5lbElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwic3BfXCIgKyBQYW5lbE1vZGVsQmFzZS5wYW5lbENvdW50ZXIrKztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRhdGFWYWx1ZTogSVN1cnZleSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcclxuICAgIHByaXZhdGUgZWxlbWVudHNWYWx1ZTogQXJyYXk8SUVsZW1lbnQ+ID0gbmV3IEFycmF5PElFbGVtZW50PigpO1xyXG4gICAgcHJpdmF0ZSBpc1F1ZXN0aW9uc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uc1ZhbHVlOiBBcnJheTxRdWVzdGlvbkJhc2U+ID0gbmV3IEFycmF5PFF1ZXN0aW9uQmFzZT4oKTtcclxuICAgIHB1YmxpYyBwYXJlbnQ6IFBhbmVsTW9kZWxCYXNlID0gbnVsbDtcclxuICAgIHB1YmxpYyB2aXNpYmxlSWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICByb3dzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHB1YmxpYyB2aXNpYmxlSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IFBhbmVsTW9kZWxCYXNlLmdldFBhbmVsSWQoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHNWYWx1ZS5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKTogbnVtYmVyIHsgcmV0dXJuIHNlbGYuZG9PblB1c2hFbGVtZW50KHRoaXMsIHZhbHVlKTsgfTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzVmFsdWUuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IFF1ZXN0aW9uQmFzZVtdKTogUXVlc3Rpb25CYXNlW10ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5kb1NwbGljZUVsZW1lbnRzKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogSVN1cnZleSB7IHJldHVybiB0aGlzLmRhdGFWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBJU3VydmV5KSB7XHJcbiAgICAgICAgaWYodGhpcy5kYXRhVmFsdWUgPT09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kYXRhVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXREYXRhKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGUudGV4dCA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/ICg8SUxvY2FsaXphYmxlT3duZXI+PGFueT50aGlzLmRhdGEpLmdldExvY2FsZSgpIDogXCJcIjsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbkJhc2U+IHsgXHJcbiAgICAgICAgaWYoIXRoaXMuaXNRdWVzdGlvbnNSZWFkeSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmKGVsLmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXMgPSAoPFBhbmVsTW9kZWw+ZWwpLnF1ZXN0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgcXMubGVuZ3RoOyBqICsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaChxc1tqXSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZS5wdXNoKDxRdWVzdGlvbkJhc2U+ZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpIHtcclxuICAgICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLnBhcmVudCkgdGhpcy5wYXJlbnQubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7IHJldHVybiB0aGlzLmVsZW1lbnRzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBjb250YWluc0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsOiBhbnkgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZihlbCA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgaWYoKDxQYW5lbE1vZGVsQmFzZT5lbCkuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIGZvY3VzZU9uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBmaXJzdEVycm9yUXVlc3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHZhciB2aXNpYmxlUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5hZGRRdWVzdGlvbnNUb0xpc3QodmlzaWJsZVF1ZXN0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHZpc2libGVRdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VPbkZpcnN0RXJyb3IgJiYgZmlyc3RFcnJvclF1ZXN0aW9uID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdEVycm9yUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcnN0RXJyb3JRdWVzdGlvbikgZmlyc3RFcnJvclF1ZXN0aW9uLmZvY3VzKHRydWUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUXVlc3Rpb25zVG9MaXN0KGxpc3Q6IEFycmF5PElRdWVzdGlvbj4sIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihlbC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAoPFBhbmVsTW9kZWw+ZWwpLmFkZFF1ZXN0aW9uc1RvTGlzdChsaXN0LCB2aXNpYmxlT25seSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IFxyXG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKDxJUXVlc3Rpb24+ZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PFF1ZXN0aW9uUm93TW9kZWw+IHtcclxuICAgICAgICBpZighdGhpcy5yb3dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXMgPSB0aGlzLmJ1aWxkUm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCkgeyByZXR1cm4gKCF0aGlzLmRhdGEpIHx8IHRoaXMuZGF0YS5jdXJyZW50UGFnZSA9PSB0aGlzLnJvb3Q7IH1cclxuICAgIHByb3RlY3RlZCBnZXQgcm9vdCgpOiBQYW5lbE1vZGVsQmFzZSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsQmFzZT50aGlzO1xyXG4gICAgICAgIHdoaWxlKHJlcy5wYXJlbnQpIHJlcyA9IHJlcy5wYXJlbnQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7IHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTsgfVxyXG4gICAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJvd3NDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgaXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzTG9hZGluZ0Zyb21Kc29uOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25Sb3dzQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnJvd1ZhbHVlcyA9IG51bGw7XHJcbiAgICAgICAgaWYodGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB0aGlzLnJvd3NDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0IGlzRGVzaWduTW9kZSgpIHsgcmV0dXJuIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuaXNEZXNpZ25Nb2RlOyB9XHJcbiAgICBwcml2YXRlIGRvT25QdXNoRWxlbWVudChsaXN0OiBBcnJheTxJRWxlbWVudD4sIHZhbHVlOiBJRWxlbWVudCkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGxpc3QsIHZhbHVlKTtcclxuICAgICAgICB0aGlzLm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xyXG4gICAgICAgIHRoaXMub25BZGRFbGVtZW50KHZhbHVlLCBsaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9TcGxpY2VFbGVtZW50cyhsaXN0OiBBcnJheTxJRWxlbWVudD4sIHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IElFbGVtZW50W10pIHtcclxuICAgICAgICBpZighc3RhcnQpIHN0YXJ0ID0gMDtcclxuICAgICAgICBpZighZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcclxuICAgICAgICB2YXIgZGVsZXRlZFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkZWxldGVDb3VudDsgaSArKykge1xyXG4gICAgICAgICAgICBpZihpICsgc3RhcnQgPj0gbGlzdC5sZW5ndGgpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBkZWxldGVkUXVlc3Rpb25zLnB1c2gobGlzdFtpICsgc3RhcnRdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChsaXN0LCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcclxuICAgICAgICBpZighaXRlbXMpIGl0ZW1zID0gW107XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRRdWVzdGlvbnMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50KGRlbGV0ZWRRdWVzdGlvbnNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFkZEVsZW1lbnQoaXRlbXNbaV0sIHN0YXJ0ICsgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uQWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmKGVsZW1lbnQuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICB2YXIgcCA9IDxQYW5lbE1vZGVsPmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHAuZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICAgICAgcC5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkJhc2U+ZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHEuc2V0RGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnF1ZXN0aW9uQWRkZWQocSwgaW5kZXgsIHRoaXMsIHRoaXMucm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGVsZW1lbnQucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50KTsgfVxyXG4gICAgICAgIGVsZW1lbnQuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50KTsgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcclxuICAgICAgICBpZighZWxlbWVudC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkgdGhpcy5kYXRhLnF1ZXN0aW9uUmVtb3ZlZCg8UXVlc3Rpb25CYXNlPmVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkgdGhpcy5kYXRhLnBhbmVsUmVtb3ZlZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvd1ZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRWxlbWVudFN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50OiBhbnkpICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd1ZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChyb3cuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGJ1aWxkUm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvblJvd01vZGVsPigpO1xyXG4gICAgICAgIHZhciBsYXN0Um93VmlzaWJsZUluZGV4ID0gLTE7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICB2YXIgaXNOZXdSb3cgPSBpID09IDAgfHwgZWwuc3RhcnRXaXRoTmV3TGluZTtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IGlzTmV3Um93ID8gdGhpcy5jcmVhdGVSb3coKSA6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGlmKGlzTmV3Um93KSByZXN1bHQucHVzaChyb3cpO1xyXG4gICAgICAgICAgICByb3cuYWRkRWxlbWVudChlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtpXS51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkgeyBcclxuICAgICAgICB2YXIgc3RyID0gdGhpcy50aXRsZTtcclxuICAgICAgICBpZighc3RyICYmIHRoaXMuaXNQYW5lbCAmJiB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSAhPSBudWxsID8gdGhpcy5kYXRhLnByb2Nlc3NUZXh0KHN0cikgOiBzdHI7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xyXG5cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4geyAgcmV0dXJuICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzRGVzaWduTW9kZSkgfHwgdGhpcy5nZXRJc1BhZ2VWaXNpYmxlKG51bGwpOyB9XHJcbiAgICBwdWJsaWMgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXSA9PSBleGNlcHRpb25RdWVzdGlvbikgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXS52aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIgPSAtMSkge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UsIGluZGV4OiBudW1iZXIgPSAtMSkge1xyXG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChxdWVzdGlvbiwgaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFBhbmVsKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZEVsZW1lbnQocGFuZWwsIGluZGV4KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGROZXdRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb25CYXNlIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb247XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbChuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFBhbmVsKHBhbmVsKTtcclxuICAgICAgICByZXR1cm4gcGFuZWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZihlbC5pc1BhbmVsICYmICg8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZWwpKS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmVRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55Pikge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvblJ1bm5lcikgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcclxuICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLm9uTG9jYWxlQ2hhbmdlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vL2V4cG9ydCBjbGFzcyBcclxuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElFbGVtZW50IHtcclxuICAgIHByaXZhdGUgcmVuZGVyV2lkdGhWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByaWdodEluZGVudFZhbHVlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgd2lkdGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgaW5uZXJJbmRlbnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgc3RhcnRXaXRoTmV3TGluZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicGFuZWxcIjsgfVxyXG4gICAgcHVibGljIHNldERhdGEobmV3VmFsdWU6IElTdXJ2ZXlEYXRhKSB7IFxyXG4gICAgICAgIHRoaXMuZGF0YSA9IDxJU3VydmV5Pm5ld1ZhbHVlOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuaW5uZXJJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5pbm5lckluZGVudFZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbm5lckluZGVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spIHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmVuZGVyV2lkdGgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVuZGVyV2lkdGhWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yZW5kZXJXaWR0aCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVuZGVyV2lkdGhWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN0YXJ0V2l0aE5ld0xpbmUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzdGFydFdpdGhOZXdMaW5lKHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmlnaHRJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMucmlnaHRJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByaWdodEluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yaWdodEluZGVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmlnaHRJbmRlbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZih0aGlzLnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spIHRoaXMucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicGFuZWxcIiwgW1wibmFtZVwiLCAgeyBuYW1lOiBcImVsZW1lbnRzXCIsIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIiwgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxyXG4gICAgeyBuYW1lOiBcInZpc2libGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIFwidmlzaWJsZUlmOmV4cHJlc3Npb25cIiwgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgIHtuYW1lOiBcImlubmVySW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM119XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFBhbmVsTW9kZWwoKTsgfSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wYW5lbC50cyIsImltcG9ydCB7QmFzZSwgSVF1ZXN0aW9uLCBFdmVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcclxuICAgIHB1YmxpYyBodG1sVGVtcGxhdGU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyB3aWRnZXRKc29uOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmh0bWxUZW1wbGF0ZSA9IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlID8gd2lkZ2V0SnNvbi5odG1sVGVtcGxhdGUgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGVsOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKSB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB3aWxsVW5tb3VudChxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudCkgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNGaXQocXVlc3Rpb246IElRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldEpzb24uaXNGaXQpIHJldHVybiB0aGlzLndpZGdldEpzb24uaXNGaXQocXVlc3Rpb24pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldENvbGxlY3Rpb24ge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XHJcbiAgICBwcml2YXRlIHdpZGdldHNWYWx1ZXM6IEFycmF5PFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0PiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBvbkN1c3RvbVdpZGdldEFkZGVkOiBFdmVudDwoY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldCkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksIGFueT4oKTtcclxuICAgICAgICBcclxuICAgIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4geyByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzOyB9XHJcbiAgICBwdWJsaWMgYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldEpzb246IGFueSkge1xyXG4gICAgICAgIHZhciBuYW1lID0gd2lkZ2V0SnNvbi5uYW1lO1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICBuYW1lID0gXCJ3aWRnZXRfXCIgKyB0aGlzLndpZGdldHMubGVuZ3RoICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcclxuICAgICAgICB0aGlzLndpZGdldHNWYWx1ZXMucHVzaChjdXN0b21XaWRnZXQpO1xyXG4gICAgICAgIHRoaXMub25DdXN0b21XaWRnZXRBZGRlZC5maXJlKGN1c3RvbVdpZGdldCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7IHRoaXMud2lkZ2V0c1ZhbHVlcyA9IFtdOyB9XHJcblxyXG4gICAgcHVibGljIGdldEN1c3RvbVdpZGdldChxdWVzdGlvbjogSVF1ZXN0aW9uKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53aWRnZXRzVmFsdWVzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXRzVmFsdWVzW2ldLmlzRml0KHF1ZXN0aW9uKSkgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcbmltcG9ydCB7U3VydmV5TmF2aWdhdGlvbkJhc2V9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVByZXZDbGljayA9IHRoaXMuaGFuZGxlUHJldkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2sgPSB0aGlzLmhhbmRsZU5leHRDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVDbGljayA9IHRoaXMuaGFuZGxlQ29tcGxldGVDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlUHJldkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkucHJldlBhZ2UoKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU5leHRDbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm5leHRQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVDb21wbGV0ZUNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVMYXN0UGFnZSgpO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHByZXZCdXR0b24gPSAhdGhpcy5zdXJ2ZXkuaXNGaXJzdFBhZ2UgPyB0aGlzLnJlbmRlckJ1dHRvbih0aGlzLmhhbmRsZVByZXZDbGljaywgdGhpcy5zdXJ2ZXkucGFnZVByZXZUZXh0LCB0aGlzLmNzcy5uYXZpZ2F0aW9uLnByZXYpIDogbnVsbDtcclxuICAgICAgICB2YXIgbmV4dEJ1dHRvbiA9ICF0aGlzLnN1cnZleS5pc0xhc3RQYWdlID8gdGhpcy5yZW5kZXJCdXR0b24odGhpcy5oYW5kbGVOZXh0Q2xpY2ssIHRoaXMuc3VydmV5LnBhZ2VOZXh0VGV4dCwgdGhpcy5jc3MubmF2aWdhdGlvbi5uZXh0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGNvbXBsZXRlQnV0dG9uID0gdGhpcy5zdXJ2ZXkuaXNMYXN0UGFnZSAmJiB0aGlzLnN1cnZleS5pc0VkaXRNb2RlID8gdGhpcy5yZW5kZXJCdXR0b24odGhpcy5oYW5kbGVDb21wbGV0ZUNsaWNrLCB0aGlzLnN1cnZleS5jb21wbGV0ZVRleHQsIHRoaXMuY3NzLm5hdmlnYXRpb24uY29tcGxldGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuZm9vdGVyfT5cclxuICAgICAgICAgICAgICAgIHtwcmV2QnV0dG9ufVxyXG4gICAgICAgICAgICAgICAge25leHRCdXR0b259XHJcbiAgICAgICAgICAgICAgICB7Y29tcGxldGVCdXR0b259XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbihjbGljazogYW55LCB0ZXh0OiBzdHJpbmcsIGJ0bkNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luUmlnaHQ6IFwiNXB4XCIgfTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbiArIChidG5DbGFzc05hbWUgPyAnICcgKyBidG5DbGFzc05hbWUgOiBcIlwiKTtcclxuICAgICAgICByZXR1cm4gPGlucHV0IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBzdHlsZT17c3R5bGV9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtjbGlja30gdmFsdWU9e3RleHR9IC8+O1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbi50c3giLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuaW1wb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9uQmFzZX0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIGlzVG9wOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmlzVG9wID0gcHJvcHMuaXNUb3A7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuaXNUb3AgPSBuZXh0UHJvcHMuaXNUb3A7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnN1cnZleS5nZXRQcm9ncmVzcygpOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0OyB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7IHdpZHRoOiBcIjYwJVwiIH0gOiB7IHdpZHRoOiBcIjYwJVwiLCBtYXJnaW5Ub3A6IFwiMTBweFwiIH07XHJcbiAgICAgICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7IHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIgfTtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT17cHJvZ3Jlc3NTdHlsZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn0gcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57dGhpcy5wcm9ncmVzc1RleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2Pik7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb259IGZyb20gJy4vcmVhY3RxdWVzdGlvbidcclxuaW1wb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuLi9wYWdlXCI7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvcn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uUm93TW9kZWwsIFBhbmVsTW9kZWx9IGZyb20gXCIuLi9wYW5lbFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4uL3F1ZXN0aW9uYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcGFnZTogUGFnZU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gcHJvcHMucGFnZTtcclxuICAgICAgICB0aGlzLnN1cnZleSA9IHByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBwcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IG5leHRQcm9wcy5wYWdlO1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV4dFByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnZSA9PSBudWxsIHx8IHRoaXMuc3VydmV5ID09IG51bGwgfHwgdGhpcy5jcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcclxuICAgICAgICB2YXIgcm93cyA9IFtdO1xyXG4gICAgICAgIHZhciBxdWVzdGlvblJvd3MgPSB0aGlzLnBhZ2Uucm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByb3dzLnB1c2godGhpcy5jcmVhdGVSb3cocXVlc3Rpb25Sb3dzW2ldLCBpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgcmVmPVwicm9vdFwiPlxyXG4gICAgICAgICAgICAgICAge3RpdGxlfVxyXG4gICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJvdyhyb3c6IFF1ZXN0aW9uUm93TW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHJvd05hbWUgPSBcInJvd1wiICsgKGluZGV4ICsgMSk7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlSb3cga2V5PXtyb3dOYW1lfSByb3c9e3Jvd30gc3VydmV5PXt0aGlzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBjc3M9e3RoaXMuY3NzfSAvPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2UudGl0bGUgfHwgIXRoaXMuc3VydmV5LnNob3dQYWdlVGl0bGVzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGV4dCA9IHRoaXMucGFnZS5wcm9jZXNzZWRUaXRsZTtcclxuICAgICAgICBpZiAodGhpcy5wYWdlLm51bSA+IDApIHtcclxuICAgICAgICAgICAgdGV4dCA9IHRoaXMucGFnZS5udW0gKyBcIi4gXCIgKyB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxoNCBjbGFzc05hbWU9e3RoaXMuY3NzLnBhZ2VUaXRsZX0+e3RleHR9PC9oND4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcGFuZWw6IFBhbmVsTW9kZWw7XHJcbiAgICBwcml2YXRlIHN1cnZleTogU3VydmV5TW9kZWw7XHJcbiAgICBwcml2YXRlIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnBhbmVsID0gcHJvcHMucGFuZWw7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBwcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnBhbmVsID0gbmV4dFByb3BzLnBhbmVsO1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV4dFByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFuZWwgPT0gbnVsbCB8fCB0aGlzLnN1cnZleSA9PSBudWxsIHx8IHRoaXMuY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnJlbmRlclRpdGxlKCk7XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgcXVlc3Rpb25Sb3dzID0gdGhpcy5wYW5lbC5yb3dzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25Sb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvd3MucHVzaCh0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN0eWxlID0geyBcIm1hcmdpbkxlZnRcIjogdGhpcy5wYW5lbC5pbm5lckluZGVudCAqIHRoaXMuY3NzLnF1ZXN0aW9uLmluZGVudCArICdweCcgfTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHJlZj1cInJvb3RcIj5cclxuICAgICAgICAgICAgICAgIHt0aXRsZX1cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgICAgICAgICB7cm93c31cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJvdyhyb3c6IFF1ZXN0aW9uUm93TW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHJvd05hbWUgPSBcInJvd1wiICsgKGluZGV4ICsgMSk7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlSb3cga2V5PXtyb3dOYW1lfSByb3c9e3Jvd30gc3VydmV5PXt0aGlzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBjc3M9e3RoaXMuY3NzfSAvPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhbmVsLnRpdGxlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGV4dCA9IHRoaXMucGFuZWwucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICAgICAgcmV0dXJuICg8aDQgY2xhc3NOYW1lPXt0aGlzLmNzcy5wYWdlVGl0bGV9Pnt0ZXh0fTwvaDQ+KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gICAgcHJpdmF0ZSByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XHJcbiAgICBwcml2YXRlIHN1cnZleTogU3VydmV5TW9kZWw7XHJcbiAgICBwcml2YXRlIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhuZXh0UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKHByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJvdyA9IHByb3BzLnJvdztcclxuICAgICAgICBpZiAodGhpcy5yb3cpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnJvdy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLnNldFN0YXRlKHsgdmlzaWJsZTogc2VsZi5yb3cudmlzaWJsZSB9KTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleSA9IHByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBwcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAodGhpcy5yb3cgPT0gbnVsbCB8fCB0aGlzLnN1cnZleSA9PSBudWxsIHx8IHRoaXMuY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5yb3cudmlzaWJsZSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvdy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5yb3cuZWxlbWVudHNbaV0gYXMgUXVlc3Rpb25CYXNlO1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2godGhpcy5jcmVhdGVRdWVzdGlvbihxdWVzdGlvbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMucm93LnZpc2libGUgPyAge30gOiB7IGRpc3BsYXk6IFwibm9uZVwiIH07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnJvd30gc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgICAgIHtxdWVzdGlvbnN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAocXVlc3Rpb24uaXNQYW5lbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gPFN1cnZleVBhbmVsIGtleT17cXVlc3Rpb24ubmFtZX0gcGFuZWw9e3F1ZXN0aW9ufSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9IC8+O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb24ga2V5PXtxdWVzdGlvbi5uYW1lfSBxdWVzdGlvbj17cXVlc3Rpb259IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzPXt0aGlzLmNzc30gLz47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHBhZ2UudHN4IiwiLy8gbW9kZWxcclxuZXhwb3J0ICogZnJvbSBcIi4vY2h1bmtzL21vZGVsXCI7XHJcblxyXG4vLyBsb2NhbGl6YXRpb25cclxuaW1wb3J0ICcuL2NodW5rcy9sb2NhbGl6YXRpb24nO1xyXG5cclxuLy8gaGVscGVyc1xyXG5leHBvcnQgKiBmcm9tICAnLi9jaHVua3MvaGVscGVycyc7XHJcblxyXG4vLyBjc3Mgc3RhbmRhcmRcclxuZXhwb3J0IHtkZWZhdWx0U3RhbmRhcmRDc3N9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XHJcbi8vIGNzcyBib290c3RyYXBcclxuZXhwb3J0IHtkZWZhdWx0Qm9vdHN0cmFwQ3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3Nib290c3RyYXBcIjtcclxuXHJcbi8vIHJlYWN0XHJcbmV4cG9ydCB7U3VydmV5fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlcIjtcclxuZXhwb3J0IHtSZWFjdFN1cnZleU1vZGVsfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbFwiOyAvLyBUT0RPIG5lZWQgdG8gcmVtb3ZlIHNvbWVkYXlcclxuZXhwb3J0IHtSZWFjdFN1cnZleU1vZGVsIGFzIE1vZGVsfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbFwiO1xyXG5leHBvcnQge1N1cnZleU5hdmlnYXRpb25CYXNlfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xyXG5leHBvcnQge1N1cnZleU5hdmlnYXRpb259IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcclxuZXhwb3J0IHtTdXJ2ZXlQYWdlLCBTdXJ2ZXlSb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHBhZ2VcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbiwgU3VydmV5UXVlc3Rpb25FcnJvcnN9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uXCI7XHJcbmV4cG9ydCB7U3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sIFN1cnZleVF1ZXN0aW9uQ29tbWVudH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25DaGVja2JveCwgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW19IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uY2hlY2tib3hcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3dufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmRyb3Bkb3duXCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93blJvd30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXhkcm9wZG93blwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTWF0cml4LCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvd30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXhcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkh0bWx9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uaHRtbFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uRmlsZX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25maWxlXCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQsIFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0SXRlbX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25tdWx0aXBsZXRleHRcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ucmFkaW9ncm91cFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uVGV4dH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb250ZXh0XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4ZHluYW1pY1wiO1xyXG5leHBvcnQge1N1cnZleVByb2dyZXNzfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc1wiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uUmF0aW5nfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbnJhdGluZ1wiO1xyXG5leHBvcnQge1N1cnZleVdpbmRvd30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5V2luZG93XCI7XHJcbmV4cG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiOyAvLyBUT0RPIG5lZWQgdG8gcmVtb3ZlIHNvbWVkYXlcclxuZXhwb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeSBhcyBRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cclxuLy9leHBvcnQge2RlZmF1bHQgYXMgU3VydmV5UXVlc3Rpb25EYXRlfSBmcm9tIFwiLi4vcGx1Z2lucy9yZWFjdC9yZWFjdHF1ZXN0aW9uZGF0ZVwiO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL3JlYWN0LnRzIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzM3X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwialF1ZXJ5XCIsXCJjb21tb25qczJcIjpcImpxdWVyeVwiLFwiY29tbW9uanNcIjpcImpxdWVyeVwiLFwiYW1kXCI6XCJqcXVlcnlcIn1cbi8vIG1vZHVsZSBpZCA9IDM3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWFpbi5zY3NzXG4vLyBtb2R1bGUgaWQgPSAzOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIhZnVuY3Rpb24oZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgJ29iamVjdCcgPT0gdHlwZW9mIGV4cG9ydHMgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIG1vZHVsZSA/IGZhY3RvcnkoZXhwb3J0cykgOiAnZnVuY3Rpb24nID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbICdleHBvcnRzJyBdLCBmYWN0b3J5KSA6IGZhY3RvcnkoZ2xvYmFsLnByZWFjdCA9IGdsb2JhbC5wcmVhY3QgfHwge30pO1xufSh0aGlzLCBmdW5jdGlvbihleHBvcnRzKSB7XG4gICAgZnVuY3Rpb24gVk5vZGUobm9kZU5hbWUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLmtleSA9IGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGgobm9kZU5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuLCBsYXN0U2ltcGxlLCBjaGlsZCwgc2ltcGxlLCBpO1xuICAgICAgICBmb3IgKGkgPSBhcmd1bWVudHMubGVuZ3RoOyBpLS0gPiAyOyApIHN0YWNrLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHN0YWNrLnB1c2goYXR0cmlidXRlcy5jaGlsZHJlbik7XG4gICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSBpZiAoKGNoaWxkID0gc3RhY2sucG9wKCkpIGluc3RhbmNlb2YgQXJyYXkpIGZvciAoaSA9IGNoaWxkLmxlbmd0aDsgaS0tOyApIHN0YWNrLnB1c2goY2hpbGRbaV0pOyBlbHNlIGlmIChudWxsICE9IGNoaWxkICYmIGNoaWxkICE9PSAhMCAmJiBjaGlsZCAhPT0gITEpIHtcbiAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PSB0eXBlb2YgY2hpbGQpIGNoaWxkID0gU3RyaW5nKGNoaWxkKTtcbiAgICAgICAgICAgIHNpbXBsZSA9ICdzdHJpbmcnID09IHR5cGVvZiBjaGlsZDtcbiAgICAgICAgICAgIGlmIChzaW1wbGUgJiYgbGFzdFNpbXBsZSkgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gKz0gY2hpbGQ7IGVsc2Uge1xuICAgICAgICAgICAgICAgIChjaGlsZHJlbiB8fCAoY2hpbGRyZW4gPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIGxhc3RTaW1wbGUgPSBzaW1wbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHAgPSBuZXcgVk5vZGUobm9kZU5hbWUsIGF0dHJpYnV0ZXMgfHwgdm9pZCAwLCBjaGlsZHJlbiB8fCBFTVBUWV9DSElMRFJFTik7XG4gICAgICAgIGlmIChvcHRpb25zLnZub2RlKSBvcHRpb25zLnZub2RlKHApO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0ZW5kKG9iaiwgcHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzKSBmb3IgKHZhciBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIG9iaik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbHZlKG9iaiwga2V5KSB7XG4gICAgICAgIGZvciAodmFyIHAgPSBrZXkuc3BsaXQoJy4nKSwgaSA9IDA7IGkgPCBwLmxlbmd0aCAmJiBvYmo7IGkrKykgb2JqID0gb2JqW3BbaV1dO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJyA9PSB0eXBlb2Ygb2JqO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnID09IHR5cGVvZiBvYmo7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc2hUb0NsYXNzTmFtZShjKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJztcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBjKSBpZiAoY1twcm9wXSkge1xuICAgICAgICAgICAgaWYgKHN0cikgc3RyICs9ICcgJztcbiAgICAgICAgICAgIHN0ciArPSBwcm9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudCh2bm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGgodm5vZGUubm9kZU5hbWUsIGV4dGVuZChjbG9uZSh2bm9kZS5hdHRyaWJ1dGVzKSwgcHJvcHMpLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IHZub2RlLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTGlua2VkU3RhdGUoY29tcG9uZW50LCBrZXksIGV2ZW50UGF0aCkge1xuICAgICAgICB2YXIgcGF0aCA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIHQgPSBlICYmIGUudGFyZ2V0IHx8IHRoaXMsIHN0YXRlID0ge30sIG9iaiA9IHN0YXRlLCB2ID0gaXNTdHJpbmcoZXZlbnRQYXRoKSA/IGRlbHZlKGUsIGV2ZW50UGF0aCkgOiB0Lm5vZGVOYW1lID8gdC50eXBlLm1hdGNoKC9eY2hlfHJhZC8pID8gdC5jaGVja2VkIDogdC52YWx1ZSA6IGUsIGkgPSAwO1xuICAgICAgICAgICAgZm9yICg7aSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSBvYmogPSBvYmpbcGF0aFtpXV0gfHwgKG9ialtwYXRoW2ldXSA9ICFpICYmIGNvbXBvbmVudC5zdGF0ZVtwYXRoW2ldXSB8fCB7fSk7XG4gICAgICAgICAgICBvYmpbcGF0aFtpXV0gPSB2O1xuICAgICAgICAgICAgY29tcG9uZW50LnNldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlcihjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQuX2RpcnR5ICYmIChjb21wb25lbnQuX2RpcnR5ID0gITApICYmIDEgPT0gaXRlbXMucHVzaChjb21wb25lbnQpKSAob3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZyB8fCBkZWZlcikocmVyZW5kZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlcigpIHtcbiAgICAgICAgdmFyIHAsIGxpc3QgPSBpdGVtcztcbiAgICAgICAgaXRlbXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHAgPSBsaXN0LnBvcCgpKSBpZiAocC5fZGlydHkpIHJlbmRlckNvbXBvbmVudChwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbmFsQ29tcG9uZW50KHZub2RlKSB7XG4gICAgICAgIHZhciBub2RlTmFtZSA9IHZub2RlICYmIHZub2RlLm5vZGVOYW1lO1xuICAgICAgICByZXR1cm4gbm9kZU5hbWUgJiYgaXNGdW5jdGlvbihub2RlTmFtZSkgJiYgIShub2RlTmFtZS5wcm90b3R5cGUgJiYgbm9kZU5hbWUucHJvdG90eXBlLnJlbmRlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25hbENvbXBvbmVudCh2bm9kZSwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdm5vZGUubm9kZU5hbWUoZ2V0Tm9kZVByb3BzKHZub2RlKSwgY29udGV4dCB8fCBFTVBUWSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2FtZU5vZGVUeXBlKG5vZGUsIHZub2RlKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh2bm9kZSkpIHJldHVybiBub2RlIGluc3RhbmNlb2YgVGV4dDtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZub2RlLm5vZGVOYW1lKSkgcmV0dXJuICFub2RlLl9jb21wb25lbnRDb25zdHJ1Y3RvciAmJiBpc05hbWVkTm9kZShub2RlLCB2bm9kZS5ub2RlTmFtZSk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZub2RlLm5vZGVOYW1lKSkgcmV0dXJuIChub2RlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA/IG5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZSA6ICEwKSB8fCBpc0Z1bmN0aW9uYWxDb21wb25lbnQodm5vZGUpOyBlbHNlIDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNOYW1lZE5vZGUobm9kZSwgbm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID09PSBub2RlTmFtZSB8fCB0b0xvd2VyQ2FzZShub2RlLm5vZGVOYW1lKSA9PT0gdG9Mb3dlckNhc2Uobm9kZU5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROb2RlUHJvcHModm5vZGUpIHtcbiAgICAgICAgdmFyIHByb3BzID0gY2xvbmUodm5vZGUuYXR0cmlidXRlcyk7XG4gICAgICAgIHByb3BzLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB2bm9kZS5ub2RlTmFtZS5kZWZhdWx0UHJvcHM7XG4gICAgICAgIGlmIChkZWZhdWx0UHJvcHMpIGZvciAodmFyIGkgaW4gZGVmYXVsdFByb3BzKSBpZiAodm9pZCAwID09PSBwcm9wc1tpXSkgcHJvcHNbaV0gPSBkZWZhdWx0UHJvcHNbaV07XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG4gICAgICAgIHZhciBwID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocCkgcC5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0QWNjZXNzb3Iobm9kZSwgbmFtZSwgb2xkLCB2YWx1ZSwgaXNTdmcpIHtcbiAgICAgICAgaWYgKCdjbGFzc05hbWUnID09PSBuYW1lKSBuYW1lID0gJ2NsYXNzJztcbiAgICAgICAgaWYgKCdjbGFzcycgPT09IG5hbWUgJiYgdmFsdWUgJiYgJ29iamVjdCcgPT0gdHlwZW9mIHZhbHVlKSB2YWx1ZSA9IGhhc2hUb0NsYXNzTmFtZSh2YWx1ZSk7XG4gICAgICAgIGlmICgna2V5JyA9PT0gbmFtZSkgOyBlbHNlIGlmICgnY2xhc3MnID09PSBuYW1lICYmICFpc1N2Zykgbm9kZS5jbGFzc05hbWUgPSB2YWx1ZSB8fCAnJzsgZWxzZSBpZiAoJ3N0eWxlJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNTdHJpbmcob2xkKSkgbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgfHwgJyc7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgJ29iamVjdCcgPT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZyhvbGQpKSBmb3IgKHZhciBpIGluIG9sZCkgaWYgKCEoaSBpbiB2YWx1ZSkpIG5vZGUuc3R5bGVbaV0gPSAnJztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHZhbHVlKSBub2RlLnN0eWxlW2ldID0gJ251bWJlcicgPT0gdHlwZW9mIHZhbHVlW2ldICYmICFOT05fRElNRU5TSU9OX1BST1BTW2ldID8gdmFsdWVbaV0gKyAncHgnIDogdmFsdWVbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSBub2RlLmlubmVySFRNTCA9IHZhbHVlLl9faHRtbCB8fCAnJztcbiAgICAgICAgfSBlbHNlIGlmICgnbycgPT0gbmFtZVswXSAmJiAnbicgPT0gbmFtZVsxXSkge1xuICAgICAgICAgICAgdmFyIGwgPSBub2RlLl9saXN0ZW5lcnMgfHwgKG5vZGUuX2xpc3RlbmVycyA9IHt9KTtcbiAgICAgICAgICAgIG5hbWUgPSB0b0xvd2VyQ2FzZShuYW1lLnN1YnN0cmluZygyKSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWxbbmFtZV0pIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBldmVudFByb3h5LCAhIU5PTl9CVUJCTElOR19FVkVOVFNbbmFtZV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsW25hbWVdKSBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZXZlbnRQcm94eSwgISFOT05fQlVCQkxJTkdfRVZFTlRTW25hbWVdKTtcbiAgICAgICAgICAgIGxbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgnbGlzdCcgIT09IG5hbWUgJiYgJ3R5cGUnICE9PSBuYW1lICYmICFpc1N2ZyAmJiBuYW1lIGluIG5vZGUpIHtcbiAgICAgICAgICAgIHNldFByb3BlcnR5KG5vZGUsIG5hbWUsIG51bGwgPT0gdmFsdWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChudWxsID09IHZhbHVlIHx8IHZhbHVlID09PSAhMSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbnMgPSBpc1N2ZyAmJiBuYW1lLm1hdGNoKC9eeGxpbmtcXDo/KC4rKS8pO1xuICAgICAgICAgICAgaWYgKG51bGwgPT0gdmFsdWUgfHwgdmFsdWUgPT09ICExKSBpZiAobnMpIG5vZGUucmVtb3ZlQXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0b0xvd2VyQ2FzZShuc1sxXSkpOyBlbHNlIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyBlbHNlIGlmICgnb2JqZWN0JyAhPSB0eXBlb2YgdmFsdWUgJiYgIWlzRnVuY3Rpb24odmFsdWUpKSBpZiAobnMpIG5vZGUuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0b0xvd2VyQ2FzZShuc1sxXSksIHZhbHVlKTsgZWxzZSBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gICAgZnVuY3Rpb24gZXZlbnRQcm94eShlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9saXN0ZW5lcnNbZS50eXBlXShvcHRpb25zLmV2ZW50ICYmIG9wdGlvbnMuZXZlbnQoZSkgfHwgZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbGxlY3ROb2RlKG5vZGUpIHtcbiAgICAgICAgcmVtb3ZlTm9kZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICBub2RlLl9jb21wb25lbnQgPSBub2RlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9IG51bGw7XG4gICAgICAgICAgICB2YXIgX25hbWUgPSBub2RlLm5vcm1hbGl6ZWROb2RlTmFtZSB8fCB0b0xvd2VyQ2FzZShub2RlLm5vZGVOYW1lKTtcbiAgICAgICAgICAgIChub2Rlc1tfbmFtZV0gfHwgKG5vZGVzW19uYW1lXSA9IFtdKSkucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVOb2RlKG5vZGVOYW1lLCBpc1N2Zykge1xuICAgICAgICB2YXIgbmFtZSA9IHRvTG93ZXJDYXNlKG5vZGVOYW1lKSwgbm9kZSA9IG5vZGVzW25hbWVdICYmIG5vZGVzW25hbWVdLnBvcCgpIHx8IChpc1N2ZyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBub2RlTmFtZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKSk7XG4gICAgICAgIG5vZGUubm9ybWFsaXplZE5vZGVOYW1lID0gbmFtZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoTW91bnRzKCkge1xuICAgICAgICB2YXIgYztcbiAgICAgICAgd2hpbGUgKGMgPSBtb3VudHMucG9wKCkpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyTW91bnQpIG9wdGlvbnMuYWZ0ZXJNb3VudChjKTtcbiAgICAgICAgICAgIGlmIChjLmNvbXBvbmVudERpZE1vdW50KSBjLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZihkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCwgcGFyZW50LCBjb21wb25lbnRSb290KSB7XG4gICAgICAgIGlmICghZGlmZkxldmVsKyspIHtcbiAgICAgICAgICAgIGlzU3ZnTW9kZSA9IHBhcmVudCAmJiAndW5kZWZpbmVkJyAhPSB0eXBlb2YgcGFyZW50Lm93bmVyU1ZHRWxlbWVudDtcbiAgICAgICAgICAgIGh5ZHJhdGluZyA9IGRvbSAmJiAhKEFUVFJfS0VZIGluIGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJldCA9IGlkaWZmKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsKTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiByZXQucGFyZW50Tm9kZSAhPT0gcGFyZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQocmV0KTtcbiAgICAgICAgaWYgKCEtLWRpZmZMZXZlbCkge1xuICAgICAgICAgICAgaHlkcmF0aW5nID0gITE7XG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudFJvb3QpIGZsdXNoTW91bnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaWRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpIHtcbiAgICAgICAgdmFyIHJlZiA9IHZub2RlICYmIHZub2RlLmF0dHJpYnV0ZXMgJiYgdm5vZGUuYXR0cmlidXRlcy5yZWY7XG4gICAgICAgIHdoaWxlIChpc0Z1bmN0aW9uYWxDb21wb25lbnQodm5vZGUpKSB2bm9kZSA9IGJ1aWxkRnVuY3Rpb25hbENvbXBvbmVudCh2bm9kZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChudWxsID09IHZub2RlKSB2bm9kZSA9ICcnO1xuICAgICAgICBpZiAoaXNTdHJpbmcodm5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoZG9tICYmIGRvbSBpbnN0YW5jZW9mIFRleHQgJiYgZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9tLm5vZGVWYWx1ZSAhPSB2bm9kZSkgZG9tLm5vZGVWYWx1ZSA9IHZub2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9tKSByZWNvbGxlY3ROb2RlVHJlZShkb20pO1xuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb207XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odm5vZGUubm9kZU5hbWUpKSByZXR1cm4gYnVpbGRDb21wb25lbnRGcm9tVk5vZGUoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwpO1xuICAgICAgICB2YXIgb3V0ID0gZG9tLCBub2RlTmFtZSA9IFN0cmluZyh2bm9kZS5ub2RlTmFtZSksIHByZXZTdmdNb2RlID0gaXNTdmdNb2RlLCB2Y2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgaXNTdmdNb2RlID0gJ3N2ZycgPT09IG5vZGVOYW1lID8gITAgOiAnZm9yZWlnbk9iamVjdCcgPT09IG5vZGVOYW1lID8gITEgOiBpc1N2Z01vZGU7XG4gICAgICAgIGlmICghZG9tKSBvdXQgPSBjcmVhdGVOb2RlKG5vZGVOYW1lLCBpc1N2Z01vZGUpOyBlbHNlIGlmICghaXNOYW1lZE5vZGUoZG9tLCBub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIG91dCA9IGNyZWF0ZU5vZGUobm9kZU5hbWUsIGlzU3ZnTW9kZSk7XG4gICAgICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIG91dC5hcHBlbmRDaGlsZChkb20uZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICBpZiAoZG9tLnBhcmVudE5vZGUpIGRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChvdXQsIGRvbSk7XG4gICAgICAgICAgICByZWNvbGxlY3ROb2RlVHJlZShkb20pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmYyA9IG91dC5maXJzdENoaWxkLCBwcm9wcyA9IG91dFtBVFRSX0tFWV07XG4gICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgIG91dFtBVFRSX0tFWV0gPSBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IG91dC5hdHRyaWJ1dGVzLCBpID0gYS5sZW5ndGg7IGktLTsgKSBwcm9wc1thW2ldLm5hbWVdID0gYVtpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWh5ZHJhdGluZyAmJiB2Y2hpbGRyZW4gJiYgMSA9PT0gdmNoaWxkcmVuLmxlbmd0aCAmJiAnc3RyaW5nJyA9PSB0eXBlb2YgdmNoaWxkcmVuWzBdICYmIGZjICYmIGZjIGluc3RhbmNlb2YgVGV4dCAmJiAhZmMubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgIGlmIChmYy5ub2RlVmFsdWUgIT0gdmNoaWxkcmVuWzBdKSBmYy5ub2RlVmFsdWUgPSB2Y2hpbGRyZW5bMF07XG4gICAgICAgIH0gZWxzZSBpZiAodmNoaWxkcmVuICYmIHZjaGlsZHJlbi5sZW5ndGggfHwgZmMpIGlubmVyRGlmZk5vZGUob3V0LCB2Y2hpbGRyZW4sIGNvbnRleHQsIG1vdW50QWxsLCAhIXByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKTtcbiAgICAgICAgZGlmZkF0dHJpYnV0ZXMob3V0LCB2bm9kZS5hdHRyaWJ1dGVzLCBwcm9wcyk7XG4gICAgICAgIGlmIChyZWYpIChwcm9wcy5yZWYgPSByZWYpKG91dCk7XG4gICAgICAgIGlzU3ZnTW9kZSA9IHByZXZTdmdNb2RlO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbm5lckRpZmZOb2RlKGRvbSwgdmNoaWxkcmVuLCBjb250ZXh0LCBtb3VudEFsbCwgYWJzb3JiKSB7XG4gICAgICAgIHZhciBqLCBjLCB2Y2hpbGQsIGNoaWxkLCBvcmlnaW5hbENoaWxkcmVuID0gZG9tLmNoaWxkTm9kZXMsIGNoaWxkcmVuID0gW10sIGtleWVkID0ge30sIGtleWVkTGVuID0gMCwgbWluID0gMCwgbGVuID0gb3JpZ2luYWxDaGlsZHJlbi5sZW5ndGgsIGNoaWxkcmVuTGVuID0gMCwgdmxlbiA9IHZjaGlsZHJlbiAmJiB2Y2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBpZiAobGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgX2NoaWxkID0gb3JpZ2luYWxDaGlsZHJlbltpXSwgcHJvcHMgPSBfY2hpbGRbQVRUUl9LRVldLCBrZXkgPSB2bGVuID8gKGMgPSBfY2hpbGQuX2NvbXBvbmVudCkgPyBjLl9fa2V5IDogcHJvcHMgPyBwcm9wcy5rZXkgOiBudWxsIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChudWxsICE9IGtleSkge1xuICAgICAgICAgICAgICAgIGtleWVkTGVuKys7XG4gICAgICAgICAgICAgICAga2V5ZWRba2V5XSA9IF9jaGlsZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHlkcmF0aW5nIHx8IGFic29yYiB8fCBwcm9wcyB8fCBfY2hpbGQgaW5zdGFuY2VvZiBUZXh0KSBjaGlsZHJlbltjaGlsZHJlbkxlbisrXSA9IF9jaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmxlbikgZm9yICh2YXIgaSA9IDA7IGkgPCB2bGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZjaGlsZCA9IHZjaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNoaWxkID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBrZXkgPSB2Y2hpbGQua2V5O1xuICAgICAgICAgICAgaWYgKG51bGwgIT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleWVkTGVuICYmIGtleSBpbiBrZXllZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGtleWVkW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGtleWVkW2tleV0gPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIGtleWVkTGVuLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2hpbGQgJiYgbWluIDwgY2hpbGRyZW5MZW4pIGZvciAoaiA9IG1pbjsgaiA8IGNoaWxkcmVuTGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICAgICAgaWYgKGMgJiYgaXNTYW1lTm9kZVR5cGUoYywgdmNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2pdID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PT0gY2hpbGRyZW5MZW4gLSAxKSBjaGlsZHJlbkxlbi0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PT0gbWluKSBtaW4rKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQgPSBpZGlmZihjaGlsZCwgdmNoaWxkLCBjb250ZXh0LCBtb3VudEFsbCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQgIT09IGRvbSkgaWYgKGkgPj0gbGVuKSBkb20uYXBwZW5kQ2hpbGQoY2hpbGQpOyBlbHNlIGlmIChjaGlsZCAhPT0gb3JpZ2luYWxDaGlsZHJlbltpXSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PT0gb3JpZ2luYWxDaGlsZHJlbltpICsgMV0pIHJlbW92ZU5vZGUob3JpZ2luYWxDaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgZG9tLmluc2VydEJlZm9yZShjaGlsZCwgb3JpZ2luYWxDaGlsZHJlbltpXSB8fCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ZWRMZW4pIGZvciAodmFyIGkgaW4ga2V5ZWQpIGlmIChrZXllZFtpXSkgcmVjb2xsZWN0Tm9kZVRyZWUoa2V5ZWRbaV0pO1xuICAgICAgICB3aGlsZSAobWluIDw9IGNoaWxkcmVuTGVuKSB7XG4gICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW2NoaWxkcmVuTGVuLS1dO1xuICAgICAgICAgICAgaWYgKGNoaWxkKSByZWNvbGxlY3ROb2RlVHJlZShjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb2xsZWN0Tm9kZVRyZWUobm9kZSwgdW5tb3VudE9ubHkpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IG5vZGUuX2NvbXBvbmVudDtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkgdW5tb3VudENvbXBvbmVudChjb21wb25lbnQsICF1bm1vdW50T25seSk7IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vZGVbQVRUUl9LRVldICYmIG5vZGVbQVRUUl9LRVldLnJlZikgbm9kZVtBVFRSX0tFWV0ucmVmKG51bGwpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50T25seSkgY29sbGVjdE5vZGUobm9kZSk7XG4gICAgICAgICAgICB2YXIgYztcbiAgICAgICAgICAgIHdoaWxlIChjID0gbm9kZS5sYXN0Q2hpbGQpIHJlY29sbGVjdE5vZGVUcmVlKGMsIHVubW91bnRPbmx5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmQXR0cmlidXRlcyhkb20sIGF0dHJzLCBvbGQpIHtcbiAgICAgICAgdmFyIG5hbWU7XG4gICAgICAgIGZvciAobmFtZSBpbiBvbGQpIGlmICghKGF0dHJzICYmIG5hbWUgaW4gYXR0cnMpICYmIG51bGwgIT0gb2xkW25hbWVdKSBzZXRBY2Nlc3Nvcihkb20sIG5hbWUsIG9sZFtuYW1lXSwgb2xkW25hbWVdID0gdm9pZCAwLCBpc1N2Z01vZGUpO1xuICAgICAgICBpZiAoYXR0cnMpIGZvciAobmFtZSBpbiBhdHRycykgaWYgKCEoJ2NoaWxkcmVuJyA9PT0gbmFtZSB8fCAnaW5uZXJIVE1MJyA9PT0gbmFtZSB8fCBuYW1lIGluIG9sZCAmJiBhdHRyc1tuYW1lXSA9PT0gKCd2YWx1ZScgPT09IG5hbWUgfHwgJ2NoZWNrZWQnID09PSBuYW1lID8gZG9tW25hbWVdIDogb2xkW25hbWVdKSkpIHNldEFjY2Vzc29yKGRvbSwgbmFtZSwgb2xkW25hbWVdLCBvbGRbbmFtZV0gPSBhdHRyc1tuYW1lXSwgaXNTdmdNb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sbGVjdENvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IubmFtZSwgbGlzdCA9IGNvbXBvbmVudHNbbmFtZV07XG4gICAgICAgIGlmIChsaXN0KSBsaXN0LnB1c2goY29tcG9uZW50KTsgZWxzZSBjb21wb25lbnRzW25hbWVdID0gWyBjb21wb25lbnQgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50KEN0b3IsIHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBpbnN0ID0gbmV3IEN0b3IocHJvcHMsIGNvbnRleHQpLCBsaXN0ID0gY29tcG9uZW50c1tDdG9yLm5hbWVdO1xuICAgICAgICBDb21wb25lbnQuY2FsbChpbnN0LCBwcm9wcywgY29udGV4dCk7XG4gICAgICAgIGlmIChsaXN0KSBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGg7IGktLTsgKSBpZiAobGlzdFtpXS5jb25zdHJ1Y3RvciA9PT0gQ3Rvcikge1xuICAgICAgICAgICAgaW5zdC5uZXh0QmFzZSA9IGxpc3RbaV0ubmV4dEJhc2U7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDb21wb25lbnRQcm9wcyhjb21wb25lbnQsIHByb3BzLCBvcHRzLCBjb250ZXh0LCBtb3VudEFsbCkge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5fZGlzYWJsZSkge1xuICAgICAgICAgICAgY29tcG9uZW50Ll9kaXNhYmxlID0gITA7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9fcmVmID0gcHJvcHMucmVmKSBkZWxldGUgcHJvcHMucmVmO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5fX2tleSA9IHByb3BzLmtleSkgZGVsZXRlIHByb3BzLmtleTtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50LmJhc2UgfHwgbW91bnRBbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxNb3VudCkgY29tcG9uZW50LmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykgY29tcG9uZW50LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMsIGNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dCAhPT0gY29tcG9uZW50LmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudC5wcmV2Q29udGV4dCkgY29tcG9uZW50LnByZXZDb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQucHJldlByb3BzKSBjb21wb25lbnQucHJldlByb3BzID0gY29tcG9uZW50LnByb3BzO1xuICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcHJvcHM7XG4gICAgICAgICAgICBjb21wb25lbnQuX2Rpc2FibGUgPSAhMTtcbiAgICAgICAgICAgIGlmICgwICE9PSBvcHRzKSBpZiAoMSA9PT0gb3B0cyB8fCBvcHRpb25zLnN5bmNDb21wb25lbnRVcGRhdGVzICE9PSAhMSB8fCAhY29tcG9uZW50LmJhc2UpIHJlbmRlckNvbXBvbmVudChjb21wb25lbnQsIDEsIG1vdW50QWxsKTsgZWxzZSBlbnF1ZXVlUmVuZGVyKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYoY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJDb21wb25lbnQoY29tcG9uZW50LCBvcHRzLCBtb3VudEFsbCwgaXNDaGlsZCkge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5fZGlzYWJsZSkge1xuICAgICAgICAgICAgdmFyIHNraXAsIHJlbmRlcmVkLCBpbnN0LCBjYmFzZSwgcHJvcHMgPSBjb21wb25lbnQucHJvcHMsIHN0YXRlID0gY29tcG9uZW50LnN0YXRlLCBjb250ZXh0ID0gY29tcG9uZW50LmNvbnRleHQsIHByZXZpb3VzUHJvcHMgPSBjb21wb25lbnQucHJldlByb3BzIHx8IHByb3BzLCBwcmV2aW91c1N0YXRlID0gY29tcG9uZW50LnByZXZTdGF0ZSB8fCBzdGF0ZSwgcHJldmlvdXNDb250ZXh0ID0gY29tcG9uZW50LnByZXZDb250ZXh0IHx8IGNvbnRleHQsIGlzVXBkYXRlID0gY29tcG9uZW50LmJhc2UsIG5leHRCYXNlID0gY29tcG9uZW50Lm5leHRCYXNlLCBpbml0aWFsQmFzZSA9IGlzVXBkYXRlIHx8IG5leHRCYXNlLCBpbml0aWFsQ2hpbGRDb21wb25lbnQgPSBjb21wb25lbnQuX2NvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChpc1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyA9IHByZXZpb3VzUHJvcHM7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnN0YXRlID0gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuY29udGV4dCA9IHByZXZpb3VzQ29udGV4dDtcbiAgICAgICAgICAgICAgICBpZiAoMiAhPT0gb3B0cyAmJiBjb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlICYmIGNvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGUocHJvcHMsIHN0YXRlLCBjb250ZXh0KSA9PT0gITEpIHNraXAgPSAhMDsgZWxzZSBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGUpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlKHByb3BzLCBzdGF0ZSwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcHJvcHM7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50LnByZXZQcm9wcyA9IGNvbXBvbmVudC5wcmV2U3RhdGUgPSBjb21wb25lbnQucHJldkNvbnRleHQgPSBjb21wb25lbnQubmV4dEJhc2UgPSBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50Ll9kaXJ0eSA9ICExO1xuICAgICAgICAgICAgaWYgKCFza2lwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5yZW5kZXIpIHJlbmRlcmVkID0gY29tcG9uZW50LnJlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KSBjb250ZXh0ID0gZXh0ZW5kKGNsb25lKGNvbnRleHQpLCBjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KCkpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpc0Z1bmN0aW9uYWxDb21wb25lbnQocmVuZGVyZWQpKSByZW5kZXJlZCA9IGJ1aWxkRnVuY3Rpb25hbENvbXBvbmVudChyZW5kZXJlZCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgdmFyIHRvVW5tb3VudCwgYmFzZSwgY2hpbGRDb21wb25lbnQgPSByZW5kZXJlZCAmJiByZW5kZXJlZC5ub2RlTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjaGlsZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkUHJvcHMgPSBnZXROb2RlUHJvcHMocmVuZGVyZWQpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0ID0gaW5pdGlhbENoaWxkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdCAmJiBpbnN0LmNvbnN0cnVjdG9yID09PSBjaGlsZENvbXBvbmVudCAmJiBjaGlsZFByb3BzLmtleSA9PSBpbnN0Ll9fa2V5KSBzZXRDb21wb25lbnRQcm9wcyhpbnN0LCBjaGlsZFByb3BzLCAxLCBjb250ZXh0KTsgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1VubW91bnQgPSBpbnN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCA9IGNyZWF0ZUNvbXBvbmVudChjaGlsZENvbXBvbmVudCwgY2hpbGRQcm9wcywgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0Lm5leHRCYXNlID0gaW5zdC5uZXh0QmFzZSB8fCBuZXh0QmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuX3BhcmVudENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fY29tcG9uZW50ID0gaW5zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbXBvbmVudFByb3BzKGluc3QsIGNoaWxkUHJvcHMsIDAsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQ29tcG9uZW50KGluc3QsIDEsIG1vdW50QWxsLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGluc3QuYmFzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYmFzZSA9IGluaXRpYWxCYXNlO1xuICAgICAgICAgICAgICAgICAgICB0b1VubW91bnQgPSBpbml0aWFsQ2hpbGRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b1VubW91bnQpIGNiYXNlID0gY29tcG9uZW50Ll9jb21wb25lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbEJhc2UgfHwgMSA9PT0gb3B0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNiYXNlKSBjYmFzZS5fY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBkaWZmKGNiYXNlLCByZW5kZXJlZCwgY29udGV4dCwgbW91bnRBbGwgfHwgIWlzVXBkYXRlLCBpbml0aWFsQmFzZSAmJiBpbml0aWFsQmFzZS5wYXJlbnROb2RlLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGluaXRpYWxCYXNlICYmIGJhc2UgIT09IGluaXRpYWxCYXNlICYmIGluc3QgIT09IGluaXRpYWxDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVBhcmVudCA9IGluaXRpYWxCYXNlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFyZW50ICYmIGJhc2UgIT09IGJhc2VQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXJlbnQucmVwbGFjZUNoaWxkKGJhc2UsIGluaXRpYWxCYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9Vbm1vdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEJhc2UuX2NvbXBvbmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2xsZWN0Tm9kZVRyZWUoaW5pdGlhbEJhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0b1VubW91bnQpIHVubW91bnRDb21wb25lbnQodG9Vbm1vdW50LCBiYXNlICE9PSBpbml0aWFsQmFzZSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgIGlmIChiYXNlICYmICFpc0NoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRSZWYgPSBjb21wb25lbnQsIHQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0ID0gdC5fcGFyZW50Q29tcG9uZW50KSAoY29tcG9uZW50UmVmID0gdCkuYmFzZSA9IGJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UuX2NvbXBvbmVudCA9IGNvbXBvbmVudFJlZjtcbiAgICAgICAgICAgICAgICAgICAgYmFzZS5fY29tcG9uZW50Q29uc3RydWN0b3IgPSBjb21wb25lbnRSZWYuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1VwZGF0ZSB8fCBtb3VudEFsbCkgbW91bnRzLnVuc2hpZnQoY29tcG9uZW50KTsgZWxzZSBpZiAoIXNraXApIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZSkgY29tcG9uZW50LmNvbXBvbmVudERpZFVwZGF0ZShwcmV2aW91c1Byb3BzLCBwcmV2aW91c1N0YXRlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyVXBkYXRlKSBvcHRpb25zLmFmdGVyVXBkYXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZm4sIGNiID0gY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3M7XG4gICAgICAgICAgICBpZiAoY2IpIHdoaWxlIChmbiA9IGNiLnBvcCgpKSBmbi5jYWxsKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAoIWRpZmZMZXZlbCAmJiAhaXNDaGlsZCkgZmx1c2hNb3VudHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZENvbXBvbmVudEZyb21WTm9kZShkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCkge1xuICAgICAgICB2YXIgYyA9IGRvbSAmJiBkb20uX2NvbXBvbmVudCwgb3JpZ2luYWxDb21wb25lbnQgPSBjLCBvbGREb20gPSBkb20sIGlzRGlyZWN0T3duZXIgPSBjICYmIGRvbS5fY29tcG9uZW50Q29uc3RydWN0b3IgPT09IHZub2RlLm5vZGVOYW1lLCBpc093bmVyID0gaXNEaXJlY3RPd25lciwgcHJvcHMgPSBnZXROb2RlUHJvcHModm5vZGUpO1xuICAgICAgICB3aGlsZSAoYyAmJiAhaXNPd25lciAmJiAoYyA9IGMuX3BhcmVudENvbXBvbmVudCkpIGlzT3duZXIgPSBjLmNvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZTtcbiAgICAgICAgaWYgKGMgJiYgaXNPd25lciAmJiAoIW1vdW50QWxsIHx8IGMuX2NvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAzLCBjb250ZXh0LCBtb3VudEFsbCk7XG4gICAgICAgICAgICBkb20gPSBjLmJhc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxDb21wb25lbnQgJiYgIWlzRGlyZWN0T3duZXIpIHtcbiAgICAgICAgICAgICAgICB1bm1vdW50Q29tcG9uZW50KG9yaWdpbmFsQ29tcG9uZW50LCAhMCk7XG4gICAgICAgICAgICAgICAgZG9tID0gb2xkRG9tID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGMgPSBjcmVhdGVDb21wb25lbnQodm5vZGUubm9kZU5hbWUsIHByb3BzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChkb20gJiYgIWMubmV4dEJhc2UpIHtcbiAgICAgICAgICAgICAgICBjLm5leHRCYXNlID0gZG9tO1xuICAgICAgICAgICAgICAgIG9sZERvbSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDb21wb25lbnRQcm9wcyhjLCBwcm9wcywgMSwgY29udGV4dCwgbW91bnRBbGwpO1xuICAgICAgICAgICAgZG9tID0gYy5iYXNlO1xuICAgICAgICAgICAgaWYgKG9sZERvbSAmJiBkb20gIT09IG9sZERvbSkge1xuICAgICAgICAgICAgICAgIG9sZERvbS5fY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZWNvbGxlY3ROb2RlVHJlZShvbGREb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb207XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVubW91bnRDb21wb25lbnQoY29tcG9uZW50LCByZW1vdmUpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlVW5tb3VudCkgb3B0aW9ucy5iZWZvcmVVbm1vdW50KGNvbXBvbmVudCk7XG4gICAgICAgIHZhciBiYXNlID0gY29tcG9uZW50LmJhc2U7XG4gICAgICAgIGNvbXBvbmVudC5fZGlzYWJsZSA9ICEwO1xuICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxVbm1vdW50KSBjb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgICAgY29tcG9uZW50LmJhc2UgPSBudWxsO1xuICAgICAgICB2YXIgaW5uZXIgPSBjb21wb25lbnQuX2NvbXBvbmVudDtcbiAgICAgICAgaWYgKGlubmVyKSB1bm1vdW50Q29tcG9uZW50KGlubmVyLCByZW1vdmUpOyBlbHNlIGlmIChiYXNlKSB7XG4gICAgICAgICAgICBpZiAoYmFzZVtBVFRSX0tFWV0gJiYgYmFzZVtBVFRSX0tFWV0ucmVmKSBiYXNlW0FUVFJfS0VZXS5yZWYobnVsbCk7XG4gICAgICAgICAgICBjb21wb25lbnQubmV4dEJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoYmFzZSk7XG4gICAgICAgICAgICAgICAgY29sbGVjdENvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGM7XG4gICAgICAgICAgICB3aGlsZSAoYyA9IGJhc2UubGFzdENoaWxkKSByZWNvbGxlY3ROb2RlVHJlZShjLCAhcmVtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50Ll9fcmVmKSBjb21wb25lbnQuX19yZWYobnVsbCk7XG4gICAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkVW5tb3VudCkgY29tcG9uZW50LmNvbXBvbmVudERpZFVubW91bnQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gITA7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlKSB0aGlzLnN0YXRlID0ge307XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcih2bm9kZSwgcGFyZW50LCBtZXJnZSkge1xuICAgICAgICByZXR1cm4gZGlmZihtZXJnZSwgdm5vZGUsIHt9LCAhMSwgcGFyZW50KTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgRU1QVFlfQ0hJTERSRU4gPSBbXTtcbiAgICB2YXIgbGNDYWNoZSA9IHt9O1xuICAgIHZhciB0b0xvd2VyQ2FzZSA9IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGxjQ2FjaGVbc10gfHwgKGxjQ2FjaGVbc10gPSBzLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG4gICAgdmFyIHJlc29sdmVkID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdmFyIGRlZmVyID0gcmVzb2x2ZWQgPyBmdW5jdGlvbihmKSB7XG4gICAgICAgIHJlc29sdmVkLnRoZW4oZik7XG4gICAgfSA6IHNldFRpbWVvdXQ7XG4gICAgdmFyIEVNUFRZID0ge307XG4gICAgdmFyIEFUVFJfS0VZID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbC5mb3IoJ3ByZWFjdGF0dHInKSA6ICdfX3ByZWFjdGF0dHJfJztcbiAgICB2YXIgTk9OX0RJTUVOU0lPTl9QUk9QUyA9IHtcbiAgICAgICAgYm94RmxleDogMSxcbiAgICAgICAgYm94RmxleEdyb3VwOiAxLFxuICAgICAgICBjb2x1bW5Db3VudDogMSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IDEsXG4gICAgICAgIGZsZXg6IDEsXG4gICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICBmbGV4UG9zaXRpdmU6IDEsXG4gICAgICAgIGZsZXhTaHJpbms6IDEsXG4gICAgICAgIGZsZXhOZWdhdGl2ZTogMSxcbiAgICAgICAgZm9udFdlaWdodDogMSxcbiAgICAgICAgbGluZUNsYW1wOiAxLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgb3JwaGFuczogMSxcbiAgICAgICAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgICAgICAgd2lkb3dzOiAxLFxuICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgIHpvb206IDFcbiAgICB9O1xuICAgIHZhciBOT05fQlVCQkxJTkdfRVZFTlRTID0ge1xuICAgICAgICBibHVyOiAxLFxuICAgICAgICBlcnJvcjogMSxcbiAgICAgICAgZm9jdXM6IDEsXG4gICAgICAgIGxvYWQ6IDEsXG4gICAgICAgIHJlc2l6ZTogMSxcbiAgICAgICAgc2Nyb2xsOiAxXG4gICAgfTtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgbm9kZXMgPSB7fTtcbiAgICB2YXIgbW91bnRzID0gW107XG4gICAgdmFyIGRpZmZMZXZlbCA9IDA7XG4gICAgdmFyIGlzU3ZnTW9kZSA9ICExO1xuICAgIHZhciBoeWRyYXRpbmcgPSAhMTtcbiAgICB2YXIgY29tcG9uZW50cyA9IHt9O1xuICAgIGV4dGVuZChDb21wb25lbnQucHJvdG90eXBlLCB7XG4gICAgICAgIGxpbmtTdGF0ZTogZnVuY3Rpb24oa2V5LCBldmVudFBhdGgpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5fbGlua2VkU3RhdGVzIHx8ICh0aGlzLl9saW5rZWRTdGF0ZXMgPSB7fSk7XG4gICAgICAgICAgICByZXR1cm4gY1trZXkgKyBldmVudFBhdGhdIHx8IChjW2tleSArIGV2ZW50UGF0aF0gPSBjcmVhdGVMaW5rZWRTdGF0ZSh0aGlzLCBrZXksIGV2ZW50UGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTdGF0ZTogZnVuY3Rpb24oc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJldlN0YXRlKSB0aGlzLnByZXZTdGF0ZSA9IGNsb25lKHMpO1xuICAgICAgICAgICAgZXh0ZW5kKHMsIGlzRnVuY3Rpb24oc3RhdGUpID8gc3RhdGUocywgdGhpcy5wcm9wcykgOiBzdGF0ZSk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spICh0aGlzLl9yZW5kZXJDYWxsYmFja3MgPSB0aGlzLl9yZW5kZXJDYWxsYmFja3MgfHwgW10pLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgZW5xdWV1ZVJlbmRlcih0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmVuZGVyQ29tcG9uZW50KHRoaXMsIDIpO1xuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge31cbiAgICB9KTtcbiAgICBleHBvcnRzLmggPSBoO1xuICAgIGV4cG9ydHMuY2xvbmVFbGVtZW50ID0gY2xvbmVFbGVtZW50O1xuICAgIGV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuICAgIGV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuICAgIGV4cG9ydHMucmVyZW5kZXIgPSByZXJlbmRlcjtcbiAgICBleHBvcnRzLm9wdGlvbnMgPSBvcHRpb25zO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QuanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3ByZWFjdC9kaXN0L3ByZWFjdC5qc1xuLy8gbW9kdWxlIGlkID0gMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ1Byb3BUeXBlcycsIFsnZXhwb3J0cycsICdtb2R1bGUnXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZmFjdG9yeShleHBvcnRzLCBtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QuZXhwb3J0cywgbW9kKTtcbiAgICBnbG9iYWwuUHJvcFR5cGVzID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzLCBtb2R1bGUpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2ZvciddKCdyZWFjdC5lbGVtZW50JykgfHwgMHhlYWM3O1xuXG4gIHZhciBSZWFjdEVsZW1lbnQgPSB7fTtcblxuICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICB2YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xuXG4gIHZhciBlbXB0eUZ1bmN0aW9uID0ge1xuICAgIHRoYXRSZXR1cm5zOiBmdW5jdGlvbiB0aGF0UmV0dXJucyh3aGF0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gd2hhdDtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlclxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignUmVxdWlyZWQgJyArIGxvY2F0aW9uTmFtZSArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCB3YXMgbm90IHNwZWNpZmllZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMobnVsbCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb25OYW1lICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nKTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IGV4cGVjdGVkVmFsdWVzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcyk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBwcm9wVmFsdWUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbk5hbWUgKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uTmFtZSArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb25OYW1lICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uTmFtZSArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlcztcbn0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcHJvcHR5cGVzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQge3N1cnZleUNzc30gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcclxuXHJcbmV4cG9ydCB2YXIgZGVmYXVsdEJvb3RzdHJhcENzcyA9IHtcclxuICAgIHJvb3Q6IFwiXCIsXHJcbiAgICBoZWFkZXI6IFwicGFuZWwtaGVhZGluZ1wiLFxyXG4gICAgYm9keTogXCJwYW5lbC1ib2R5XCIsXHJcbiAgICBmb290ZXI6IFwicGFuZWwtZm9vdGVyXCIsXHJcbiAgICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLCBuYXZpZ2F0aW9uOiB7IGNvbXBsZXRlOiBcIlwiLCBwcmV2OiBcIlwiLCBuZXh0OiBcIlwiIH0sXHJcbiAgICBwcm9ncmVzczogXCJwcm9ncmVzcyBjZW50ZXItYmxvY2tcIiwgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXHJcbiAgICBwYWdlVGl0bGU6IFwiXCIsXHJcbiAgICByb3c6IFwiXCIsXHJcbiAgICBxdWVzdGlvbjogeyByb290OiBcIlwiLCB0aXRsZTogXCJcIiwgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIiwgaW5kZW50OiAyMCB9LFxyXG4gICAgZXJyb3I6IHsgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIiwgaWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ25cIiwgaXRlbTogXCJcIiB9LFxyXG5cclxuICAgIGNoZWNrYm94OiB7IHJvb3Q6IFwiZm9ybS1pbmxpbmVcIiwgaXRlbTogXCJjaGVja2JveFwiLCBvdGhlcjogXCJcIiB9LFxyXG4gICAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcclxuICAgIGRyb3Bkb3duOiB7IHJvb3Q6IFwiXCIsIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sXCIgfSxcclxuICAgIG1hdHJpeDogeyByb290OiBcInRhYmxlXCIgfSxcclxuICAgIG1hdHJpeGRyb3Bkb3duOiB7IHJvb3Q6IFwidGFibGVcIiB9LFxyXG4gICAgbWF0cml4ZHluYW1pYzogeyByb290OiBcInRhYmxlXCIsIGJ1dHRvbjogXCJidXR0b25cIiB9LFxyXG4gICAgbXVsdGlwbGV0ZXh0OiB7IHJvb3Q6IFwidGFibGVcIiwgaXRlbVRpdGxlOiBcIlwiLCBpdGVtVmFsdWU6IFwiZm9ybS1jb250cm9sXCIgfSxcclxuICAgIHJhZGlvZ3JvdXA6IHsgcm9vdDogXCJmb3JtLWlubGluZVwiLCBpdGVtOiBcInJhZGlvXCIsIGxhYmVsOiBcIlwiLCBvdGhlcjogXCJcIiB9LFxyXG4gICAgcmF0aW5nOiB7IHJvb3Q6IFwiYnRuLWdyb3VwXCIsIGl0ZW06IFwiYnRuIGJ0bi1kZWZhdWx0XCIgfSxcclxuICAgIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXHJcbiAgICB3aW5kb3c6IHtcclxuICAgICAgICByb290OiBcIm1vZGFsLWNvbnRlbnRcIiwgYm9keTogXCJtb2RhbC1ib2R5XCIsXHJcbiAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgIHJvb3Q6IFwibW9kYWwtaGVhZGVyIHBhbmVsLXRpdGxlXCIsIHRpdGxlOiBcInB1bGwtbGVmdFwiLCBidXR0b246IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHRcIixcclxuICAgICAgICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tdXBcIiwgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuc3VydmV5Q3NzW1wiYm9vdHN0cmFwXCJdID0gZGVmYXVsdEJvb3RzdHJhcENzcztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXAudHMiLCJpbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9jemVjaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2RhbmlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2R1dGNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZmlubmlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2ZyZW5jaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2dlcm1hbic7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2dyZWVrJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vcG9saXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vcm9tYW5pYW4nO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9ydXNzaWFuJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vc3dlZGlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3R1cmtpc2gnO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMiLCIvLyBzdHlsZXNcclxuaW1wb3J0IFwiLi4vLi4vbWFpbi5zY3NzXCI7XHJcblxyXG5leHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcclxuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBBbnN3ZXJDb3VudFZhbGlkYXRvciwgRW1haWxWYWxpZGF0b3IsIE51bWVyaWNWYWxpZGF0b3IsIFJlZ2V4VmFsaWRhdG9yLFxyXG4gICAgU3VydmV5VmFsaWRhdG9yLCBUZXh0VmFsaWRhdG9yLCBWYWxpZGF0b3JSZXN1bHQsIFZhbGlkYXRvclJ1bm5lclxyXG59IGZyb20gXCIuLi8uLi92YWxpZGF0b3JcIjtcclxuZXhwb3J0IHtCYXNlLCBFdmVudCwgU3VydmV5RXJyb3IsIElTdXJ2ZXl9IGZyb20gXCIuLi8uLi9iYXNlXCI7XHJcbmV4cG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi4vLi4vaXRlbXZhbHVlXCI7XHJcbmV4cG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi4vLi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuZXhwb3J0IHtDaG9pY2VzUmVzdGZ1bGx9IGZyb20gXCIuLi8uLi9jaG9pY2VzUmVzdGZ1bGxcIjtcclxuZXhwb3J0IHtDb25kaXRpb24sIENvbmRpdGlvbk5vZGUsIENvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvbnNcIjtcclxuZXhwb3J0IHtDb25kaXRpb25zUGFyc2VyfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uc1BhcnNlclwiO1xyXG5leHBvcnQge1Byb2Nlc3NWYWx1ZX0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xyXG5leHBvcnQge0N1c3RvbUVycm9yLCBFeGNlZWRTaXplRXJyb3IsIFJlcXVyZU51bWVyaWNFcnJvcn0gZnJvbSBcIi4uLy4uL2Vycm9yXCI7XHJcbmV4cG9ydCB7XHJcbiAgICBKc29uRXJyb3IsIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsIEpzb25NZXRhZGF0YSwgSnNvbk1ldGFkYXRhQ2xhc3MsXHJcbiAgICBKc29uTWlzc2luZ1R5cGVFcnJvciwgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlLCBKc29uT2JqZWN0LCBKc29uT2JqZWN0UHJvcGVydHksXHJcbiAgICBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yLCBKc29uVW5rbm93blByb3BlcnR5RXJyb3JcclxufSBmcm9tIFwiLi4vLi4vanNvbm9iamVjdFwiO1xyXG5leHBvcnQge1xyXG4gICAgTWF0cml4RHJvcGRvd25DZWxsLCBNYXRyaXhEcm9wZG93bkNvbHVtbiwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXHJcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXHJcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5leHBvcnQge01hdHJpeERyb3Bkb3duUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmV4cG9ydCB7TWF0cml4RHluYW1pY1Jvd01vZGVsLCBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcclxuZXhwb3J0IHtNYXRyaXhSb3dNb2RlbCwgUXVlc3Rpb25NYXRyaXhNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeFwiO1xyXG5leHBvcnQge011bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xyXG5leHBvcnQge1BhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlLCBRdWVzdGlvblJvd01vZGVsfSBmcm9tIFwiLi4vLi4vcGFuZWxcIjtcclxuZXhwb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuLi8uLi9wYWdlXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi8uLi9xdWVzdGlvblwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uYmFzZVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ2hlY2tib3hCYXNlLCBRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NvbW1lbnRcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkRyb3Bkb3duTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9kcm9wZG93blwiO1xyXG5leHBvcnQge1F1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3Rvcnl9IGZyb20gXCIuLi8uLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkZpbGVNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2ZpbGVcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkh0bWxNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2h0bWxcIjtcclxuZXhwb3J0IHtRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcclxuZXhwb3J0IHtRdWVzdGlvblJhdGluZ01vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcmF0aW5nXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25UZXh0TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl90ZXh0XCI7XHJcbmV4cG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi8uLi9zdXJ2ZXlcIjtcclxuZXhwb3J0IHtcclxuICAgIFN1cnZleVRyaWdnZXIsIFN1cnZleVRyaWdnZXJDb21wbGV0ZSwgU3VydmV5VHJpZ2dlclNldFZhbHVlLCBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSxcclxuICAgIFRyaWdnZXJcclxufSBmcm9tIFwiLi4vLi4vdHJpZ2dlclwiO1xyXG5leHBvcnQge1N1cnZleVdpbmRvd01vZGVsfSBmcm9tIFwiLi4vLi4vc3VydmV5V2luZG93XCI7XHJcbmV4cG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4uLy4uL3RleHRQcmVQcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCB7ZHhTdXJ2ZXlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XHJcbmV4cG9ydCB7c3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzfSBmcm9tIFwiLi4vLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ3VzdG9tV2lkZ2V0LCBDdXN0b21XaWRnZXRDb2xsZWN0aW9ufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XHJcblxyXG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxyXG4vL2V4cG9ydCB7ZGVmYXVsdCBhcyBRdWVzdGlvbkRhdGVNb2RlbH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvcXVlc3Rpb25fZGF0ZVwiO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9tb2RlbC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBjemVjaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiUMWZZWRjaG96w61cIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJEYWzFocOtXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiSG90b3ZvXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkppbsOhIG9kcG92xJvEjyAobmFwacWhdGUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiUHLFr3prdW11IG5lb2JzYWh1amUgxb7DoWRuw6kgb3TDoXpreS5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSba3VqZW1lIHphIHZ5cGxuxJtuw60gcHLFr3prdW11IVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJQcm9iw61ow6EgbmHEjcOtdMOhbsOtIHByxa96a3VtdS4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVnliZXIuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIG90w6F6a3UuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSB2xaFlY2hueSBvdMOhemt5LlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlYgdG9tdG8gcG9saSBsemUgemFkYXQgcG91emUgxI3DrXNsYS5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB6bmFrxa8uXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBtw6luxJsgbmXFviB7MH0gem5ha8WvLlwiLFxyXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJaYWRlanRlIHByb3PDrW0gdsOtY2UgbmXFviB7MH0gYSBtw6luxJsgbmXFviB7MX0gem5ha8WvLlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJWeXBsxYh0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSDFmcOhZGvFry5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlZ5YmVydGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gdmFyaWFudHkuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJOZXZ5YsOtcmVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSB2YXJpYW50LlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfSBhIG1lbsWhw60gbmVibyByb3ZubyB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgdsSbdMWhw60gbmVibyByb3ZubyB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgbWVuxaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlphZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlBvxb5hZGF2ZWsgdnLDoXRpbCBjaHlidSAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUG/FvmFkYXZlayBuZXZyw6F0aWwgZGF0YSBuZWJvIGNlc3RhIGplIG5lcGxhdG7DoVwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpa29zdCBzb3Vib3J1IGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJaYWRlanRlIHByb3PDrW0gamlub3UgaG9kbm90dS5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiVsOhxaEgc291Ym9yIHNlIG5haHLDoXbDoS4gWmt1c3RlIHRvIHByb3PDrW0gemEgbsSba29saWsgc2VrdW5kLlwiLFxyXG4gICAgYWRkUm93OiBcIlDFmWlkYXQgxZnDoWRla1wiLFxyXG4gICAgcmVtb3ZlUm93OiBcIk9kc3RyYW5pdFwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImN6XCJdID0gY3plY2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZGFuaXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWdlXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiVmlkZXJlXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRsOmcmRpZ1wiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGFmIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRGVyIGVyIGluZ2VuIHN5bmxpZ2Ugc3DDuHJnc23DpWwuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIk1hbmdlIHRhayBmb3IgZGluIGJlc3ZhcmVsc2UhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlNww7hyZ2Vza2VtYWV0IGhlbnRlcyBmcmEgc2VydmVyZW4uLi5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiVmFsZ2ZyaXQgc3Zhci4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVsOmbGcuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsZXQuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiQW5naXYgZXQgdGFsLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJBbmdpdiBtaW5kc3QgezB9IHRlZ24uXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBtaW5kc3QgIHswfSBzdmFybXVsaWdoZWQoZXIpLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgZsOmcnJlIHswfSBzdmFybXVsaWdoZWRlcihlcikuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX0gb2cgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIkFuZ2l2IHZlbmxpZ3N0IGVuIGd5bGRpZyBlLW1haWwgYWRyZXNzZS5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRmlsc3TDuHJyZWxzZW4gbcOlIGlra2Ugb3ZlcnN0aWdlIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJBbmdpdiBlbiB2w6ZyZGkgZm9yIGRpdCB2YWxnZnJpZSBzdmFyLlwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRhXCJdID0gZGFuaXNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCIvL0NyZWF0ZWQgb24gYmVoYWxmIGh0dHBzOi8vZ2l0aHViLmNvbS9GcmFuazEzXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBkdXRjaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiVm9yaWdlXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiVm9sZ2VuZGVcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJBZnNsdWl0ZW5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQW5kZXJlXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSB2YW4gezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJFciBpcyBnZWVuIHppY2h0YmFyZSBwYWdpbmEgb2YgdnJhYWcgaW4gZGV6ZSB2cmFnZW5saWpzdFwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJCZWRhbmt0IG9tIGRlemUgdnJhZ2VubGlqc3QgaW4gdGUgdnVsbGVuXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkRlIHZyYWdlbmxpanN0IGlzIGFhbiBoZXQgbGFkZW4uLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIktpZXMuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiR2VsaWV2ZSBlZW4gYW50d29vcmQgaW4gdGUgdnVsbGVuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiSGV0IGFudHdvb3JkIG1vZXQgZWVuIGdldGFsIHppam5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiR2VsaWV2ZSBtaW5zdGVuIHswfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiR2VsaWV2ZSBtaW5pbXVtIHswfSBhbnR3b29yZGVuIHRlIHNlbGVjdGVyZW4uXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJHZWxpZXZlIG5pZXQgbWVlciBkYW4gezB9IGFudHdvb3JkZW4gdGUgc2VsZWN0ZXJlbi5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfSBlbiBrbGVpbmVyIG9mIGdlbGlqayBhYW4gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIkdlbGlldmUgZWVuIGdlbGRpZyBlLW1haWxhZHJlcyBpbiB0ZSB2dWxsZW4uXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkRlIGdyb290dGUgdmFuIGhldCBiZXN0YW5kIG1hZyBuaWV0IGdyb3RlciB6aWpuIGRhbiB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiR2VsaWV2ZSBoZXQgdmVsZCAnQW5kZXJlJyBpbiB0ZSB2dWxsZW5cIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJubFwiXSA9IGR1dGNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBmaW5uaXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJFZGVsbGluZW5cIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJTZXVyYWF2YVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIlZhbG1pc1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJNdXUgKGt1dmFpbGUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2l2dSB7MH0vezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJUw6Rzc8OkIGt5c2VseXNzw6QgZWkgb2xlIHlodMOka8Okw6RuIG7DpGt5dmlsbMOkIG9sZXZhYSBzaXZ1YSB0YWkga3lzeW15c3TDpC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS2lpdG9zIGt5c2VseXluIHZhc3RhYW1pc2VzdGEhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkt5c2VsecOkIGxhZGF0YWFuIHBhbHZlbGltZWx0YS4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVmFsaXRzZS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJWYXN0YWEga3lzeW15a3NlZW4sIGtpaXRvcy5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJBcnZvbiB0dWxlZSBvbGxhIG51bWVlcmluZW4uXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk9sZSBoeXbDpCBqYSBzecO2dMOkIHbDpGhpbnTDpMOkbiB7MH0gbWVya2tpw6QuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJPbGUgaHl2w6QgamEgdmFsaXRzZSB2w6RoaW50w6TDpG4gezB9IHZhaWh0b2VodG9hLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiT2xlIGh5dsOkIGphIHZhbGl0c2UgZW5pbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHTDpHl0eXkgb2xsYSBlbmVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7MX0gamEgdsOkaGVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgdMOkeXR5eSBvbGxhIGVuZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyB0w6R5dHl5IG9sbGEgdsOkaGVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJTecO2dMOkIHZhbGlkaSBzw6Roa8O2cG9zdGlvc29pdGUuXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiT2xlIGh5dsOkIGphIHN5w7Z0w6QgXFxcIk11dSAoa3V2YWlsZSlcXFwiXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZmlcIl0gPSBmaW5uaXNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwiLy9DcmVhdGVkIG9uIGJlaGFsZiBodHRwczovL2dpdGh1Yi5jb20vRnJhbmsxM1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZnJlbmNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJQclxcdTAwZTljXFx1MDBlOWRlbnRcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJTdWl2YW50XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiVGVybWluZXJcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQXV0cmUgKHByXFx1MDBlOWNpc2VyKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IHN1ciB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIklsIG4neSBhIG5pIHBhZ2UgdmlzaWJsZSBuaSBxdWVzdGlvbiB2aXNpYmxlIGRhbnMgY2UgcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJNZXJjaSBkJ2F2b2lyIHJcXHUwMGU5cG9uZHUgYXUgcXVlc3Rpb25uYWlyZSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiTGUgcXVlc3Rpb25uYWlyZSBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiQ2hvaXNpc3Nlei4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJMYSByXFx1MDBlOXBvbnNlIFxcdTAwZTAgY2V0dGUgcXVlc3Rpb24gZXN0IG9ibGlnYXRvaXJlLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb3V0ZXMgbGVzIGxpZ25lcyBzb250IG9ibGlnYXRvaXJlc1wiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkxhIHJcXHUwMGU5cG9uc2UgZG9pdCBcXHUwMGVhdHJlIHVuIG5vbWJyZS5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiTWVyY2kgZCdlbnRyZXIgYXUgbW9pbnMgezB9IHN5bWJvbGVzLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc1xcdTAwZTlsZWN0aW9ubmVyIGF1IG1vaW5zIHswfXJcXHUwMGU5cG9uc2VzLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc1xcdTAwZTlsZWN0aW9ubmVyIGF1IHBsdXMgezB9clxcdTAwZTlwb25zZXMuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlZvdHJlIHJcXHUwMGU5cG9uc2UgJ3swfScgZG9pdCBcXHUwMGVhdHJlc3VwXFx1MDBlOXJpZXVyZSBvdSBcXHUwMGU5Z2FsZSBcXHUwMGUwIHsxfSBldCBpbmZcXHUwMGU5cmlldXJlIG91XFx1MDBlOWdhbGUgXFx1MDBlMCB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiVm90cmUgclxcdTAwZTlwb25zZSAnezB9JyBkb2l0IFxcdTAwZWF0cmVzdXBcXHUwMGU5cmlldXJlIG91IFxcdTAwZTlnYWxlIFxcdTAwZTAgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIlZvdHJlIHJcXHUwMGU5cG9uc2UgJ3swfScgZG9pdCBcXHUwMGVhdHJlaW5mXFx1MDBlOXJpZXVyZSBvdSBcXHUwMGU5Z2FsZSBcXHUwMGUwIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIk1lcmNpIGQnZW50cmVyIHVuZSBhZHJlc3NlIG1haWwgdmFsaWRlLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJMYSB0YWlsbGUgZHUgZmljaGllciBuZSBkb2l0IHBhcyBleGNcXHUwMGU5ZGVyIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXJjaSBkZSBwclxcdTAwZTljaXNlciBsZSBjaGFtcCAnQXV0cmUnLlwiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZnJcIl0gPSBmcmVuY2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGdlcm1hblN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiWnVyw7xja1wiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIldlaXRlclwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkZlcnRpZ1wiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNlaXRlIHswfSB2b24gezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJFcyBnaWJ0IGtlaW5lIHNpY2h0YmFyZSBGcmFnZS5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVmllbGVuIERhbmsgZsO8ciBkYXMgQXVzZsO8bGxlbiBkZXMgRnJhZ2Vib2dlbnMhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkRlciBGcmFnZWJvZ2VuIHdpcmQgdm9tIFNlcnZlciBnZWxhZGVuLi4uXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkJlbnV0emVyZGVmaW5pZXJ0ZSBBbnR3b3J0Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJXw6RobGVuLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIkJpdHRlIGFudHdvcnRlbiBTaWUgYXVmIGRpZSBGcmFnZS5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJEZXIgV2VydCBzb2xsdGUgZWluZSBaYWhsIHNlaW4uXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIkJpdHRlIGdlYmVuIFNpZSBtaW5kZXN0ZW5zIHswfSBTeW1ib2xlLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbWluZGVzdGVucyB7MH0gVmFyaWFudGVuLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbmljaHQgbWVociBhbHMgezB9IFZhcmlhbnRlbi5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgc29sbHRlIGdsZWljaCBvZGVyIGdyw7bDn2VyIHNlaW4gYWxzIHsxfSB1bmQgZ2xlaWNoIG9kZXIga2xlaW5lciBhbHMgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHNvbGx0ZSBnbGVpY2ggb2RlciBncsO2w59lciBzZWluIGFscyB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc29sbHRlIGdsZWljaCBvZGVyIGtsZWluZXIgYWxzIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lIGfDvGx0aWdlIEVtYWlsLUFkcmVzc2UgZWluLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEaWUgRGF0ZWlncsO2w59lIHNvbGwgbmljaHQgbWVociBhbHMgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBXZXJ0IGbDvHIgSWhyZSBiZW51dHplcmRlZmluaWVydGUgQW50d29ydCBlaW4uXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGVcIl0gPSBnZXJtYW5TdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2dlcm1hbi50cyIsIi8vQ3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYWdlbG9zcGFuYWdpb3Rha2lzXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBncmVla1N1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ov1wiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIs6Vz4DPjM68zrXOvc6/XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwizp/Ou86/zrrOu86uz4HPic+DzrdcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwizobOu867zr8gKM+AzrHPgc6xzrrOsc67z44gzrTOuc61z4XOus+BzrnOvc6vz4PPhM61KVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIs6jzrXOu86vzrTOsSB7MH0gzrHPgM+MIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM66zrHOvM6vzrEgzr/Pgc6xz4TOriDPg861zrvOr860zrEgzq4gzr/Pgc6xz4TOriDOtc+Bz47PhM63z4POtyDPg861IM6xz4XPhM+MIM+Ezr8gzrXPgc+Jz4TOt868zrHPhM6/zrvPjM6zzrnOvy5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwizpXPhc+HzrHPgc65z4PPhM6/z43OvM61IM6zzrnOsSDPhM63zr0gz4PPhc68z4DOu86uz4HPic+DzrcgzrHPhc+Ezr/PhSDPhM6/z4UgzrXPgc+Jz4TOt868zrHPhM6/zrvOv86zzq/Ov8+FIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCLOpM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8gz4bOv8+Bz4TPjs69zrXPhM6xzrkgzrHPgM6/IM+Ezr8gzrTOuc6xzrrOv868zrnPg8+Ezq4uLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIs6Vz4DOuc67zq3Ovs+EzrUuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4PPhM63zr0gzrXPgc+Oz4TOt8+DzrcuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOuc+CIM61z4HPic+Ezq7Pg861zrnPgiDPg861IM+MzrvOtc+CIM+EzrnPgiDOs8+BzrHOvM68zq3Pgi5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCLOlyDPhM65zrzOriDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6xz4HOuc64zrzOuc+EzrnOus6uLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4PPjc68zrLOv867zrEuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDOs8+BzrHOvM68zq3Pgi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPjM+Hzrkgz4DOsc+BzrHPgM6szr3PiSDOsc+Azr8gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCLOpM6/ICd7MH0nIM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOr8+Dzr8gzq4gzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezF9IM66zrHOuSDOr8+Dzr8gzq4gzrzOuc66z4HPjM+EzrXPgc6/IM6xz4DOvyDPhM6/IHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzq4gzrnPg86/IM68zrUgz4TOvyB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrnOus+Bz4zPhM61z4HOvyDOriDOr8+Dzr8gzrHPgM6/IM+Ezr8gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwizqDOsc+BzrHOus6xzrvPjiDOtM+Oz4PPhM61IM68zrnOsSDOsc+Azr/OtM61zrrPhM6uIM60zrnOtc+NzrjPhc69z4POtyBlLW1haWwuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDPg8+GzqzOu868zrEgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgzrrOtc69zqwgzrTOtc60zr/OvM6tzr3OsSDOriDOtyDOuc60z4zPhM63z4TOsSAnzrzOv869zr/PgM6sz4TOuS9wYXRoJyDOtc6vzr3Osc65IM61z4PPhs6xzrvOrc68zq3Ovc63XCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIs6kzr8gzrzOrc6zzrXOuM6/z4IgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM+Fz4DOtc+BzrLOrc69zrXOuSDPhM6xIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOt869IM+EzrnOvM6uIM6zzrnOsSDPhM6/IM+AzrXOtM6vzr8gJ86szrvOu86/Jy5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwizqTOvyDOsc+Bz4fOtc6vzr8gz4POsc+CIM6xzr3Otc6yzrHOr869zrXOuS4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtSDOus6xz4DOv865zrEgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIM66zrHOuSDOtM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwuXCIsXHJcbiAgICBhZGRSb3c6IFwizqDPgc6/z4POuM6uzrrOtyDOs8+BzrHOvM68zq7PglwiLFxyXG4gICAgcmVtb3ZlUm93OiBcIs6Rz4bOsc6vz4HOtc+DzrdcIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImdyXCJdID0gZ3JlZWtTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgcG9saXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJXc3RlY3pcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJEYWxlalwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkdvdG93ZVwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJJbm5hIG9kcG93aWVkxbogKHdwaXN6KVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlN0cm9uYSB7MH0geiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIk5pZSBtYSB3aWRvY3pueWNoIHB5dGHFhC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRHppxJlrdWplbXkgemEgd3lwZcWCbmllbmllIGFua2lldHkhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlRyd2Egd2N6eXR5d2FuaWUgYW5raWV0eS4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiV3liaWVyei4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgdG8gcHl0YW5pZS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUHJvc3rEmSBvZHBvd2llZHppZcSHIG5hIHdzenlzdGtpZSBweXRhbmlhLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlcgdHltIHBvbHUgbW/FvG5hIHdwaXNhxIcgdHlsa28gbGljemJ5LlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgY28gbmFqbW5pZWogezB9IHpuYWvDs3cuXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyBtbmllaiBuacW8IHswfSB6bmFrw7N3LlwiLFxyXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgd2nEmWNlaiBuacW8IHswfSBpIG1uaWVqIG5pxbwgezF9IHpuYWvDs3cuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlByb3N6xJkgdXp1cGXFgm5pxIcgcHJ6eW5ham1uaWVqIHswfSB3aWVyc3p5LlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIGNvIG5ham1uaWVqIHswfSBwb3p5Y2ppLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIG5pZSB3acSZY2VqIG5pxbwgezB9IHBvenljamkuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9IG9yYXogbW5pZWpzemEgbHViIHLDs3duYSB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbHViIHLDs3duYSB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJQcm9zesSZIHBvZGHEhyBwcmF3aWTFgm93eSBhZHJlcyBlbWFpbC5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLFu8SFZGFuaWUgendyw7NjacWCbyBixYLEhWQgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIsW7xIVkYW5pZSBuaWUgendyw7NjacWCbyBkYW55Y2ggYWxibyDFm2NpZcW8a2EgamVzdCBuaWVwcmF3aWTFgm93YVwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJSb3ptaWFyIHByemVzxYJhbmVnbyBwbGlrdSBuaWUgbW/FvGUgcHJ6ZWtyYWN6YcSHIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIHBvZGHEhyBpbm7EhSBvZHBvd2llZMW6LlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJUcndhIHByemVub3N6ZW5pZSBUd29qZWdvIHBsaWt1LCBwcm9zesSZIHNwcsOzYm93YcSHIHBvbm93bmllIHphIGtpbGthIHNla3VuZC5cIixcclxuICAgIGFkZFJvdzogXCJEb2RhaiB3aWVyc3pcIixcclxuICAgIHJlbW92ZVJvdzogXCJVc3XFhFwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInBsXCJdID0gcG9saXNoU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgcm9tYW5pYW5TdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByZWNlZGVudFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlVybcSDdG9yXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyZVwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbHR1bChwcmVjaXphxaNpKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2luYSB7MH0gZGluIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiTnUgc3VudCDDrm50cmVixINyaSBwZW50cnUgYWNlc3QgY2hlc3Rpb25hclwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJWxIMgbXVsxaN1bWltIHBlbnRydSB0aW1wdWwgYWNvcmRhdCFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiQ2hlc3Rpb25hcnVsIHNlIMOubmNhcmPEgy4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiQWxlZ2XFo2kuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiUsSDc3B1bnN1bCBsYSBhY2Vhc3TEgyDDrm50cmViYXJlIGVzdGUgb2JsaWdhdG9yaXUuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvYXRlIHLEg3NwdW5zdXJpbGUgc3VudCBvYmxpZ2F0b3JpaVwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlLEg3NwdW5zdWwgdHJlYnVpZSBzxIMgZmllIG51bWVyaWMuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjaSBtaW5pbSB7MH0gY2FyYWN0ZXJlLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVHJlYnVpZSBzxIMgc2VsZWN0ZXppIG1pbmltIHswfSBvcMWjaXVuaS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGV6aSBtYXhpbSB7MH0gb3DFo2l1bmkuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfSDFn8OuIG1haSBtaWMgc2F1IGVnYWwgY3UgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWljIHNhdSBlZ2FsIGNhIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSBvIGFkcmVzYSBkZSBlbWFpbCB2YWxpZMSDLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEaW1lbnNpdW5lYSBmacWfaWVydWx1aSBudSB0cmVidWllIHPEgyBkZXDEg8WfZWFzY8SDIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUcmVidWllIHPEgyBjb21wbGV0ZXppIGPDom1wdWwgJ0FsdHVsJy5cIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJvXCJdID0gcm9tYW5pYW5TdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcItCd0LDQt9Cw0LRcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCLQlNCw0LvQtdC1XCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwi0JPQvtGC0L7QstC+XCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwi0KHRgtGA0LDQvdC40YbQsCB7MH0g0LjQtyB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcItCd0LXRgiDQvdC4INC+0LTQvdC+0LPQviDQstC+0L/RgNC+0YHQsC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0JLQsNGBINC30LAg0LfQsNC/0L7Qu9C90LXQvdC40LUg0LDQvdC60LXRgtGLIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0LPRgNGD0LfQutCwINGBINGB0LXRgNCy0LXRgNCwLi4uXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L7QtSAo0L/QvtC20LDQu9GD0LnRgdGC0LAsINC+0L/QuNGI0LjRgtC1KVwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwi0JLRi9Cx0YDQsNGC0YwuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L3QsCDQstC+0L/RgNC+0YEuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwi0J7RgtCy0LXRgiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0YfQuNGB0LvQvtC8LlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YXQvtGC0Y8g0LHRiyB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INGF0L7RgtGPINCx0YsgezB9INCy0LDRgNC40LDQvdGC0L7Qsi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INC90LUg0LHQvtC70LXQtSB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YDQsNCy0L3Ri9C8INC40LvQuCDQsdC+0LvRjNGI0LUsINGH0LXQvCB7MX0sINC4INGA0LDQstC90YvQvCDQuNC70Lgg0LzQtdC90YzRiNC1LCDRh9C10LwgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0Lwg0LjQu9C4INCx0L7Qu9GM0YjQtSwg0YfQtdC8IHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YDQsNCy0L3Ri9C8INC40LvQuCDQvNC10L3RjNGI0LUsINGH0LXQvCB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQsNC90L3Ri9C1INCyINC/0L7Qu9C1IFxcXCLQlNGA0YPQs9C+0LVcXFwiXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicnVcIl0gPSBydXNzaWFuU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3J1c3NpYW4udHMiLCIvL0NyZWF0ZSBieSBNYXR0aWFzIEFzcGx1bmRcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIkbDtnJlZ8OlZW5kZVwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIk7DpHN0YVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkbDpHJkaWdcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQW5uYXQgKGJlc2tyaXYpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2lkYSB7MH0gYXYgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJEZXQgZmlubnMgaW5nZW4gc3lubGlnIHNpZGEgZWxsZXIgZnLDpWdhIGkgZW5rw6R0ZW4uXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlRhY2sgZsO2ciBhdHQgZHUgZ2Vub21mw7ZydCBlbmvDpHRlbiEhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkVua8OkdGVuIGxhZGRhcy4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVsOkbGouLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ2FuLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6Vnb3JuYSBww6UgYWxsYSByYWRlci5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJWw6RyZGV0IHNrYSB2YXJhIG51bWVyaXNrdC5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiVmFyIHbDpG5saWcgYW5nZSBtaW5zdCB7MH0gdGVja2VuLlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJWYXIgdsOkbmxpZyBmeWxsIGkgbWluc3QgezB9IHJhZGVyLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogw6V0bWluc3RvbmUgezB9IHZhcmlhbnRlci5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIGludGUgZmxlciDDpG4gezB9IHZhcmlhbnRlci5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWVyIMOkbiB7MX0gc2FtdCBsaWthIG1lZCBlbGxlciBtaW5kcmUgw6RuIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtaW5kcmUgw6RuIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlZhciB2w6RubGlnIGFuZ2UgZW4ga29ycmVrdCBlLXBvc3RhZHJlc3MuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiRsO2cmZyw6VnYW4gcmV0dXJuZXJhZGUgZmVsZXQgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkFudGluZ2VuIHJldHVybmVyYWRlIGbDtnJmcsOlZ2FuIGluZ2VuIGRhdGEgZWxsZXIgc8OlIMOkciBlZ2Vuc2thcGVuICdwYXRoJyBpbnRlIGtvcnJla3RcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRmlsc3Rvcmxla2VuIGbDpXIgZWogw7Z2ZXJzdGlnYSB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYW5nZSBkZXQgYW5kcmEgdsOkcmRldC5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiRGluIGZpbCBsYWRkYXMgdXBwLiBWYXIgdsOkbmxpZyB2w6RudGEgbsOlZ3JhIHNla3VuZGVyIG9jaCBmw7Zyc8O2ayBzZWRhbiBpZ2VuLlwiLFxyXG4gICAgYWRkUm93OiBcIkzDpGdnIHRpbGwgcmFkXCIsXHJcbiAgICByZW1vdmVSb3c6IFwiVGEgYm9ydFwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInN2XCJdID0gc3dlZGlzaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9zd2VkaXNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHR1cmtpc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgICAgIHBhZ2VQcmV2VGV4dDogXCJHZXJpXCIsXHJcbiAgICAgICAgcGFnZU5leHRUZXh0OiBcIsSwbGVyaVwiLFxyXG4gICAgICAgIGNvbXBsZXRlVGV4dDogXCJBbmtldGkgVGFtYW1sYVwiLFxyXG4gICAgICAgIG90aGVySXRlbVRleHQ6IFwiRGnEn2VyIChhw6fEsWtsYXnEsW7EsXopXCIsXHJcbiAgICAgICAgcHJvZ3Jlc3NUZXh0OiBcIlNheWZhIHswfSAvIHsxfVwiLFxyXG4gICAgICAgIGVtcHR5U3VydmV5OiBcIkFua2V0dGUgZ8O2csO8bnTDvGxlbmVjZWsgc2F5ZmEgeWEgZGEgc29ydSBtZXZjdXQgZGXEn2lsLlwiLFxyXG4gICAgICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQW5rZXRpbWl6aSB0YW1hbWxhZMSxxJ/EsW7EsXogacOnaW4gdGXFn2Vra8O8ciBlZGVyaXouXCIsXHJcbiAgICAgICAgbG9hZGluZ1N1cnZleTogXCJBbmtldCBzdW51Y3VkYW4gecO8a2xlbml5b3IgLi4uXCIsXHJcbiAgICAgICAgb3B0aW9uc0NhcHRpb246IFwiU2XDp2luaXogLi4uXCIsXHJcbiAgICAgICAgcmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIHNvcnV5YSBjZXZhcCB2ZXJpbml6XCIsXHJcbiAgICAgICAgbnVtZXJpY0Vycm9yOiBcIkdpcmlsZW4gZGXEn2VyIG51bWVyaWsgb2xtYWzEsWTEsXJcIixcclxuICAgICAgICB0ZXh0TWluTGVuZ3RoOiBcIkVuIGF6IHswfSBzZW1ib2wgZ2lyaW5pei5cIixcclxuICAgICAgICBtaW5Sb3dDb3VudEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNhdMSxcsSxIGRvbGR1cnVuLlwiLFxyXG4gICAgICAgIG1pblNlbGVjdEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNlw6dlbmXEn2kgc2XDp2luaXouXCIsXHJcbiAgICAgICAgbWF4U2VsZWN0RXJyb3I6IFwiTMO8dGZlbiB7MH0gYWRldHRlbiBmYXpsYSBzZcOnbWV5aW5pei5cIixcclxuICAgICAgICBudW1lcmljTWluTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxyXG4gICAgICAgIG51bWVyaWNNaW46IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHZleWEgYsO8ecO8ayBvbG1hbMSxZMSxclwiLFxyXG4gICAgICAgIG51bWVyaWNNYXg6IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHlhIGRhIGvDvMOnw7xrIG9sbWFsxLFkxLFyLlwiLFxyXG4gICAgICAgIGludmFsaWRFbWFpbDogXCJMw7x0ZmVuIGdlw6dlcmxpIGJpciBlcG9zdGEgYWRyZXNpIGdpcmluaXouXCIsXHJcbiAgICAgICAgdXJsUmVxdWVzdEVycm9yOiBcIlRhbGViaSDFn3UgaGF0YXnEsSBkw7ZuZMO8ICd7MH0nLiB7MX1cIixcclxuICAgICAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiVGFsZXAgaGVyaGFuZ2kgYmlyIHZlcmkgZMO2bm1lZGkgeWEgZGEgJ3BhdGgnIMO2emVsbGnEn2kgaGF0YWzEsS5cIixcclxuICAgICAgICBleGNlZWRNYXhTaXplOiBcIkRvc3lhIGJveXV0dSB7MH0gZGXEn2VyaW5pIGdlw6dlbWV6LlwiLFxyXG4gICAgICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIGRpxJ9lciBkZcSfZXJsZXJpIGdpcmluaXouXCIsXHJcbiAgICAgICAgdXBsb2FkaW5nRmlsZTogXCJEb3N5YW7EsXogecO8a2xlbml5b3IuIEzDnHRmZW4gYmlya2HDpyBzYW5peWUgYmVrbGV5aW4gdmUgdGVrcmFyIGRlbmV5aW4uXCIsXHJcbiAgICAgICAgYWRkUm93OiBcIlNhdMSxciBFa2xlXCIsXHJcbiAgICAgICAgcmVtb3ZlUm93OiBcIkthbGTEsXJcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0clwiXSA9IHR1cmtpc2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0SGFzT3RoZXIodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHZhbC5pbmRleE9mKHRoaXMub3RoZXJJdGVtLnZhbHVlKSA+PSAwO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdmFsW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhdmFsLmxlbmd0aCkgcmV0dXJuIHZhbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb21tZW50KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJjaGVja2JveFwiO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjaGVja2JveFwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChcIlwiKTsgfSwgXCJjaGVja2JveGJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25DaGVja2JveE1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fY2hlY2tib3gudHMiLCJpbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tbWVudE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgcHVibGljIHJvd3M6IG51bWJlciA9IDQ7XHJcbiAgICBwdWJsaWMgY29sczogbnVtYmVyID0gNTA7XHJcbiAgICBwcml2YXRlIGxvY1BsYWNlSG9sZGVyVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcclxuICAgIH1cclxuICAgIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNvbW1lbnRcIiwgW3sgbmFtZTogXCJjb2xzOm51bWJlclwiLCBkZWZhdWx0OiA1MCB9LCB7IG5hbWU6IFwicm93czpudW1iZXJcIiwgZGVmYXVsdDogNCB9LCBcclxuICAgIHtuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25Db21tZW50TW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBsb2NPcHRpb25zQ2FwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCkgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID8gdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jT3B0aW9uc0NhcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlO31cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZHJvcGRvd25cIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJkcm9wZG93blwiLCBbeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25Ecm9wZG93bk1vZGVsKFwiXCIpOyB9LCBcInNlbGVjdGJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25Ecm9wZG93bk1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJpbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3IsIEV4Y2VlZFNpemVFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZpbGVNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHByaXZhdGUgc2hvd1ByZXZpZXdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc1VwbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJldmlld1ZhbHVlTG9hZGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBwdWJsaWMgaW1hZ2VIZWlnaHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBpbWFnZVdpZHRoOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RvcmVEYXRhQXNUZXh0OiBib29sZWFuO1xyXG4gICAgcHVibGljIG1heFNpemU6IG51bWJlcjtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaG93UHJldmlldygpIHsgcmV0dXJuIHRoaXMuc2hvd1ByZXZpZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93UHJldmlldyh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnNob3dQcmV2aWV3VmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmICF0aGlzLnN1cnZleS51cGxvYWRGaWxlKHRoaXMubmFtZSwgZmlsZSwgdGhpcy5zdG9yZURhdGFBc1RleHQsIGZ1bmN0aW9uIChzdGF0dXM6IHN0cmluZykgeyBzZWxmLmlzVXBsb2FkaW5nID0gc3RhdHVzID09IFwidXBsb2FkaW5nXCI7ICB9KSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsZVZhbHVlKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHByZXZpZXdWYWx1ZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIHNldEZpbGVWYWx1ZShmaWxlOiBGaWxlKSB7XHJcbiAgICAgICAgaWYgKCFGaWxlUmVhZGVyKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3dQcmV2aWV3ICYmICF0aGlzLnN0b3JlRGF0YUFzVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrRmlsZUZvckVycm9ycyhmaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zaG93UHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5wcmV2aWV3VmFsdWUgPSBzZWxmLmlzRmlsZUltYWdlKGZpbGUpID8gZmlsZVJlYWRlci5yZXN1bHQgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5wcmV2aWV3VmFsdWVMb2FkZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RvcmVEYXRhQXNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gZmlsZVJlYWRlci5yZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVwbG9hZGluZ0ZpbGVcIikpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrRmlsZUZvckVycm9ycyhmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGVycm9yTGVuZ3RoID0gdGhpcy5lcnJvcnMgPyB0aGlzLmVycm9ycy5sZW5ndGggOiAwO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEV4Y2VlZFNpemVFcnJvcih0aGlzLm1heFNpemUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yTGVuZ3RoICE9IHRoaXMuZXJyb3JzLmxlbmd0aCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzRmlsZUltYWdlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUudHlwZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzdHIgPSBmaWxlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoXCJpbWFnZVwiKSA9PSAwO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJmaWxlXCIsIFtcInNob3dQcmV2aWV3OmJvb2xlYW5cIiwgXCJpbWFnZUhlaWdodFwiLCBcImltYWdlV2lkdGhcIiwgXCJzdG9yZURhdGFBc1RleHQ6Ym9vbGVhblwiLCBcIm1heFNpemU6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsImltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgICBwcml2YXRlIGxvY0h0bWxWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NIdG1sVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImh0bWxcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NIdG1sLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgaHRtbCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jSHRtbC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0h0bWxWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRIdG1sKCkgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbCh0aGlzLmh0bWwpIDogdGhpcy5odG1sOyB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImh0bWxcIiwgW3tuYW1lOlwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uYmFzZVwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9odG1sLnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gJy4vc3VydmV5U3RyaW5ncyc7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERhdGEge1xyXG4gICAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3dNb2RlbCBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBJTWF0cml4RGF0YTtcclxuICAgIHByb3RlY3RlZCByb3dWYWx1ZTogYW55OyBcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogYW55LCBwdWJsaWMgdGV4dDogc3RyaW5nLCBwdWJsaWMgZnVsbE5hbWU6IHN0cmluZywgZGF0YTogSU1hdHJpeERhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMucm93VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93VmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhKSB0aGlzLmRhdGEub25NYXRyaXhSb3dDaGFuZ2VkKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIGltcGxlbWVudHMgSU1hdHJpeERhdGEge1xyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIHJvd3NWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZWRWaXNpYmxlUm93czogQXJyYXk8TWF0cml4Um93TW9kZWw+O1xyXG4gICAgcHVibGljIGlzQWxsUm93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLnJvd3NWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1Jvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1ZhbHVlLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBzZXQgY29sdW1ucyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMuY29sdW1uc1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMucm93c1ZhbHVlOyB9XHJcbiAgICBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucm93c1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhSb3dNb2RlbD4oKTtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLnJvd3NbaV0udmFsdWUsIHRoaXMucm93c1tpXS50ZXh0LCB0aGlzLm5hbWUgKyAnXycgKyB0aGlzLnJvd3NbaV0udmFsdWUudG9TdHJpbmcoKSwgdmFsW3RoaXMucm93c1tpXS52YWx1ZV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhudWxsLCBcIlwiLCB0aGlzLm5hbWUsIHZhbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7IH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0Vycm9ySW5Sb3dzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlcXVpcmVkSW5BbGxSb3dzRXJyb3JcIikpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FsbFJvd1JlcXVpcmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBoYXNWYWx1ZXNJbkFsbFJvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgaWYgKCFyb3dzKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IHJvd3NbaV0udmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgZnVsbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeFJvd01vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeFJvd01vZGVsKG5hbWUsIHRleHQsIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZyB8fCAhKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSB2YWwgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbMF0udmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByb3dWYWwgPSB2YWxbcm93Lm5hbWVdID8gdmFsW3Jvdy5uYW1lXSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnZhbHVlID0gcm93VmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RGF0YVxyXG4gICAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKHJvdy52YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdWYWx1ZVtyb3cubmFtZV0gPSByb3cudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm1hdHJpeFwiLCBbeyBuYW1lOiBcImNvbHVtbnM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jb2x1bW5zKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jb2x1bW5zID0gdmFsdWU7IH19LFxyXG4gICAgeyBuYW1lOiBcInJvd3M6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yb3dzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yb3dzID0gdmFsdWU7IH0gfSxcclxuICAgIFwiaXNBbGxSb3dSZXF1aXJlZDpib29sZWFuXCJdLCAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpOyBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7IHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsImltcG9ydCB7UXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcclxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgSU1hdHJpeERyb3Bkb3duRGF0YVxyXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBhbnksIHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiB0aGlzLm5hbWU7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgcHJpdmF0ZSByb3dzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMucm93c1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93blwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yb3dzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucm93c1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvd3MgfHwgdGhpcy5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLnJvd3NbaV0udmFsdWUsIHRoaXMucm93c1tpXS50ZXh0LCB2YWxbdGhpcy5yb3dzW2ldLnZhbHVlXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Sb3dNb2RlbChuYW1lLCB0ZXh0LCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhkcm9wZG93blwiLCBbeyBuYW1lOiBcInJvd3M6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yb3dzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yb3dzID0gdmFsdWU7IH19XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwoXCJcIik7IH0sIFwibWF0cml4ZHJvcGRvd25iYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkcm9wZG93blwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJpbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXHJcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgSU1hdHJpeERyb3Bkb3duRGF0YVxyXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHluYW1pY1Jvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBcInJvd1wiICsgdGhpcy5pbmRleDsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGltcGxlbWVudHMgSU1hdHJpeERyb3Bkb3duRGF0YSB7XHJcbiAgICBzdGF0aWMgTWF4Um93Q291bnQgPSAxMDA7XHJcbiAgICBwcml2YXRlIHJvd0NvdW50ZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSByb3dDb3VudFZhbHVlOiBudW1iZXIgPSAyO1xyXG4gICAgcHJpdmF0ZSBsb2NBZGRSb3dUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NSZW1vdmVSb3dUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHVibGljIG1pblJvd0NvdW50ID0gMDtcclxuICAgIHB1YmxpYyByb3dDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY0FkZFJvd1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1JlbW92ZVJvd1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHluYW1pY1wiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dDb3VudCgpIHsgcmV0dXJuIHRoaXMucm93Q291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLk1heFJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gdmFsKSB7XHJcbiAgICAgICAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgcVZhbC5zcGxpY2UodmFsKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHFWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucm93Q291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFJvdygpIHtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3cobnVsbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvd0NvdW50Kys7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKHZhbCwgbnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm93Q291bnQtLTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgYWRkUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jQWRkUm93VGV4dC50ZXh0ID8gdGhpcy5sb2NBZGRSb3dUZXh0LnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYWRkUm93XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGFkZFJvd1RleHQodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0FkZFJvd1RleHQudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0FkZFJvd1RleHQoKSB7IHJldHVybiB0aGlzLmxvY0FkZFJvd1RleHRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCByZW1vdmVSb3dUZXh0KCkgeyByZXR1cm4gdGhpcy5sb2NSZW1vdmVSb3dUZXh0LnRleHQgPyB0aGlzLmxvY1JlbW92ZVJvd1RleHQudGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVtb3ZlUm93VGV4dCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUmVtb3ZlUm93VGV4dC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUmVtb3ZlUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jUmVtb3ZlUm93VGV4dFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7ICAgcmV0dXJuIGZhbHNlOyAgfVxyXG4gICAgcHVibGljIGdldCBjYWNoZWRWaXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzICYmIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IHRoaXMucm93Q291bnQpIHJldHVybiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3JJblJvd3MoKSkge1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5taW5Sb3dDb3VudCkpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDw9IDAgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNldFJvd0NvdW50ID0gMDtcclxuICAgICAgICBmb3IgKHZhciByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IHJvd0luZGV4KyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Nbcm93SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIXJvdy5pc0VtcHR5KSBzZXRSb3dDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2V0Um93Q291bnQgPCB0aGlzLm1pblJvd0NvdW50O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4oKTtcclxuICAgICAgICBpZiAodGhpcy5yb3dDb3VudCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIGkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KHZhbHVlOiBhbnkpOiBNYXRyaXhEeW5hbWljUm93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHluYW1pY1Jvd01vZGVsKHRoaXMucm93Q291bnRlciArKywgdGhpcywgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlVmFsdWVDaGFuZ2VkKHZhbDogYW55KSB7XHJcbiAgICAgICAgdmFyIG5ld1Jvd0NvdW50ID0gdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggOiAwO1xyXG4gICAgICAgIGlmIChuZXdSb3dDb3VudCA8PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlID0gbmV3Um93Q291bnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKGN1clZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjdXJWYWx1ZTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIHIgPSBbXTtcclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IHRoaXMucm93Q291bnQpIHJlc3VsdC5zcGxpY2UodGhpcy5yb3dDb3VudCAtIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSByZXN1bHQubGVuZ3RoOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShuZXdWYWx1ZTogYW55LCByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYW55IHtcclxuICAgICAgICB2YXIgaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV3VmFsdWVbaV0pLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0VtcHR5ID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCBxdWVzdGlvblZhbHVlLmxlbmd0aCA/IHF1ZXN0aW9uVmFsdWVbaW5kZXhdIDogbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRSb3dWYWx1ZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBxdWVzdGlvblZhbHVlOiBhbnksIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSb3dWYWx1ZUJ5SW5kZXgocXVlc3Rpb25WYWx1ZSwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5pbmRleE9mKHJvdykpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHluYW1pY1wiLCBbeyBuYW1lOiBcInJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAyIH0sIHsgbmFtZTogXCJtaW5Sb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJhZGRSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NBZGRSb3dUZXh0XCIgfSwgeyBuYW1lOiBcInJlbW92ZVJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlbW92ZVJvd1RleHRcIiB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTsgfSwgXCJtYXRyaXhkcm9wZG93bmJhc2VcIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7U3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lcn0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtBbnN3ZXJSZXF1aXJlZEVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEge1xyXG4gICAgZ2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xyXG4gICAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTtcclxuICAgIGdldElzUmVxdWlyZWRUZXh0KCk6IHN0cmluZztcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVZhbGlkYXRvck93bmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGRhdGE6IElNdWx0aXBsZVRleHREYXRhO1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiA9IG5ldyBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0aXRlbVwiO1xyXG4gICAgfVxyXG4gICAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnRpdGxlO1xyXG4gICAgICAgIGlmKHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmRhdGEpIHJlcyA9IHRoaXMuZGF0YS5nZXRJc1JlcXVpcmVkVGV4dCgpICsgJyAnICsgcmVzO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5uYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIH1cclxuICAgIC8vSVZhbGlkYXRvck93bmVyXHJcbiAgICBwdWJsaWMgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGU7IH1cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhIHtcclxuICAgIHByaXZhdGUgY29sQ291bnRWYWx1ZTogbnVtYmVyID0gMTtcclxuICAgIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGl0ZW1TaXplOiBudW1iZXIgPSAyNTtcclxuICAgIHByaXZhdGUgaXRlbXNWYWx1ZXM6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4gPSBuZXcgQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPigpO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtdWx0aXBsZXRleHRcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiB7IHJldHVybiB0aGlzLml0ZW1zVmFsdWVzOyB9XHJcbiAgICBwdWJsaWMgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVRleHRJdGVtKG5hbWUsIHRpdGxlKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldEl0ZW1zT3ZlcnJpZGRlbk1ldGhvZHMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZXMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXREYXRhKHNlbGYpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcy5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTXVsdGlwbGVUZXh0SXRlbU1vZGVsW10pOiBNdWx0aXBsZVRleHRJdGVtTW9kZWxbXSB7XHJcbiAgICAgICAgICAgIGlmKCFzdGFydCkgc3RhcnQgPSAwO1xyXG4gICAgICAgICAgICBpZighZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChzZWxmLml0ZW1zVmFsdWVzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgICAgIGlmKCFpdGVtcykgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbaV0uc2V0RGF0YShzZWxmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pdGVtc1tpXS52YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29sQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29sQ291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcclxuICAgICAgICB2YXIgcm93cyA9IFtdO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ucHVzaChpdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3dzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMub25JdGVtVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChuYW1lLCB0aXRsZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25JdGVtVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgKHRoaXMuaXRlbXNbaV0ubmFtZSBpbiB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbVZhbHVlID0gdGhpcy52YWx1ZVt0aGlzLml0ZW1zW2ldLm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcnVuVmFsaWRhdG9ycygpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgdmFyIGVycm9yID0gc3VwZXIucnVuVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGlmIChlcnJvciAhPSBudWxsKSByZXR1cm4gZXJyb3I7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFZhbGlkYXRvclJ1bm5lcigpLnJ1bih0aGlzLml0ZW1zW2ldKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjayk7XHJcbiAgICAgICAgaWYoIXJlcykgcmVzID0gdGhpcy5oYXNFcnJvckluSXRlbXMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc0Vycm9ySW5JdGVtcyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZihpdGVtLmlzUmVxdWlyZWQgJiYgIWl0ZW0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IoKSk7XHJcbiAgICAgICAgICAgICAgICBpZihmaXJlQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lNdWx0aXBsZVRleHREYXRhXHJcbiAgICBnZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlW25hbWVdO1xyXG4gICAgfVxyXG4gICAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdWYWx1ZVtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBnZXRJc1JlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dCA6IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtdWx0aXBsZXRleHRpdGVtXCIsIFtcIm5hbWVcIiwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSwgXHJcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSwgeyBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLCBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiIH1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibXVsdGlwbGV0ZXh0XCIsIFt7IG5hbWU6IFwiIWl0ZW1zOnRleHRpdGVtc1wiLCBjbGFzc05hbWU6IFwibXVsdGlwbGV0ZXh0aXRlbVwiIH0sXHJcbiAgICAgICAgeyBuYW1lOiBcIml0ZW1TaXplOm51bWJlclwiLCBkZWZhdWx0OiAyNSB9LCB7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFsxLCAyLCAzLCA0XSB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTsgcS5hZGRJdGVtKFwidGV4dDFcIik7IHEuYWRkSXRlbShcInRleHQyXCIpOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwicmFkaW9ncm91cFwiO1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0cnVlOyB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyYWRpb2dyb3VwXCIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwoXCJcIik7IH0sIFwiY2hlY2tib3hiYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxO30pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwiaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBzdGF0aWMgZGVmYXVsdFJhdGVWYWx1ZXM6IEl0ZW1WYWx1ZVtdID0gW107XHJcbiAgICBwcml2YXRlIHJhdGVzOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHJpdmF0ZSBsb2NNaW5SYXRlRGVzY3JpcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICByYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLnJhdGVzID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIGdldCByYXRlVmFsdWVzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yYXRlczsgfVxyXG4gICAgc2V0IHJhdGVWYWx1ZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLnJhdGVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIGdldCB2aXNpYmxlUmF0ZVZhbHVlcygpOiBJdGVtVmFsdWVbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5yYXRlVmFsdWVzO1xyXG4gICAgICAgIHJldHVybiBRdWVzdGlvblJhdGluZ01vZGVsLmRlZmF1bHRSYXRlVmFsdWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJyYXRpbmdcIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1pblJhdGVEZXNjcmlwdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb24udGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IG1pblJhdGVEZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY01pblJhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7cmV0dXJuIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWU7fTtcclxuICAgIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvbi50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb24udGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZTt9O1xyXG59XHJcbkl0ZW1WYWx1ZS5zZXREYXRhKFF1ZXN0aW9uUmF0aW5nTW9kZWwuZGVmYXVsdFJhdGVWYWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSk7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyYXRpbmdcIiwgW1wiaGFzQ29tbWVudDpib29sZWFuXCIsIHsgbmFtZTogXCJyYXRlVmFsdWVzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmoucmF0ZVZhbHVlcyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmoucmF0ZVZhbHVlcyA9IHZhbHVlOyB9fSxcclxuICAgIHtuYW1lOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwibWluaW51bVJhdGVEZXNjcmlwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCJ9LCBcclxuICAgIHtuYW1lOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwibWF4aW11bVJhdGVEZXNjcmlwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWF4UmF0ZURlc2NyaXB0aW9uXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3JhdGluZy50cyIsImltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwdWJsaWMgc2l6ZTogbnVtYmVyID0gMjU7XHJcbiAgICBwdWJsaWMgaW5wdXRUeXBlOiBzdHJpbmcgPSBcInRleHRcIjtcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCI7XHJcbiAgICB9XHJcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4geyAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09IFwiXCI7IH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge3JldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZVR5cGUobmV3VmFsdWUpO1xyXG4gICAgICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT0gXCJudW1iZXJcIiB8fCB0aGlzLmlucHV0VHlwZSA9PSBcInJhbmdlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNOdW1iZXIobmV3VmFsdWUpID8gcGFyc2VGbG9hdChuZXdWYWx1ZSkgOiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtYmVyKHZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgJiYgaXNGaW5pdGUodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidGV4dFwiLCBbeyBuYW1lOiBcImlucHV0VHlwZVwiLCBkZWZhdWx0OiBcInRleHRcIiwgY2hvaWNlczogW1wiY29sb3JcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiLCBcImVtYWlsXCIsIFwibW9udGhcIiwgXCJudW1iZXJcIiwgXCJwYXNzd29yZFwiLCBcInJhbmdlXCIsIFwidGVsXCIsIFwidGV4dFwiLCBcInRpbWVcIiwgXCJ1cmxcIiwgXCJ3ZWVrXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwic2l6ZTpudW1iZXJcIiwgZGVmYXVsdDogMjUgfSwge25hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGNob2ljZXNDaGFuZ2VkOiAwIH07XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uY2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCA9IHNlbGYuc3RhdGUuY2hvaWNlc0NoYW5nZWQgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbDsgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmdldEl0ZW1zKCkgfVxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcIml0ZW1cIiArIGk7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSwgaSA9PSAwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogYW55LCBpc0ZpcnN0OiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0ga2V5PXtrZXl9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMuY3NzfSByb290Q3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0gaXRlbT17aXRlbX0gdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX0gaXNGaXJzdD17aXNGaXJzdH0gLz47XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uOiBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XHJcbiAgICBwcm90ZWN0ZWQgaXRlbTogSXRlbVZhbHVlO1xyXG4gICAgcHJvdGVjdGVkIHRleHRTdHlsZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGlzRmlyc3Q6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5pdGVtID0gcHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcHJvcHMucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy50ZXh0U3R5bGUgPSBwcm9wcy50ZXh0U3R5bGU7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gcHJvcHMuaXNGaXJzdDtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLml0ZW0gPSBuZXh0UHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLnRleHRTdHlsZSA9IG5leHRQcm9wcy50ZXh0U3R5bGU7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLmlzRmlyc3QgPSBuZXh0UHJvcHMuaXNGaXJzdDtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbmRleCA9IG5ld1ZhbHVlLmluZGV4T2YodGhpcy5pdGVtLnZhbHVlKTtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLml0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW0gfHwgIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID4gMCA/ICgxMDAgLyB0aGlzLnF1ZXN0aW9uLmNvbENvdW50KSArIFwiJVwiIDogXCJcIjtcclxuICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyBcIjVweFwiIDogXCIwcHhcIjtcclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB7IG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodCB9O1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGgpIHtcclxuICAgICAgICAgICAgZGl2U3R5bGVbXCJ3aWR0aFwiXSA9IGl0ZW1XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9ICh0aGlzLnF1ZXN0aW9uLnZhbHVlICYmIHRoaXMucXVlc3Rpb24udmFsdWUuaW5kZXhPZih0aGlzLml0ZW0udmFsdWUpID4gLTEpIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBvdGhlckl0ZW0gPSAodGhpcy5pdGVtLnZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSAmJiBpc0NoZWNrZWQpID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChpc0NoZWNrZWQsIGRpdlN0eWxlLCBvdGhlckl0ZW0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7IHJldHVybiB7IG1hcmdpblJpZ2h0OiBcIjNweFwiIH07IH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJDaGVja2JveChpc0NoZWNrZWQ6IGJvb2xlYW4sIGRpdlN0eWxlOiBhbnksIG90aGVySXRlbTogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pc0ZpcnN0ID8gdGhpcy5xdWVzdGlvbi5pbnB1dElkIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtfSBzdHlsZT17ZGl2U3R5bGV9PlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtfT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWR9IHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9IGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNoZWNrZWQ9e2lzQ2hlY2tlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RoaXMuaXRlbS50ZXh0fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAge290aGVySXRlbX1cclxuICAgICAgICAgICAgPC9kaXY+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mub3RoZXJ9PjxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9ICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9Lz48L2Rpdj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY2hlY2tib3gudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25Ecm9wZG93bk1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uY29tbWVudFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge2Jyb3dzZXIsIGNvbXBhcmVWZXJzaW9uc30gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSwgY2hvaWNlc0NoYW5nZWQ6IDAgfTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmNob2ljZXNDaGFuZ2VkID0gc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT09IHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbDtcclxuICAgICAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoKTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgIHtzZWxlY3R9XHJcbiAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdCgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSkgIHJldHVybiAoPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRyb2x9Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2Pik7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9uID0gPG9wdGlvbiBrZXk9e2tleX0gdmFsdWU9e2l0ZW0udmFsdWV9PntpdGVtLnRleHR9PC9vcHRpb24+O1xyXG4gICAgICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvbkNoYW5nZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGJyb3dzZXIubXNpZSB8fCAoYnJvd3Nlci5maXJlZm94ICYmIGNvbXBhcmVWZXJzaW9ucyhicm93c2VyLnZlcnNpb24sICc1MScpIDwgMCkpIHtcclxuICAgICAgICAgICAgb25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c2VsZWN0IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5jc3MuY29udHJvbH0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gb25JbnB1dD17dGhpcy5oYW5kbGVPbkNoYW5nZX0+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj5cclxuICAgICAgICAgICAge29wdGlvbnN9XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luVG9wOiBcIjNweFwiIH07XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3N0eWxlfT48U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0vPjwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmRyb3Bkb3duLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmlsZU1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fZmlsZVwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRmlsZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyBmaWxlTG9hZGVkOiAwIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25GaWxlTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25GaWxlTW9kZWw7IH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50OyBcclxuICAgICAgICBpZiAoIXdpbmRvd1tcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcclxuICAgICAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5sb2FkRmlsZShzcmMuZmlsZXNbMF0pO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlTG9hZGVkOiB0aGlzLnN0YXRlLmZpbGVMb2FkZWQgKyAxIH0pO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBpbWcgPSB0aGlzLnJlbmRlckltYWdlKCk7XHJcbiAgICAgICAgdmFyIGZpbGVJbnB1dCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzcGxheU1vZGUpIHtcclxuICAgICAgICAgICAgZmlsZUlucHV0ID0gPGlucHV0IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IHR5cGU9XCJmaWxlXCIgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9Lz47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICB7ZmlsZUlucHV0fVxyXG4gICAgICAgICAgICAgICAge2ltZ31cclxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckltYWdlKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gKDxkaXY+ICA8aW1nIHNyYz17dGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWV9IGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH0gd2lkdGg9e3RoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aH0gLz48L2Rpdj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xyXG59KTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25maWxlLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uSHRtbE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25faHRtbFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSHRtbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25IdG1sTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25IdG1sTW9kZWw7IH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLmh0bWwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5wcm9jZXNzZWRIdG1sIH07XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+ICk7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25IdG1sLCBwcm9wcyk7XHJcbn0pO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmh0bWwudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhcIjtcclxuaW1wb3J0IHtNYXRyaXhSb3dNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4TW9kZWw7IH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgZmlyc3RUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0aD48L3RoPiA6IG51bGw7XHJcbiAgICAgICAgdmFyIGhlYWRlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24uY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5xdWVzdGlvbi5jb2x1bW5zW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCg8dGgga2V5PXtrZXl9Pntjb2x1bW4udGV4dH08L3RoPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwicm93XCIgKyBpO1xyXG4gICAgICAgICAgICByb3dzLnB1c2goPFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLmNzc30gcm9vdENzcz17dGhpcy5yb290Q3NzfSBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9IHJvdz17cm93fSBpc0ZpcnN0PXtpID09IDB9IC8+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Zmlyc3RUSH1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhNb2RlbDtcclxuICAgIHByaXZhdGUgcm93OiBNYXRyaXhSb3dNb2RlbDtcclxuICAgIHByaXZhdGUgaXNGaXJzdDogYm9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMucm93ID0gcHJvcHMucm93O1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IHByb3BzLmlzRmlyc3Q7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5yb3cudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLnJvdyA9IG5leHRQcm9wcy5yb3c7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gbmV4dFByb3BzLmlzRmlyc3Q7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3cpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBmaXJzdFREID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkPnt0aGlzLnJvdy50ZXh0fTwvdGQ+IDogbnVsbDtcclxuICAgICAgICB2YXIgdGRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24uY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwidmFsdWVcIiArIGk7XHJcbiAgICAgICAgICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dElkID0gdGhpcy5pc0ZpcnN0ICYmIGkgPT0gMCA/IHRoaXMucXVlc3Rpb24uaW5wdXRJZCA6IG51bGw7XHJcbiAgICAgICAgICAgIHZhciB0ZCA9IDx0ZCBrZXk9e2tleX0+PGlucHV0IGlkPXtpbnB1dElkfSB0eXBlPVwicmFkaW9cIiBuYW1lPXt0aGlzLnJvdy5mdWxsTmFtZX0gdmFsdWU9e2NvbHVtbi52YWx1ZX0gZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX0gY2hlY2tlZD17aXNDaGVja2VkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0vPjwvdGQ+O1xyXG4gICAgICAgICAgICB0ZHMucHVzaCh0ZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPHRyPntmaXJzdFREfXt0ZHN9PC90cj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXgudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmltcG9ydCB7SVN1cnZleUNyZWF0b3IsIFN1cnZleVF1ZXN0aW9uRXJyb3JzfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25Sb3dNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25DZWxsfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbDsgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBoZWFkZXJzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24uY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xyXG4gICAgICAgICAgICB2YXIgbWluV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmdldENvbHVtbldpZHRoKGNvbHVtbik7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW5TdHlsZSA9IG1pbldpZHRoID8geyBtaW5XaWR0aDogbWluV2lkdGggfSA6IHt9O1xyXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goPHRoIGtleT17a2V5fSBzdHlsZT17Y29sdW1uU3R5bGV9Pnt0aGlzLnF1ZXN0aW9uLmdldENvbHVtblRpdGxlKGNvbHVtbikgfTwvdGg+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xyXG4gICAgICAgICAgICByb3dzLnB1c2goPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25Sb3cgcm93PXtyb3d9IGNzcz17dGhpcy5jc3N9IHJvb3RDc3M9e3RoaXMucm9vdENzc30gaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8geyBvdmVyZmxvd1g6ICdzY3JvbGwnfSA6IHt9O1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgIHN0eWxlPXtkaXZTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93blJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlIHtcclxuICAgIHByaXZhdGUgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93ID0gbmV4dFByb3BzLnJvdztcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvdykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLnJvdy5jZWxsc1tpXTtcclxuICAgICAgICAgICAgdmFyIGVycm9ycyA9IDxTdXJ2ZXlRdWVzdGlvbkVycm9ycyBxdWVzdGlvbj17Y2VsbC5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gLz5cclxuICAgICAgICAgICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNlbGwpO1xyXG4gICAgICAgICAgICB0ZHMucHVzaCg8dGQga2V5PXtcInJvd1wiICsgaX0+e2Vycm9yc317c2VsZWN0fTwvdGQ+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8dHI+PHRkPnt0aGlzLnJvdy50ZXh0fTwvdGQ+e3Rkc308L3RyPik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChjZWxsLnF1ZXN0aW9uKTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGRyb3Bkb3duLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmVsZW1lbnRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FcnJvcnN9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcclxuaW1wb3J0IHtNYXRyaXhEeW5hbWljUm93TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25DZWxsfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhuZXh0UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHJvd0NvdW50ZXI6IDAgfTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJvd0NvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnJvd0NvdW50ZXIgPSBzZWxmLnN0YXRlLnJvd0NvdW50ZXIgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPblJvd0FkZENsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5hZGRSb3coKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaGVhZGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLmNvbHVtbnNbaV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcImNvbHVtblwiICsgaTtcclxuICAgICAgICAgICAgdmFyIG1pbldpZHRoID0gdGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5XaWR0aChjb2x1bW4pO1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uU3R5bGUgPSBtaW5XaWR0aCA/IHsgbWluV2lkdGg6IG1pbldpZHRoIH0gOiB7fTtcclxuICAgICAgICAgICAgaGVhZGVycy5wdXNoKDx0aCBrZXk9e2tleX0gc3R5bGU9e2NvbHVtblN0eWxlfT57dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5UaXRsZShjb2x1bW4pIH08L3RoPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgcm93cy5wdXNoKDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSb3cgcm93PXtyb3d9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBpbmRleD17aX0gY3NzPXt0aGlzLmNzc30gcm9vdENzcz17dGhpcy5yb290Q3NzfSBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gLz4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwgPyB7IG92ZXJmbG93WDogJ3Njcm9sbCcgfSA6IHt9O1xyXG4gICAgICAgIHZhciBidG5EZWxldGVURCA9ICF0aGlzLmlzRGlzcGxheU1vZGUgPyA8dGg+PC90aD4gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICBzdHlsZT17ZGl2U3R5bGV9PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2J0bkRlbGV0ZVREfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8aW5wdXQgY2xhc3NOYW1lPXt0aGlzLmNzcy5idXR0b259IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2t9IHZhbHVlPXt0aGlzLnF1ZXN0aW9uLmFkZFJvd1RleHR9IC8+O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUm93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSByb3c6IE1hdHJpeER5bmFtaWNSb3dNb2RlbDtcclxuICAgIHByaXZhdGUgcXVlc3Rpb246IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xyXG4gICAgcHJpdmF0ZSBpbmRleDogbnVtYmVyO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93ID0gbmV4dFByb3BzLnJvdztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbmV4dFByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBuZXh0UHJvcHMuaW5kZXg7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPblJvd1JlbW92ZUNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3codGhpcy5pbmRleCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3cpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB0ZHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxsID0gdGhpcy5yb3cuY2VsbHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlcnJvcnMgPSA8U3VydmV5UXVlc3Rpb25FcnJvcnMgcXVlc3Rpb249e2NlbGwucXVlc3Rpb259IGNzcz17dGhpcy5yb290Q3NzfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+O1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJRdWVzdGlvbihjZWxsKTtcclxuICAgICAgICAgICAgdGRzLnB1c2goPHRkIGtleT17XCJyb3dcIiArIGl9PntlcnJvcnN9e3NlbGVjdH08L3RkPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0Rpc3BsYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciByZW1vdmVCdXR0b24gPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xyXG4gICAgICAgICAgICB0ZHMucHVzaCg8dGQga2V5PXtcInJvd1wiICsgdGhpcy5yb3cuY2VsbHMubGVuZ3RoICsgMX0+e3JlbW92ZUJ1dHRvbn08L3RkPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPHRyPnt0ZHN9PC90cj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChjZWxsLnF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8aW5wdXQgY2xhc3NOYW1lPXt0aGlzLmNzcy5idXR0b259IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9IHZhbHVlPXt0aGlzLnF1ZXN0aW9uLnJlbW92ZVJvd1RleHR9IC8+O1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGR5bmFtaWMudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtNdWx0aXBsZVRleHRJdGVtTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsOyB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KFwiaXRlbVwiICsgaSwgdGFibGVSb3dzW2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUm93KGtleTogc3RyaW5nLCBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPikge1xyXG4gICAgICAgIHZhciB0ZHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIHRkcy5wdXNoKDx0ZCBrZXk9e1wibGFiZWxcIiArIGl9PjxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3MuaXRlbVRpdGxlfT57aXRlbS5mdWxsVGl0bGV9PC9zcGFuPjwvdGQ+KTtcclxuICAgICAgICAgICAgdGRzLnB1c2goPHRkIGtleT17XCJ2YWx1ZVwiICsgaX0+e3RoaXMucmVuZGVySXRlbShpdGVtLCBpID09IDApfTwvdGQ+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDx0ciBrZXk9e2tleX0+e3Rkc308L3RyPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJJdGVtKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgaXNGaXJzdDogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgaW5wdXRJZCA9IGlzRmlyc3QgPyB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHRJdGVtIGl0ZW09e2l0ZW19IGNzcz17dGhpcy5jc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0gaW5wdXRJZD17aW5wdXRJZH0gLz47XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZSB7XHJcbiAgICBwcml2YXRlIGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbDtcclxuICAgIHByaXZhdGUgaW5wdXRJZDogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLml0ZW0gPSBwcm9wcy5pdGVtO1xyXG4gICAgICAgIHRoaXMuaW5wdXRJZCA9IHByb3BzLmlucHV0SWQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSB8fCAnJyB9O1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkJsdXIgPSB0aGlzLmhhbmRsZU9uQmx1ci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQmx1cihldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXRlbS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLml0ZW0gPSBuZXh0UHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3R5bGUgPSB7IGZsb2F0OiBcImxlZnRcIiB9O1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpIHJldHVybiAoPGRpdiBpZD17dGhpcy5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzLml0ZW1WYWx1ZX0gc3R5bGU9e3N0eWxlfT57dGhpcy5pdGVtLnZhbHVlfTwvZGl2Pik7XHJcbiAgICAgICAgcmV0dXJuICg8aW5wdXQgaWQ9e3RoaXMuaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtVmFsdWV9IHN0eWxlPXtzdHlsZX0gdHlwZT1cInRleHRcIiB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gcGxhY2Vob2xkZXI9e3RoaXMuaXRlbS5wbGFjZUhvbGRlcn0gb25CbHVyPXt0aGlzLmhhbmRsZU9uQmx1cn0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgbWFpbkNsYXNzTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJcIjsgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tdWx0aXBsZXRleHQudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmNvbW1lbnRcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgY2hvaWNlc0NoYW5nZWQ6IDAgfTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmNob2ljZXNDaGFuZ2VkID0gc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbDsgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRJdGVtcygpIH1cclxuICAgICAgICAgICAgPC9kaXY+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGkgPT0gMCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkgeyByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiIH07IH1cclxuICAgIHByaXZhdGUgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogSXRlbVZhbHVlLCBpc0ZpcnN0OiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID4gMCA/ICgxMDAgLyB0aGlzLnF1ZXN0aW9uLmNvbENvdW50KSArIFwiJVwiIDogXCJcIjtcclxuICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyBcIjVweFwiIDogXCIwcHhcIjtcclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB7IG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodCB9O1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGgpIHtcclxuICAgICAgICAgICAgZGl2U3R5bGVbXCJ3aWR0aFwiXSA9IGl0ZW1XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgICB2YXIgb3RoZXJJdGVtID0gKGlzQ2hlY2tlZCAmJiBpdGVtLnZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSkgPyB0aGlzLnJlbmRlck90aGVyKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclJhZGlvKGtleSwgaXRlbSwgaXNDaGVja2VkLCBkaXZTdHlsZSwgb3RoZXJJdGVtLCBpc0ZpcnN0KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJSYWRpbyhrZXk6IHN0cmluZywgaXRlbTogSXRlbVZhbHVlLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIGRpdlN0eWxlOiBhbnksIG90aGVySXRlbTogSlNYLkVsZW1lbnQsIGlzRmlyc3Q6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlkID0gaXNGaXJzdCA/IHRoaXMucXVlc3Rpb24uaW5wdXRJZCA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMuY3NzLml0ZW19IHN0eWxlPXtkaXZTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5sYWJlbH0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9e2lkfSB0eXBlPVwicmFkaW9cIiBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWUgKyBcIl9cIiArIHRoaXMucXVlc3Rpb25CYXNlLmlkfSBjaGVja2VkPXtpc0NoZWNrZWR9IHZhbHVlPXtpdGVtLnZhbHVlfSBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17dGhpcy50ZXh0U3R5bGV9PntpdGVtLnRleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICB7b3RoZXJJdGVtfVxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlck90aGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5vdGhlcn0+PFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMucm9vdENzc30gaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfS8+PC9kaXY+KTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25yYWRpb2dyb3VwLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYXRpbmdNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmF0aW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYXRpbmdNb2RlbDsgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdmFsdWVzID0gW107XHJcbiAgICAgICAgdmFyIG1pblRleHQgPSB0aGlzLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvbiA/IHRoaXMucXVlc3Rpb24ubWluUmF0ZURlc2NyaXB0aW9uICsgXCIgXCIgOiBcIlwiO1xyXG4gICAgICAgIHZhciBtYXhUZXh0ID0gdGhpcy5xdWVzdGlvbi5tYXhSYXRlRGVzY3JpcHRpb24gPyBcIiBcIiArIHRoaXMucXVlc3Rpb24ubWF4UmF0ZURlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1pblRleHRWYWx1ZSA9IGkgPT0gMCA/IG1pblRleHQgOiBcIlwiO1xyXG4gICAgICAgICAgICB2YXIgbWF4VGV4dFZhbHVlID0gaSA9PSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSYXRlVmFsdWVzLmxlbmd0aCAtIDEgPyBtYXhUZXh0IDogXCJcIjtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5yZW5kZXJJdGVtKFwidmFsdWVcIiArIGksIHRoaXMucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXNbaV0sIG1pblRleHRWYWx1ZSwgbWF4VGV4dFZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5oYXNPdGhlciA/IHRoaXMucmVuZGVyT3RoZXIoKSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAge3ZhbHVlc31cclxuICAgICAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oa2V5OiBzdHJpbmcsIGl0ZW06IEl0ZW1WYWx1ZSwgbWluVGV4dDogc3RyaW5nLCBtYXhUZXh0OiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jc3MuaXRlbTtcclxuICAgICAgICBpZiAoaXNDaGVja2VkKSBjbGFzc05hbWUgKz0gXCIgYWN0aXZlXCI7XHJcbiAgICAgICAgdmFyIG1pbiA9IG1pblRleHQgPyA8c3Bhbj57bWluVGV4dH08L3NwYW4+IDogbnVsbDtcclxuICAgICAgICB2YXIgbWF4ID0gbWF4VGV4dCA/IDxzcGFuPnttYXhUZXh0fTwvc3Bhbj4gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIHN0eWxlPXt7IGRpc3BsYXk6IFwibm9uZVwiIH19IG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX0gdmFsdWU9e2l0ZW0udmFsdWV9IGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgIHttaW59XHJcbiAgICAgICAgICAgIDxzcGFuPntpdGVtLnRleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICB7bWF4fVxyXG4gICAgICAgICAgICA8L2xhYmVsPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mub3RoZXJ9PjxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0vPjwvZGl2Pik7XHJcbiAgICB9XHJcbn1cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nLCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9ucmF0aW5nLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uVGV4dE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fdGV4dFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25CbHVyID0gdGhpcy5oYW5kbGVPbkJsdXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25UZXh0TW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25UZXh0TW9kZWw7IH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkJsdXIoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCAnJyB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKVxyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzc30+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+KVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzfSB0eXBlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZX0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IHNpemU9e3RoaXMucXVlc3Rpb24uc2l6ZX0gcGxhY2Vob2xkZXI9e3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJ9IG9uQmx1cj17dGhpcy5oYW5kbGVPbkJsdXJ9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfSAvPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25UZXh0LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9udGV4dC50c3giLCJpbXBvcnQge0Jhc2V9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93TW9kZWwgZXh0ZW5kcyBCYXNlICB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1cnZleUVsZW1lbnROYW1lID0gXCJ3aW5kb3dTdXJ2ZXlKU1wiO1xyXG4gICAgc3VydmV5VmFsdWU6IFN1cnZleU1vZGVsO1xyXG4gICAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBpc1Nob3dpbmdWYWx1ZTogYm9vbGVhbjtcclxuICAgIGlzRXhwYW5kZWRWYWx1ZTogYm9vbGVhbjtcclxuICAgIHRpdGxlVmFsdWU6IHN0cmluZztcclxuICAgIHRlbXBsYXRlVmFsdWU6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSB0aGlzLmNyZWF0ZVN1cnZleShqc29uT2JqKTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKSA6IHN0cmluZyB7IHJldHVybiBcIndpbmRvd1wiIH1cclxuICAgIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNTaG93aW5nKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1Nob3dpbmdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc0V4cGFuZGVkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGVWYWx1ZSA/IHRoaXMudGl0bGVWYWx1ZSA6IHRoaXMuc3VydmV5LnRpdGxlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy50aXRsZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBleHBhbmQoKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjb2xsYXBzZSgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3VydmV5TW9kZWwoanNvbk9iailcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5V2luZG93LnRzIiwiaW1wb3J0IHtCYXNlLCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xyXG4gICAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcclxuICAgIHN0YXRpYyBnZXQgb3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGlmIChUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgICAgIFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuICF2YWx1ZTsgfSxcclxuICAgICAgICAgICAgbm90ZW1wdHk6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gISghdmFsdWUpOyB9LFxyXG4gICAgICAgICAgICBlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBub3RlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtcImluZGV4T2ZcIl0gJiYgdmFsdWUuaW5kZXhPZihleHBlY3RlZFZhbHVlKSA+IC0xOyB9LFxyXG4gICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiAhdmFsdWUgfHwgIXZhbHVlW1wiaW5kZXhPZlwiXSB8fCB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID09IC0xOyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTsgfSxcclxuICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7IH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcFZhbHVlOiBzdHJpbmcgPSBcImVxdWFsXCI7XHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm9wVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFUcmlnZ2VyLm9wZXJhdG9yc1t2YWx1ZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLm9wVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjaGVjayh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKFRyaWdnZXIub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHZhbHVlLCB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU3VjY2VzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlUcmlnZ2VyT3duZXIge1xyXG4gICAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcclxuICAgIGRvQ29tcGxldGUoKTtcclxuICAgIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBvd25lcjogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldE93bmVyKG93bmVyOiBJU3VydmV5VHJpZ2dlck93bmVyKSB7XHJcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiBmYWxzZTsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclZpc2libGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidmlzaWJsZXRyaWdnZXJcIjsgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1TdWNjZXNzKTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1GYWlsdXJlKTsgfVxyXG4gICAgcHJpdmF0ZSBvblRyaWdnZXIoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMub3duZXIuZ2V0T2JqZWN0cyh0aGlzLnBhZ2VzLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZ1bmMob2JqZWN0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7IGl0ZW0udmlzaWJsZSA9IHRydWU7IH1cclxuICAgIHByb3RlY3RlZCBvbkl0ZW1GYWlsdXJlKGl0ZW06IGFueSkgeyBpdGVtLnZpc2libGUgPSBmYWxzZTsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJjb21wbGV0ZXRyaWdnZXJcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkgeyBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5kb0NvbXBsZXRlKCk7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNldFZhbHVlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XHJcbiAgICBwdWJsaWMgc2V0VG9OYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2V0VmFsdWU6IGFueTtcclxuICAgIHB1YmxpYyBpc1ZhcmlhYmxlOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInNldHZhbHVldHJpZ2dlclwiOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5zZXRWYWx1ZSwgdGhpcy5pc1ZhcmlhYmxlKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRyaWdnZXJcIiwgW1wib3BlcmF0b3JcIiwgXCIhdmFsdWVcIl0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5dHJpZ2dlclwiLCBbXCIhbmFtZVwiXSwgbnVsbCwgXCJ0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidmlzaWJsZXRyaWdnZXJcIiwgW1wicGFnZXNcIiwgXCJxdWVzdGlvbnNcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjb21wbGV0ZXRyaWdnZXJcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUoKTsgfSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2V0dmFsdWV0cmlnZ2VyXCIsIFtcIiFzZXRUb05hbWVcIiwgXCJzZXRWYWx1ZVwiLCBcImlzVmFyaWFibGU6Ym9vbGVhblwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyaWdnZXIudHMiLCJ2YXIgd2Via2l0UmVnRXhwID0gLyh3ZWJraXQpWyBcXC9dKFtcXHcuXSspLyxcclxuICAgIGllUmVnRXhwID0gLyhtc2llKSAoXFxkezEsMn1cXC5cXGQpLyxcclxuICAgIGllMTFSZWdFeHAgPSAvKHRyaWRlbnQpLipydjooXFxkezEsMn1cXC5cXGQpLyxcclxuICAgIG1zRWRnZSA9IC8oZWRnZSlcXC8oKFxcZCspP1tcXHdcXC5dKykvLFxyXG4gICAgbW96aWxsYVJlZ0V4cCA9IC8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspKS87XHJcbnZhciBicm93c2VyRnJvbVVBID0gZnVuY3Rpb24odWEpIHtcclxuICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTtcclxuICAgIHZhciByZXN1bHQ6IHsgbXNpZT86IGJvb2xlYW4sIGZpcmVmb3g/OiBib29sZWFuLCB2ZXJzaW9uPzogc3RyaW5nIH0gPSB7fSxcclxuICAgICAgICBtYXRjaGVzID0gaWVSZWdFeHAuZXhlYyh1YSkgfHwgaWUxMVJlZ0V4cC5leGVjKHVhKSB8fCBtc0VkZ2UuZXhlYyh1YSkgfHwgdWEuaW5kZXhPZihcImNvbXBhdGlibGVcIikgPCAwICYmIG1vemlsbGFSZWdFeHAuZXhlYyh1YSkgfHwgd2Via2l0UmVnRXhwLmV4ZWModWEpIHx8IFtdLFxyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gbWF0Y2hlc1sxXSxcclxuICAgICAgICBicm93c2VyVmVyc2lvbiA9IG1hdGNoZXNbMl07XHJcbiAgICBpZiAoYnJvd3Nlck5hbWUgPT09IFwidHJpZGVudFwiIHx8IGJyb3dzZXJOYW1lID09PSBcImVkZ2VcIikge1xyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gXCJtc2llXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChicm93c2VyTmFtZSA9PT0gXCJtb3ppbGxhXCIpIHtcclxuICAgICAgICBicm93c2VyTmFtZSA9IFwiZmlyZWZveFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgcmVzdWx0W2Jyb3dzZXJOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSBicm93c2VyVmVyc2lvblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG5cclxubGV0IGJyb3dzZXIgPSBicm93c2VyRnJvbVVBKG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGEsIGIpIHtcclxuICAgIHZhciBpLCBkaWZmO1xyXG4gICAgdmFyIHJlZ0V4U3RyaXAwID0gLyhcXC4wKykrJC87XHJcbiAgICB2YXIgc2VnbWVudHNBID0gYS5yZXBsYWNlKHJlZ0V4U3RyaXAwLCAnJykuc3BsaXQoJy4nKTtcclxuICAgIHZhciBzZWdtZW50c0IgPSBiLnJlcGxhY2UocmVnRXhTdHJpcDAsICcnKS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIGwgPSBNYXRoLm1pbihzZWdtZW50c0EubGVuZ3RoLCBzZWdtZW50c0IubGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgZGlmZiA9IHBhcnNlSW50KHNlZ21lbnRzQVtpXSwgMTApIC0gcGFyc2VJbnQoc2VnbWVudHNCW2ldLCAxMCk7XHJcbiAgICAgICAgaWYgKGRpZmYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpZmY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gICAgYnJvd3NlcixcclxuICAgIGNvbXBhcmVWZXJzaW9uc1xyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy50cyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcclxuaW1wb3J0IHtTdXJ2ZXl9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQge1N1cnZleVdpbmRvd30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5V2luZG93XCI7XHJcbmltcG9ydCBqUXVlcnkgZnJvbSAnanF1ZXJ5JztcclxuXHJcbmpRdWVyeVtcImZuXCJdLmV4dGVuZCh7XHJcbiAgICBTdXJ2ZXk6IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgdGhpcy5lYWNoKFxyXG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIFJlYWN0RE9NLnJlbmRlcigoXHJcbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleSB7Li4ucHJvcHN9Lz5cclxuICAgICAgICAgICAgICAgICksIHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgU3VydmV5V2luZG93OiBmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgIHRoaXMuZWFjaChcclxuICAgICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBSZWFjdERPTS5yZW5kZXIoKFxyXG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlXaW5kb3cgey4uLnByb3BzfS8+XHJcbiAgICAgICAgICAgICAgICApLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0ICogZnJvbSBcIi4vcmVhY3RcIjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9qcXVlcnkudHN4Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/0.12.8/survey.jquery.min.js b/0.12.8/survey.jquery.min.js new file mode 100644 index 00000000..5c17a281 --- /dev/null +++ b/0.12.8/survey.jquery.min.js @@ -0,0 +1,6 @@ +/*! + * surveyjs - Survey JavaScript library v0.12.8 + * Copyright (c) 2015-2017 Devsoft Baltic OÜ - http://surveyjs.org/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define("Survey",["jquery"],t):"object"==typeof exports?exports.Survey=t(require("jquery")):e.Survey=t(e.jQuery)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=83)}([function(e,t,n){"use strict";function r(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}n.d(t,"a",function(){return i}),t.b=r,n.d(t,"c",function(){return o});var i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return i});var r={currentLocale:"",locales:{},getString:function(e){var t=this.currentLocale?this.locales[this.currentLocale]:i;return t&&t[e]||(t=i),t[e]},getLocales:function(){var e=[];e.push("");for(var t in this.locales)e.push(t);return e.sort(),e}},i={pagePrevText:"Previous",pageNextText:"Next",completeText:"Complete",otherItemText:"Other (describe)",progressText:"Page {0} of {1}",emptySurvey:"There is no visible page or question in the survey.",completingSurvey:"Thank you for completing the survey!",loadingSurvey:"Survey is loading...",optionsCaption:"Choose...",requiredError:"Please answer the question.",requiredInAllRowsError:"Please answer questions in all rows.",numericError:"The value should be numeric.",textMinLength:"Please enter at least {0} symbols.",textMaxLength:"Please enter less than {0} symbols.",textMinMaxLength:"Please enter more than {0} and less than {1} symbols.",minRowCountError:"Please fill in at least {0} rows.",minSelectError:"Please select at least {0} variants.",maxSelectError:"Please select no more than {0} variants.",numericMinMax:"The '{0}' should be equal or more than {1} and equal or less than {2}",numericMin:"The '{0}' should be equal or more than {1}",numericMax:"The '{0}' should be equal or less than {1}",invalidEmail:"Please enter a valid e-mail address.",urlRequestError:"The request returned error '{0}'. {1}",urlGetChoicesError:"The request returned empty data or the 'path' property is incorrect",exceedMaxSize:"The file size should not exceed {0}.",otherRequiredError:"Please enter the other value.",uploadingFile:"Your file is uploading. Please wait several seconds and try again.",addRow:"Add row",removeRow:"Remove",choices_firstItem:"first item",choices_secondItem:"second item",choices_thirdItem:"third item",matrix_column:"Column",matrix_row:"Row"};r.locales.en=i,String.prototype.format||(String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,function(t,n){return void 0!==e[n]?e[n]:t})})},function(e,t,n){"use strict";(function(e){function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){return null}function s(e){var t=e.nodeName,n=e.attributes;e.attributes={},t.defaultProps&&P(e.attributes,t.defaultProps),n&&P(e.attributes,n)}function a(e,t){var n=void 0,r=void 0,i=void 0;if(t){for(i in t)if(n=Z.test(i))break;if(n){r=e.attributes={};for(i in t)t.hasOwnProperty(i)&&(r[Z.test(i)?i.replace(/([A-Z0-9])/,"-$1").toLowerCase():i]=t[i])}}}function u(e,t,n){var r=t&&t._preactCompatRendered;r&&r.parentNode!==t&&(r=null),r||(r=t.children[0]);for(var i=t.childNodes.length;i--;)t.childNodes[i]!==r&&t.removeChild(t.childNodes[i]);var o=(0,F.render)(e,t,r);return t&&(t._preactCompatRendered=o),"function"==typeof n&&n(),o&&o._component||o.base}function l(e,t,n,r){var i=(0,F.h)(te,{context:e.context},t),o=u(i,n);return r&&r(o),o}function c(e){var t=e._preactCompatRendered;return!(!t||t.parentNode!==e)&&((0,F.render)((0,F.h)(o),e,t),!0)}function h(e){return g.bind(null,e)}function p(e,t){for(var n=t||0;n2?i-2:0),s=2;s-1&&(r=n.substring(o+1),n=n.substring(0,o)),n=this.getPropertyName(n);var s=new i(n);if(r&&(s.type=r),"object"==typeof t){if(t.type&&(s.type=t.type),t.default&&(s.defaultValue=t.default),!1===t.visible&&(s.visible=!1),t.isRequired&&this.makePropertyRequired(s.name),t.choices){var a="function"==typeof t.choices?t.choices:null,u="function"!=typeof t.choices?t.choices:null;s.setChoices(u,a)}if(t.onGetValue&&(s.onGetValue=t.onGetValue),t.onSetValue&&(s.onSetValue=t.onSetValue),t.serializationProperty){s.serializationProperty=t.serializationProperty;s.serializationProperty&&0==s.serializationProperty.indexOf("loc")&&(s.isLocalizable=!0)}t.isLocalizable&&(s.isLocalizable=t.isLocalizable),t.className&&(s.className=t.className),t.baseClassName&&(s.baseClassName=t.baseClassName),t.classNamePart&&(s.classNamePart=t.classNamePart),t.alternativeName&&(s.alternativeName=t.alternativeName)}return s}},e.prototype.getPropertyName=function(t){return 0==t.length||t[0]!=e.requiredSymbol?t:(t=t.slice(1),this.makePropertyRequired(t),t)},e.prototype.makePropertyRequired=function(e){this.requiredProperties||(this.requiredProperties=new Array),this.requiredProperties.push(e)},e}();o.requiredSymbol="!",o.typeSymbol=":";var s=function(){function e(){this.classes={},this.childrenClasses={},this.classProperties={},this.classRequiredProperties={}}return e.prototype.addClass=function(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null);var i=new o(e,t,n,r);if(this.classes[e]=i,r){this.childrenClasses[r]||(this.childrenClasses[r]=[]),this.childrenClasses[r].push(i)}return i},e.prototype.overrideClassCreatore=function(e,t){var n=this.findClass(e);n&&(n.creator=t)},e.prototype.getProperties=function(e){var t=this.classProperties[e];return t||(t=new Array,this.fillProperties(e,t),this.classProperties[e]=t),t},e.prototype.findProperty=function(e,t){for(var n=this.getProperties(e),r=0;r=0&&e.requiredProperties.splice(n,1))},e.prototype.emptyClassPropertiesHash=function(e){this.classProperties[e.name]=null;for(var t=this.getChildrenClasses(e.name),n=0;n0&&(r.description+=", "),r.description+=i[o].name;r.description+="."}return r}return r.b(t,e),t}(a),l=function(e){function t(t,n,r){var i=e.call(this,n,r)||this;i.baseClassName=t,i.type=n,i.message=r,i.description="The following types are available: ";for(var o=d.metaData.getChildrenClasses(t,!0),s=0;s0&&(i.description+=", "),i.description+="'"+o[s].name+"'";return i.description+=".",i}return r.b(t,e),t}(a),c=function(e){function t(t,n){var r=e.call(this,n,"missingtypeproperty","The property type is missing in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),h=function(e){function t(t,n){var r=e.call(this,n,"incorrecttypeproperty","The property type is incorrect in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),p=function(e){function t(t,n){var r=e.call(this,"requiredproperty","The property '"+t+"' is required in class '"+n+"'.")||this;return r.propertyName=t,r.className=n,r}return r.b(t,e),t}(a),d=function(){function e(){this.errors=new Array}return Object.defineProperty(e,"metaData",{get:function(){return e.metaDataValue},enumerable:!0,configurable:!0}),e.prototype.toJsonObject=function(e){return this.toJsonObjectCore(e,null)},e.prototype.toObject=function(t,n){if(t){var r=null;if(n.getType&&(r=e.metaData.getProperties(n.getType())),r)for(var i in t)if(i!=e.typePropertyName)if(i!=e.positionPropertyName){var o=this.findProperty(r,i);o?this.valueToObj(t[i],n,i,o):this.addNewError(new u(i.toString(),n.getType()),t)}else n[i]=t[i]}},e.prototype.toJsonObjectCore=function(t,n){if(!t.getType)return t;var r={};null==n||n.className||(r[e.typePropertyName]=n.getObjType(t.getType()));for(var i=e.metaData.getProperties(t.getType()),o=0;o0?i:null}else r=this.toJsonObjectCore(r,n);n.isDefaultValue(r)||(t[n.name]=r)}},e.prototype.valueToObj=function(e,t,n,r){if(null!=e){if(null!=r&&r.hasToUseSetValue)return void r.setValue(t,e,this);if(this.isValueArray(e))return void this.valueToArray(e,t,r.name,r);var i=this.createNewObj(e,r);i.newObj&&(this.toObject(e,i.newObj),e=i.newObj),i.error||(t[r.name]=e)}},e.prototype.isValueArray=function(e){return e&&Array.isArray(e)},e.prototype.createNewObj=function(t,n){var r={newObj:null,error:null},i=t[e.typePropertyName];return!i&&null!=n&&n.className&&(i=n.className),i=n.getClassName(i),r.newObj=i?e.metaData.createClass(i):null,r.error=this.checkNewObjectOnErrors(r.newObj,t,n,i),r},e.prototype.checkNewObjectOnErrors=function(t,n,r,i){var o=null;if(t){var s=e.metaData.getRequiredProperties(i);if(s)for(var a=0;a0&&t[n].splice(0,t[n].length);for(var i=0;i0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return this.errors.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"requiredText",{get:function(){return null!=this.survey&&this.isRequired?this.survey.requiredText:""},enumerable:!0,configurable:!0}),t.prototype.addError=function(e){this.errors.push(e),this.fireCallback(this.errorsChangedCallback)},t.prototype.checkForErrors=function(e){var t=this.errors?this.errors.length:0;if(this.errors=[],this.onCheckForErrors(this.errors),0==this.errors.length&&this.value){var n=this.runValidators();n&&this.errors.push(n)}if(this.survey&&0==this.errors.length){var n=this.survey.validateQuestion(this.name);n&&this.errors.push(n)}e&&(t!=this.errors.length||t>0)&&this.fireCallback(this.errorsChangedCallback)},t.prototype.onCheckForErrors=function(e){this.hasRequiredError()&&this.errors.push(new u.a)},t.prototype.hasRequiredError=function(){return this.isRequired&&this.isEmpty()},t.prototype.runValidators=function(){return(new l.a).run(this)},t.prototype.setNewValue=function(e){this.setNewValueInData(e),this.onValueChanged()},t.prototype.setNewValueInData=function(e){this.isValueChangedInSurvey||(e=this.valueToData(e),this.setValueCore(e))},t.prototype.getValueCore=function(){return null!=this.data?this.data.getValue(this.name):this.questionValue},t.prototype.setValueCore=function(e){null!=this.data?this.data.setValue(this.name,e):this.questionValue=e},t.prototype.valueFromData=function(e){return e},t.prototype.valueToData=function(e){return e},t.prototype.onValueChanged=function(){},t.prototype.setNewComment=function(e){null!=this.data?this.data.setComment(this.name,e):this.questionComment=e},t.prototype.onSurveyValueChanged=function(e){this.isValueChangedInSurvey=!0,this.value=this.valueFromData(e),this.fireCallback(this.commentChangedCallback),this.isValueChangedInSurvey=!1},t.prototype.getValidatorTitle=function(){return null},t}(o.a);i.a.metaData.addClass("question",[{name:"title:text",serializationProperty:"locTitle"},{name:"commentText",serializationProperty:"locCommentText"},"isRequired:boolean","readOnly:boolean",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"}],null,"questionbase")},function(e,t,n){"use strict";var r=n(7);n.d(t,"a",function(){return i});var i=function(){function e(e,t){void 0===t&&(t=null),this.locTextValue=new r.a(null),t&&(this.locText.text=t),this.value=e}return e.createArray=function(t){var n=[];return e.setupArray(n,t),n},e.setupArray=function(e,t){e.push=function(e){var n=Array.prototype.push.call(this,e);return e.locOwner=t,n},e.splice=function(e,n){for(var r=[],i=2;i-1&&(this.itemValue=n.slice(0,r),this.text=n.slice(r+1))}},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasText",{get:function(){return!!this.locText.text},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.hasText?this.locText.text:this.value?this.value.toString():null},set:function(e){this.locText.text=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(t){if(void 0!==t.value){var n=null;this.isObjItemValue(t)&&(t.itemValue=t.itemValue,this.locText.setJson(t.locText.getJson()),n=e.itemValueProp),this.copyAttributes(t,n)}else this.value=t},e.prototype.isObjItemValue=function(e){return void 0!==e.getType&&"itemvalue"==e.getType()},e.prototype.copyAttributes=function(e,t){for(var n in e)"function"!=typeof e[n]&&(t&&t.indexOf(n)>-1||("text"==n?this.locText.setJson(e[n]):this[n]=e[n]))},e}();i.Separator="|",i.itemValueProp=["text","value","hasText","locOwner","locText"]},function(e,t,n){"use strict";var r=n(0),i=n(2),o=(n.n(i),n(8)),s=n(6);n.d(t,"b",function(){return a}),n.d(t,"a",function(){return u});var a=function(e){function t(t){var n=e.call(this,t)||this;return n.state={value:n.question.value||""},n.handleOnChange=n.handleOnChange.bind(n),n.handleOnBlur=n.handleOnBlur.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.state={value:this.question.value||""}},t.prototype.handleOnChange=function(e){this.setState({value:e.target.value})},t.prototype.handleOnBlur=function(e){this.question.value=e.target.value,this.setState({value:this.question.value||""})},t.prototype.render=function(){return this.question?this.isDisplayMode?i.createElement("div",{id:this.question.inputId,className:this.css},this.question.value):i.createElement("textarea",{id:this.question.inputId,className:this.css,type:"text",value:this.state.value,placeholder:this.question.placeHolder,onBlur:this.handleOnBlur,onChange:this.handleOnChange,cols:this.question.cols,rows:this.question.rows}):null},t}(o.b),u=function(e){function t(t){var n=e.call(this,t)||this;return n.question=t.question,n.comment=n.question.comment,n.state={value:n.comment},n.handleOnChange=n.handleOnChange.bind(n),n.handleOnBlur=n.handleOnBlur.bind(n),n}return r.b(t,e),t.prototype.handleOnChange=function(e){this.comment=e.target.value,this.setState({value:this.comment})},t.prototype.handleOnBlur=function(e){this.question.comment=this.comment},t.prototype.componentWillReceiveProps=function(e){this.question=e.question},t.prototype.render=function(){return this.question?this.isDisplayMode?i.createElement("div",{className:this.css.question.comment},this.comment):i.createElement("input",{type:"text",className:this.css.question.comment,value:this.state.value,onChange:this.handleOnChange,onBlur:this.handleOnBlur}):null},t}(o.a);s.a.Instance.registerQuestion("comment",function(e){return i.createElement(a,e)})},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(10),s=n(11),a=n(1),u=n(9),l=n(17),c=n(7);n.d(t,"b",function(){return h}),n.d(t,"a",function(){return p});var h=function(e){function t(t){var n=e.call(this,t)||this;n.visibleChoicesCache=null,n.otherItemValue=new s.a("other",a.a.getString("otherItemText")),n.choicesFromUrl=null,n.cachedValueForUrlRequestion=null,n.storeOthersAsComment=!0,n.choicesOrderValue="none",n.isSettingComment=!1,n.choicesValues=s.a.createArray(n),n.choicesByUrl=n.createRestfull(),n.locOtherTextValue=new c.a(n),n.locOtherErrorTextValue=new c.a(n);var r=n;return n.choicesByUrl.getResultCallback=function(e){r.onLoadChoicesFromUrl(e)},n}return r.b(t,e),Object.defineProperty(t.prototype,"otherItem",{get:function(){return this.otherItemValue.text=this.otherText?this.otherText:a.a.getString("otherItemText"),this.otherItemValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.getStoreOthersAsComment()?this.getHasOther(this.value):this.getHasOther(this.cachedValue)},enumerable:!0,configurable:!0}),t.prototype.getHasOther=function(e){return e==this.otherItem.value},t.prototype.createRestfull=function(){return new l.a},t.prototype.getComment=function(){return this.getStoreOthersAsComment()?e.prototype.getComment.call(this):this.commentValue},t.prototype.setComment=function(t){this.getStoreOthersAsComment()?e.prototype.setComment.call(this,t):this.isSettingComment||t==this.commentValue||(this.isSettingComment=!0,this.commentValue=t,this.isOtherSelected&&this.setNewValueInData(this.cachedValue),this.isSettingComment=!1)},t.prototype.setNewValue=function(t){t&&(this.cachedValueForUrlRequestion=t),e.prototype.setNewValue.call(this,t)},t.prototype.valueFromData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueFromData.call(this,t):(this.cachedValue=this.valueFromDataCore(t),this.cachedValue)},t.prototype.valueToData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueToData.call(this,t):(this.cachedValue=t,this.valueToDataCore(t))},t.prototype.valueFromDataCore=function(e){return this.hasUnknownValue(e)?e==this.otherItem.value?e:(this.comment=e,this.otherItem.value):e},t.prototype.valueToDataCore=function(e){return e==this.otherItem.value&&this.getComment()&&(e=this.getComment()),e},t.prototype.hasUnknownValue=function(e){if(!e)return!1;for(var t=this.activeChoices,n=0;n0||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback);var n=null;e&&e.length>0&&(n=new Array,s.a.setData(n,e)),this.choicesFromUrl=n,this.onVisibleChoicesChanged(),this.cachedValueForUrlRequestion&&(this.value=this.cachedValueForUrlRequestion)},t.prototype.onVisibleChoicesChanged=function(){this.visibleChoicesCache=null,this.fireCallback(this.choicesChangedCallback)},t.prototype.sortVisibleChoices=function(e){var t=this.choicesOrder.toLowerCase();return"asc"==t?this.sortArray(e,1):"desc"==t?this.sortArray(e,-1):"random"==t?this.randomizeArray(e):e},t.prototype.sortArray=function(e,t){return e.sort(function(e,n){return e.textn.text?1*t:0})},t.prototype.randomizeArray=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e},t.prototype.clearUnusedValues=function(){e.prototype.clearUnusedValues.call(this),this.isOtherSelected||(this.comment=null)},t}(o.a),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.colCountValue=1,n}return r.b(t,e),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<0||e>4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t}(h);i.a.metaData.addClass("selectbase",["hasComment:boolean","hasOther:boolean",{name:"choices:itemvalues",onGetValue:function(e){return s.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"otherText",serializationProperty:"locOtherText"},{name:"otherErrorText",serializationProperty:"locOtherErrorText"},{name:"storeOthersAsComment:boolean",default:!0}],null,"question"),i.a.metaData.addClass("checkboxbase",[{name:"colCount:number",default:1,choices:[0,1,2,3,4]}],null,"selectbase")},function(e,t,n){"use strict";var r=n(28),i=n(18);n.d(t,"b",function(){return o}),n.d(t,"c",function(){return s}),n.d(t,"a",function(){return a});var o=function(){function e(){this.opValue="equal"}return Object.defineProperty(e,"operators",{get:function(){return null!=e.operatorsValue?e.operatorsValue:(e.operatorsValue={empty:function(e,t){return!e},notempty:function(e,t){return!!e},equal:function(e,t){return e==t},notequal:function(e,t){return e!=t},contains:function(e,t){return e&&e.indexOf&&e.indexOf(t)>-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},e.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"operator",{get:function(){return this.opValue},set:function(t){t&&(t=t.toLowerCase(),e.operators[t]&&(this.opValue=t))},enumerable:!0,configurable:!0}),e.prototype.perform=function(t,n){return void 0===t&&(t=null),void 0===n&&(n=null),t||(t=this.left),n||(n=this.right),e.operators[this.operator](this.getPureValue(t),this.getPureValue(n))},e.prototype.getPureValue=function(e){if(!e||"string"!=typeof e)return e;e.length>0&&("'"==e[0]||'"'==e[0])&&(e=e.substr(1));var t=e.length;return t>0&&("'"==e[t-1]||'"'==e[t-1])&&(e=e.substr(0,t-1)),e},e}();o.operatorsValue=null;var s=function(){function e(){this.connectiveValue="and",this.children=[]}return Object.defineProperty(e.prototype,"connective",{get:function(){return this.connectiveValue},set:function(e){e&&(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e||(this.connectiveValue=e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0==this.children.length},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.children=[],this.connective="and"},e}(),a=function(){function e(e){this.root=new s,this.expression=e,this.processValue=new i.a}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,(new r.a).parse(this.expressionValue,this.root))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){return this.values=e,this.runNode(this.root)},e.prototype.runNode=function(e){for(var t="and"==e.connective,n=0;n0?this.questionBase.indent*this.css.question.indent+"px":null,u=this.questionBase.rightIndent>0?this.questionBase.rightIndent*this.css.question.indent+"px":null,l={display:"inline-block",verticalAlign:"top"};return this.questionBase.renderWidth&&(l.width=this.questionBase.renderWidth),a&&(l.marginLeft=a),u&&(l.paddingRight=u),i.createElement("div",{ref:"root",id:this.questionBase.id,className:this.css.question.root,style:l},n,s,e,o,r)},t.prototype.renderQuestion=function(){var e=this.questionBase.customWidget;if(!e)return this.creator.createQuestionElement(this.questionBase);var t=null;if(e.widgetJson.isDefaultRender)return i.createElement("div",{ref:"widget"},this.creator.createQuestionElement(this.questionBase));if(e.widgetJson.render)t=e.widgetJson.render(this.questionBase);else if(e.htmlTemplate){var n={__html:e.htmlTemplate};return i.createElement("div",{ref:"widget",dangerouslySetInnerHTML:n})}return i.createElement("div",{ref:"widget"},t)},t.prototype.renderTitle=function(){var e=this.question.fullTitle;return i.createElement("h5",{className:this.css.question.title},e)},t.prototype.renderComment=function(){return i.createElement("div",null,i.createElement("div",null,this.question.commentText),i.createElement(s.a,{question:this.question,css:this.css}))},t.prototype.renderErrors=function(){return i.createElement(u,{question:this.question,css:this.css,creator:this.creator})},t}(i.Component),u=function(e){function t(t){var n=e.call(this,t)||this;return n.setQuestion(t.question),n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.setQuestion(e.question),this.creator=e.creator,this.css=e.css},t.prototype.setQuestion=function(e){if(this.question=e instanceof o.a?e:null,this.question){var t=this;this.question.errorsChangedCallback=function(){t.state.error=t.state.error+1,t.setState(t.state)}}this.state={error:0}},t.prototype.render=function(){if(!this.question||0==this.question.errors.length)return null;for(var e=[],t=0;t-1?this.path.split(";"):this.path.split(","),0==e.length&&e.push(this.path),e},t.prototype.getValue=function(e){return this.valueName?e[this.valueName]:Object.keys(e).length<1?null:e[Object.keys(e)[0]]},t.prototype.getTitle=function(e){return this.titleName?e[this.titleName]:null},t}(i.b);s.a.metaData.addClass("choicesByUrl",["url","path","valueName","titleName"],function(){return new l})},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.getFirstName=function(e){if(!e)return e;for(var t="",n=0;n0;){if(!i&&"["==e[0]){if(!Array.isArray(r))return n;for(var o=1,s="";o=r.length)return n;r=r[o]}else{i||(e=e.substr(1));var a=this.getFirstName(e);if(!a)return n;if(!r[a])return n;r=r[a],e=e.substr(a.length)}i=!1}return n.value=r,n.hasValue=!0,n},e.prototype.getIntValue=function(e){return"0"==e||(0|e)>0&&e%1==0?Number(e):-1},e}()},function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"a",function(){return i});var r={currentType:"",getCss:function(){var e=this.currentType?this[this.currentType]:i;return e||(e=i),e}},i={root:"sv_main",header:"",body:"sv_body",footer:"sv_nav",navigationButton:"",navigation:{complete:"",prev:"",next:""},progress:"sv_progress",progressBar:"",pageTitle:"sv_p_title",row:"sv_row",question:{root:"sv_q",title:"sv_q_title",comment:"",indent:20},error:{root:"sv_q_erbox",icon:"",item:""},checkbox:{root:"sv_qcbc",item:"sv_q_checkbox",other:"sv_q_other"},comment:"",dropdown:{root:"",control:""},matrix:{root:"sv_q_matrix"},matrixdropdown:{root:"sv_q_matrix"},matrixdynamic:{root:"table",button:""},multipletext:{root:"",itemTitle:"",itemValue:""},radiogroup:{root:"sv_qcbc",item:"sv_q_radiogroup",label:"",other:"sv_q_other"},rating:{root:"sv_q_rating",item:"sv_q_rating_item"},text:"",window:{root:"sv_window",body:"sv_window_content",header:{root:"sv_window_title",title:"",button:"",buttonExpanded:"",buttonCollapsed:""}}};r.standard=i},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(10),s=n(4),a=n(11),u=n(1),l=n(13),c=n(17),h=n(5),p=n(7);n.d(t,"b",function(){return d}),n.d(t,"a",function(){return f}),n.d(t,"c",function(){return m}),n.d(t,"d",function(){return g});var d=function(e){function t(t,n){void 0===n&&(n=null);var r=e.call(this)||this;return r.name=t,r.isRequired=!1,r.hasOther=!1,r.minWidth="",r.cellType="default",r.inputType="text",r.choicesOrder="none",r.locOwner=null,r.colCountValue=-1,r.choicesValue=a.a.createArray(r),r.locTitleValue=new p.a(r),r.locOptionsCaptionValue=new p.a(r),r.locPlaceHolderValue=new p.a(r),r.choicesByUrl=new c.a,r}return r.b(t,e),t.prototype.getType=function(){return"matrixdropdowncolumn"},Object.defineProperty(t.prototype,"title",{get:function(){return this.locTitle.text?this.locTitle.text:this.name},set:function(e){this.locTitle.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.locTitleValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<-1||e>4||(this.colCountValue=e)},enumerable:!0,configurable:!0}),t.prototype.getLocale=function(){return this.locOwner?this.locOwner.getLocale():""},t}(s.b),f=function(){function e(e,t,n){this.column=e,this.row=t,this.questionValue=n.createQuestion(this.row,this.column),this.questionValue.setData(t)}return Object.defineProperty(e.prototype,"question",{get:function(){return this.questionValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.question.value},set:function(e){this.question.value=e},enumerable:!0,configurable:!0}),e}(),m=function(){function e(t,n){this.rowValues={},this.rowComments={},this.isSettingValue=!1,this.cells=[],this.data=t,this.value=n,this.idValue=e.getId(),this.buildCells()}return e.getId=function(){return"srow_"+e.idCounter++},Object.defineProperty(e.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowName",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.rowValues},set:function(e){if(this.isSettingValue=!0,this.rowValues={},null!=e)for(var t in e)this.rowValues[t]=e[t];for(var n=0;n4||(this.columnColCountValue=e,this.fireCallback(this.updateCellsCallbak))},enumerable:!0,configurable:!0}),t.prototype.getColumnTitle=function(e){var t=e.title;if(e.isRequired&&this.survey){var n=this.survey.requiredText;n&&(n+=" "),t=n+t}return t},t.prototype.getColumnWidth=function(e){return e.minWidth?e.minWidth:this.columnMinWidth},Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text?this.locOptionsCaption.text:u.a.getString("optionsCaption")},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),t.prototype.addColumn=function(e,t){void 0===t&&(t=null);var n=new d(e,t);return this.columnsValue.push(n),n},Object.defineProperty(t.prototype,"visibleRows",{get:function(){return this.generatedVisibleRows=this.generateRows(),this.generatedVisibleRows},enumerable:!0,configurable:!0}),t.prototype.generateRows=function(){return null},t.prototype.createMatrixRow=function(e,t,n){return null},t.prototype.createNewValue=function(e){return e||{}},t.prototype.getRowValue=function(e,t,n){void 0===n&&(n=!1);var r=t[e.rowName]?t[e.rowName]:null;return!r&&n&&(r={},t[e.rowName]=r),r},t.prototype.onBeforeValueChanged=function(e){},t.prototype.onValueChanged=function(){if(!this.isRowChanging&&(this.onBeforeValueChanged(this.value),this.generatedVisibleRows&&0!=this.generatedVisibleRows.length)){this.isRowChanging=!0;for(var e=this.createNewValue(this.value),t=0;t0)return n[r].question}return null},t.prototype.createQuestion=function(e,t){var n=this.createQuestionCore(e,t);return n.name=t.name,n.isRequired=t.isRequired,n.hasOther=t.hasOther,n.readOnly=this.readOnly,n.setData(this.survey),t.hasOther&&n instanceof l.b&&(n.storeOthersAsComment=!1),n},t.prototype.createQuestionCore=function(e,t){var n="default"==t.cellType?this.cellType:t.cellType,r=this.getQuestionName(e,t);return"checkbox"==n?this.createCheckbox(r,t):"radiogroup"==n?this.createRadiogroup(r,t):"text"==n?this.createText(r,t):"comment"==n?this.createComment(r,t):this.createDropdown(r,t)},t.prototype.getQuestionName=function(e,t){return e.rowName+"_"+t.name},t.prototype.getColumnChoices=function(e){return e.choices&&e.choices.length>0?e.choices:this.choices},t.prototype.getColumnOptionsCaption=function(e){return e.optionsCaption?e.optionsCaption:this.optionsCaption},t.prototype.createDropdown=function(e,t){var n=this.createCellQuestion("dropdown",e);return this.setSelectBaseProperties(n,t),n.optionsCaption=this.getColumnOptionsCaption(t),n},t.prototype.createCheckbox=function(e,t){var n=this.createCellQuestion("checkbox",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.createRadiogroup=function(e,t){var n=this.createCellQuestion("radiogroup",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.setSelectBaseProperties=function(e,t){e.choicesOrder=t.choicesOrder,e.choices=this.getColumnChoices(t),e.choicesByUrl.setData(t.choicesByUrl),e.choicesByUrl.isEmpty||e.choicesByUrl.run()},t.prototype.createText=function(e,t){var n=this.createCellQuestion("text",e);return n.inputType=t.inputType,n.placeHolder=t.placeHolder,n},t.prototype.createComment=function(e,t){var n=this.createCellQuestion("comment",e);return n.placeHolder=t.placeHolder,n},t.prototype.createCellQuestion=function(e,t){return h.a.Instance.createQuestion(e,t)},t.prototype.deleteRowValue=function(e,t){return delete e[t.rowName],0==Object.keys(e).length?null:e},t.prototype.onRowChanged=function(e,t){var n=this.createNewValue(this.value),r=this.getRowValue(e,n,!0);for(var i in r)delete r[i];if(t){t=JSON.parse(JSON.stringify(t));for(var i in t)r[i]=t[i]}0==Object.keys(r).length&&(n=this.deleteRowValue(n,e)),this.isRowChanging=!0,this.setNewValue(n),this.isRowChanging=!1},t}(o.a);i.a.metaData.addClass("matrixdropdowncolumn",["name",{name:"title",serializationProperty:"locTitle"},{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"default",choices:["default","dropdown","checkbox","radiogroup","text","comment"]},{name:"colCount",default:-1,choices:[-1,0,1,2,3,4]},"isRequired:boolean","hasOther:boolean","minWidth",{name:"placeHolder",serializationProperty:"locPlaceHolder"},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]}],function(){return new d("")}),i.a.metaData.addClass("matrixdropdownbase",[{name:"columns:matrixdropdowncolumns",className:"matrixdropdowncolumn"},"horizontalScroll:boolean",{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"dropdown",choices:["dropdown","checkbox","radiogroup","text","comment"]},{name:"columnColCount",default:0,choices:[0,1,2,3,4]},"columnMinWidth"],function(){return new g("")},"question")},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(3),s=n(14);n.d(t,"a",function(){return a});var a=function(e){function t(n){var r=e.call(this)||this;return r.name=n,r.conditionRunner=null,r.visibleIf="",r.visibleValue=!0,r.startWithNewLineValue=!0,r.visibleIndexValue=-1,r.width="",r.renderWidthValue="",r.rightIndentValue=0,r.indent=0,r.idValue=t.getQuestionId(),r.onCreating(),r}return r.b(t,e),t.getQuestionId=function(){return"sq_"+t.questionCounter++},Object.defineProperty(t.prototype,"isPanel",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this.visibleValue},set:function(e){e!=this.visible&&(this.visibleValue=e,this.fireCallback(this.visibilityChangedCallback),this.fireCallback(this.rowVisibilityChangedCallback),this.survey&&this.survey.questionVisibilityChanged(this,this.visible))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isVisible",{get:function(){return this.visible||this.survey&&this.survey.isDesignMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isReadOnly",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleIndex",{get:function(){return this.visibleIndexValue},enumerable:!0,configurable:!0}),t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),!1},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasInput",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasComment",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startWithNewLine",{get:function(){return this.startWithNewLineValue},set:function(e){this.startWithNewLine!=e&&(this.startWithNewLineValue=e,this.startWithNewLineChangedCallback&&this.startWithNewLineChangedCallback())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderWidth",{get:function(){return this.renderWidthValue},set:function(e){e!=this.renderWidth&&(this.renderWidthValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rightIndent",{get:function(){return this.rightIndentValue},set:function(e){e!=this.rightIndent&&(this.rightIndentValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.focus=function(e){void 0===e&&(e=!1)},t.prototype.setData=function(e){this.data=e,e&&e.questionAdded&&(this.surveyValue=e),this.onSetData()},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),t.prototype.fireCallback=function(e){e&&e()},t.prototype.onSetData=function(){},t.prototype.onCreating=function(){},t.prototype.runCondition=function(e){this.visibleIf&&(this.conditionRunner||(this.conditionRunner=new s.a(this.visibleIf)),this.conditionRunner.expression=this.visibleIf,this.visible=this.conditionRunner.run(e))},t.prototype.onSurveyValueChanged=function(e){},t.prototype.onSurveyLoad=function(){},t.prototype.setVisibleIndex=function(e){this.visibleIndexValue!=e&&(this.visibleIndexValue=e,this.fireCallback(this.visibleIndexChangedCallback))},t.prototype.supportGoNextPageAutomatic=function(){return!1},t.prototype.clearUnusedValues=function(){},t.prototype.onLocaleChanged=function(){},t.prototype.getLocale=function(){return this.data?this.data.getLocale():""},t}(i.b);a.questionCounter=100,o.a.metaData.addClass("questionbase",["!name",{name:"visible:boolean",default:!0},"visibleIf:expression",{name:"width"},{name:"startWithNewLine:boolean",default:!0},{name:"indent:number",default:0,choices:[0,1,2,3]}])},function(e,t,n){"use strict";var r=n(0),i=n(2);n.n(i);n.d(t,"a",function(){return o});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.updateStateFunction=null,n.survey=t.survey,n.css=t.css,n.state={update:0},n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.survey=e.survey,this.css=e.css},t.prototype.componentDidMount=function(){if(this.survey){var e=this;this.updateStateFunction=function(){e.state.update=e.state.update+1,e.setState(e.state)},this.survey.onPageVisibleChanged.add(this.updateStateFunction)}},t.prototype.componentWillUnmount=function(){this.survey&&this.updateStateFunction&&(this.survey.onPageVisibleChanged.remove(this.updateStateFunction),this.updateStateFunction=null)},t}(i.Component)},function(e,t,n){"use strict";var r=n(0),i=n(24);n.d(t,"a",function(){return o});var o=function(e){function t(t){return void 0===t&&(t=null),e.call(this,t)||this}return r.b(t,e),t.prototype.render=function(){this.renderCallback&&this.renderCallback()},t.prototype.mergeCss=function(e,t){this.mergeValues(e,t)},t.prototype.doAfterRenderSurvey=function(e){this.afterRenderSurvey(e)},t.prototype.onLoadSurveyFromService=function(){this.render()},t.prototype.onLoadingSurveyFromService=function(){this.render()},t}(i.a)},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(4),s=n(30),a=n(25),u=n(18),l=n(29),c=n(1),h=n(9),p=n(32),d=n(7);n.d(t,"a",function(){return f});var f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;n.surveyId=null,n.surveyPostId=null,n.clientId=null,n.cookieName=null,n.sendResultOnPageNext=!1,n.commentPrefix="-Comment",n.focusFirstQuestionAutomatic=!0,n.showNavigationButtons=!0,n.showTitle=!0,n.showPageTitles=!0,n.showCompletedPage=!0,n.requiredText="*",n.questionStartIndex="",n.showProgressBar="off",n.storeOthersAsComment=!0,n.goNextPageAutomatic=!1,n.pages=new Array,n.triggers=new Array,n.clearInvisibleValues=!1,n.currentPageValue=null,n.valuesHash={},n.variablesHash={},n.showPageNumbersValue=!1,n.showQuestionNumbersValue="on",n.questionTitleLocationValue="top",n.localeValue="",n.isCompleted=!1,n.isLoading=!1,n.processedTextValues={},n.isValidatingOnServerValue=!1,n.modeValue="edit",n.isDesignModeValue=!1,n.onComplete=new o.d,n.onPartialSend=new o.d,n.onCurrentPageChanged=new o.d,n.onValueChanged=new o.d,n.onVisibleChanged=new o.d,n.onPageVisibleChanged=new o.d,n.onQuestionAdded=new o.d,n.onQuestionRemoved=new o.d,n.onPanelAdded=new o.d,n.onPanelRemoved=new o.d,n.onValidateQuestion=new o.d,n.onProcessHtml=new o.d,n.onSendResult=new o.d,n.onGetResult=new o.d,n.onUploadFile=new o.d,n.onAfterRenderSurvey=new o.d,n.onAfterRenderPage=new o.d,n.onAfterRenderQuestion=new o.d,n.onAfterRenderPanel=new o.d,n.jsonErrors=null,n.isLoadingFromJsonValue=!1,n.locTitleValue=new d.a(n),n.locCompletedHtmlValue=new d.a(n),n.locPagePrevTextValue=new d.a(n),n.locPageNextTextValue=new d.a(n),n.locCompleteTextValue=new d.a(n),n.locQuestionTitleTemplateValue=new d.a(n);var r=n;return n.textPreProcessor=new a.a,n.textPreProcessor.onHasValue=function(e){return r.hasProcessedTextValue(e)},n.textPreProcessor.onProcess=function(e){return r.getProcessedTextValue(e)},n.pages.push=function(e){return e.data=r,Array.prototype.push.call(this,e)},n.triggers.push=function(e){return e.setOwner(r),Array.prototype.push.call(this,e)},n.updateProcessedTextValues(),n.onBeforeCreating(),t&&(n.setJsonObject(t),n.surveyId&&n.loadSurveyFromService(n.surveyId)),n.onCreating(),n}return r.b(t,e),t.prototype.getType=function(){return"survey"},Object.defineProperty(t.prototype,"locale",{get:function(){return this.localeValue},set:function(e){this.localeValue=e,c.a.currentLocale=e;for(var t=0;t0&&(e[t]=this.valuesHash[t]);return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visiblePages",{get:function(){if(this.isDesignMode)return this.pages;for(var e=new Array,t=0;t0&&(this.currentPage=e[0]),this.currentPageValue},set:function(e){var t=this.visiblePages;if(!(null!=e&&t.indexOf(e)<0)&&e!=this.currentPageValue){var n=this.currentPageValue;this.currentPageValue=e,this.updateCustomWidgets(e),this.currentPageChanged(e,n)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPageNo",{get:function(){return this.visiblePages.indexOf(this.currentPage)},set:function(e){this.visiblePages;e<0||e>=this.visiblePages.length||(this.currentPage=this.visiblePages[e])},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){this.currentPageValue&&(this.currentPageValue.scrollToTop(),this.currentPageValue.focusFirstQuestion())},Object.defineProperty(t.prototype,"state",{get:function(){return this.isLoading?"loading":this.isCompleted?"completed":this.currentPage?"running":"empty"},enumerable:!0,configurable:!0}),t.prototype.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),e&&(this.data=null,this.variablesHash={}),this.isCompleted=!1,t&&this.visiblePageCount>0&&(this.currentPage=this.visiblePages[0])},t.prototype.mergeValues=function(e,t){if(t&&e)for(var n in e){var r=e[n];r&&"object"==typeof r?(t[n]||(t[n]={}),this.mergeValues(r,t[n])):t[n]=r}},t.prototype.updateCustomWidgets=function(e){if(e)for(var t=0;t-1},enumerable:!0,configurable:!0}),t.prototype.setCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT")},t.prototype.deleteCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=;")},t.prototype.nextPage=function(){return!this.isLastPage&&((!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doNextPage(),!0)))},Object.defineProperty(t.prototype,"isCurrentPageHasErrors",{get:function(){return null==this.currentPage||this.currentPage.hasErrors(!0,!0)},enumerable:!0,configurable:!0}),t.prototype.prevPage=function(){if(this.isFirstPage)return!1;var e=this.visiblePages,t=e.indexOf(this.currentPage);this.currentPage=e[t-1]},t.prototype.completeLastPage=function(){return(!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doComplete(),!0))},Object.defineProperty(t.prototype,"isFirstPage",{get:function(){return null==this.currentPage||0==this.visiblePages.indexOf(this.currentPage)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLastPage",{get:function(){if(null==this.currentPage)return!0;var e=this.visiblePages;return e.indexOf(this.currentPage)==e.length-1},enumerable:!0,configurable:!0}),t.prototype.doComplete=function(){this.clearUnusedValues(),this.setCookie(),this.setCompleted(),this.onComplete.fire(this,null),this.surveyPostId&&this.sendResult()},Object.defineProperty(t.prototype,"isValidatingOnServer",{get:function(){return this.isValidatingOnServerValue},enumerable:!0,configurable:!0}),t.prototype.setIsValidatingOnServer=function(e){e!=this.isValidatingOnServer&&(this.isValidatingOnServerValue=e,this.onIsValidatingOnServerChanged())},t.prototype.onIsValidatingOnServerChanged=function(){},t.prototype.doServerValidation=function(){if(!this.onServerValidateQuestions)return!1;for(var e=this,t={data:{},errors:{},survey:this,complete:function(){e.completeServerValidation(t)}},n=0;n"+this.getLocString("completingSurvey")+""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedLoadingHtml",{get:function(){return"

"+this.getLocString("loadingSurvey")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){if(null==this.currentPage)return"";var e=this.visiblePages,t=e.indexOf(this.currentPage)+1;return this.getLocString("progressText").format(t,e.length)},enumerable:!0,configurable:!0}),t.prototype.afterRenderSurvey=function(e){this.onAfterRenderSurvey.fire(this,{survey:this,htmlElement:e})},t.prototype.afterRenderPage=function(e){this.onAfterRenderPage.isEmpty||this.onAfterRenderPage.fire(this,{page:this.currentPage,htmlElement:e})},t.prototype.afterRenderQuestion=function(e,t){this.onAfterRenderQuestion.fire(this,{question:e,htmlElement:t})},t.prototype.afterRenderPanel=function(e,t){this.onAfterRenderPanel.fire(this,{panel:e,htmlElement:t})},t.prototype.uploadFile=function(e,t,n,r){var i=!0;return this.onUploadFile.fire(this,{name:e,file:t,accept:i}),!!i&&(!n&&this.surveyPostId&&this.uploadFileCore(e,t,r),!0)},t.prototype.uploadFileCore=function(e,t,n){var r=this;n&&n("uploading"),(new l.a).sendFile(this.surveyPostId,t,function(t,i){n&&n(t?"success":"error"),t&&r.setValue(e,i)})},t.prototype.getPage=function(e){return this.pages[e]},t.prototype.addPage=function(e){null!=e&&(this.pages.push(e),this.updateVisibleIndexes())},t.prototype.addNewPage=function(e){var t=this.createNewPage(e);return this.addPage(t),t},t.prototype.removePage=function(e){var t=this.pages.indexOf(e);t<0||(this.pages.splice(t,1),this.currentPageValue==e&&(this.currentPage=this.pages.length>0?this.pages[0]:null),this.updateVisibleIndexes())},t.prototype.getQuestionByName=function(e,t){void 0===t&&(t=!1);var n=this.getAllQuestions();t&&(e=e.toLowerCase());for(var r=0;r0&&(this.jsonErrors=t.errors),this.isLoadingFromJsonValue=!1,this.updateProcessedTextValues(),this.hasCookie&&this.doComplete(),this.doElementsOnLoad(),this.runConditions(),this.updateVisibleIndexes()}},t.prototype.onBeforeCreating=function(){},t.prototype.onCreating=function(){},t.prototype.updateProcessedTextValues=function(){this.processedTextValues={};var e=this;this.processedTextValues.pageno=function(t){return null!=e.currentPage?e.visiblePages.indexOf(e.currentPage)+1:0},this.processedTextValues.pagecount=function(t){return e.visiblePageCount};for(var t=this.getAllQuestions(),n=0;n=0;n--){var r=t[n],i=this.getName(e.substring(r.start+1,r.end));if(this.canProcessName(i)&&(!this.onHasValue||this.onHasValue(i))){var o=this.onProcess(i);null==o&&(o=""),e=e.substr(0,r.start)+o+e.substr(r.end+1)}}return e},e.prototype.getItems=function(e){for(var t=[],n=e.length,i=-1,o="",s=0;s-1){var a=new r;a.start=i,a.end=s,t.push(a)}i=-1}return t},e.prototype.getName=function(e){if(e)return e.trim()},e.prototype.canProcessName=function(e){if(!e)return!1;for(var t=0;tn.value?(n.error=new o.c(this.getErrorText(t)),n):this.maxValue&&this.maxValue0&&e.length0&&e.length>this.maxLength?new u(null,new o.c(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return this.minLength>0&&this.maxLength>0?s.a.getString("textMinMaxLength").format(this.minLength,this.maxLength):this.minLength>0?s.a.getString("textMinLength").format(this.minLength):s.a.getString("textMaxLength").format(this.maxLength)},t}(l),d=function(e){function t(t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=e.call(this)||this;return r.minCount=t,r.maxCount=n,r}return r.b(t,e),t.prototype.getType=function(){return"answercountvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),null==e||e.constructor!=Array)return null;var n=e.length;return this.minCount&&nthis.maxCount?new u(null,new o.c(this.getErrorText(s.a.getString("maxSelectError").format(this.maxCount)))):null},t.prototype.getDefaultErrorText=function(e){return e},t}(l),f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;return n.regex=t,n}return r.b(t,e),t.prototype.getType=function(){return"regexvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),this.regex&&e?new RegExp(this.regex).test(e)?null:new u(e,new o.c(this.getErrorText(t))):null},t}(l),m=function(e){function t(){var t=e.call(this)||this;return t.re=/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,t}return r.b(t,e),t.prototype.getType=function(){return"emailvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),e?this.re.test(e)?null:new u(e,new o.c(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return s.a.getString("invalidEmail")},t}(l);a.a.metaData.addClass("surveyvalidator",["text"]),a.a.metaData.addClass("numericvalidator",["minValue:number","maxValue:number"],function(){return new h},"surveyvalidator"),a.a.metaData.addClass("textvalidator",["minLength:number","maxLength:number"],function(){return new p},"surveyvalidator"),a.a.metaData.addClass("answercountvalidator",["minCount:number","maxCount:number"],function(){return new d},"surveyvalidator"),a.a.metaData.addClass("regexvalidator",["regex"],function(){return new f},"surveyvalidator"),a.a.metaData.addClass("emailvalidator",[],function(){return new m},"surveyvalidator")},function(e,t,n){"use strict";var r=n(0),i=n(2),o=(n.n(i),n(16));n.d(t,"a",function(){return s});var s=function(e){function t(t){var n=e.call(this,t)||this;return n.handleOnExpanded=n.handleOnExpanded.bind(n),n}return r.b(t,e),t.prototype.handleOnExpanded=function(e){this.state.expanded=!this.state.expanded,this.setState(this.state)},t.prototype.render=function(){if(this.state.hidden)return null;var e=this.renderHeader(),t=this.state.expanded?this.renderBody():null,n={position:"fixed",bottom:"3px",right:"10px"};return i.createElement("div",{className:this.css.window.root,style:n},e,t)},t.prototype.renderHeader=function(){var e={width:"100%"},t={paddingRight:"10px"},n=this.state.expanded?this.css.window.header.buttonCollapsed:this.css.window.header.buttonExpanded;return n="glyphicon pull-right "+n,i.createElement("div",{className:this.css.window.header.root},i.createElement("a",{href:"#",onClick:this.handleOnExpanded,style:e},i.createElement("span",{className:this.css.window.header.title,style:t},this.title),i.createElement("span",{className:n,"aria-hidden":"true"})))},t.prototype.renderBody=function(){return i.createElement("div",{className:this.css.window.body},this.renderSurvey())},t.prototype.updateSurvey=function(t){e.prototype.updateSurvey.call(this,t),this.title=t.title?t.title:this.survey.title;var n=!!t.expanded&&t.expanded;this.state={expanded:n,hidden:!1};var r=this;this.survey.onComplete.add(function(e){r.state.hidden=!0,r.setState(r.state)})},t}(o.a)},function(e,t,n){"use strict";var r=n(14);n.d(t,"a",function(){return i});var i=function(){function e(){}return e.prototype.parse=function(e,t){return this.text=e,this.root=t,this.root.clear(),this.at=0,this.length=this.text.length,this.parseText()},e.prototype.toString=function(e){return this.root=e,this.nodeToString(e)},e.prototype.toStringCore=function(e){return e?e.children?this.nodeToString(e):e.left?this.conditionToString(e):"":""},e.prototype.nodeToString=function(e){if(e.isEmpty)return"";for(var t="",n=0;n1&&(t="("+t+")"),t},e.prototype.conditionToString=function(e){if(!e.right||!e.operator)return"";var t=e.left;t&&!this.isNumeric(t)&&(t="'"+t+"'");var n=t+" "+this.operationToString(e.operator);if(this.isNoRightOperation(e.operator))return n;var r=e.right;return r&&!this.isNumeric(r)&&(r="'"+r+"'"),n+" "+r},e.prototype.operationToString=function(e){return"equal"==e?"=":"notequal"==e?"!=":"greater"==e?">":"less"==e?"<":"greaterorequal"==e?">=":"lessorequal"==e?"<=":e},e.prototype.isNumeric=function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)},e.prototype.parseText=function(){return this.node=this.root,this.expressionNodes=[],this.expressionNodes.push(this.node),this.readConditions()&&this.at>=this.length},e.prototype.readConditions=function(){var e=this.readCondition();if(!e)return e;var t=this.readConnective();return!t||(this.addConnective(t),this.readConditions())},e.prototype.readCondition=function(){var e=this.readExpression();if(e<0)return!1;if(1==e)return!0;var t=this.readString();if(!t)return!1;var n=this.readOperator();if(!n)return!1;var i=new r.b;if(i.left=t,i.operator=n,!this.isNoRightOperation(n)){var o=this.readString();if(!o)return!1;i.right=o}return this.addCondition(i),!0},e.prototype.readExpression=function(){if(this.skip(),this.at>=this.length||"("!=this.ch)return 0;this.at++,this.pushExpression();var e=this.readConditions();return e?(this.skip(),e=")"==this.ch,this.at++,this.popExpression(),1):-1},Object.defineProperty(e.prototype,"ch",{get:function(){return this.text.charAt(this.at)},enumerable:!0,configurable:!0}),e.prototype.skip=function(){for(;this.at"==e||"<"==e||"="==e||"!"==e},e.prototype.isBrackets=function(e){return"("==e||")"==e},e.prototype.readString=function(){if(this.skip(),this.at>=this.length)return null;var e=this.at,t=this.isQuotes(this.ch);t&&this.at++;for(var n=this.isOperatorChar(this.ch);this.at1&&this.isQuotes(r[0])){var i=r.length-1;this.isQuotes(r[r.length-1])&&i--,r=r.substr(1,i)}return r},e.prototype.isNoRightOperation=function(e){return"empty"==e||"notempty"==e},e.prototype.readOperator=function(){var e=this.readString();return e?(e=e.toLowerCase(),">"==e&&(e="greater"),"<"==e&&(e="less"),">="!=e&&"=>"!=e||(e="greaterorequal"),"<="!=e&&"=<"!=e||(e="lessorequal"),"="!=e&&"=="!=e||(e="equal"),"<>"!=e&&"!="!=e||(e="notequal"),"contain"==e&&(e="contains"),"notcontain"==e&&(e="notcontains"),e):null},e.prototype.readConnective=function(){var e=this.readString();return e?(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e&&(e=null),e):null},e.prototype.pushExpression=function(){var e=new r.c;this.expressionNodes.push(e),this.node=e},e.prototype.popExpression=function(){var e=this.expressionNodes.pop();this.node=this.expressionNodes[this.expressionNodes.length-1],this.node.children.push(e)},e.prototype.addCondition=function(e){this.node.children.push(e)},e.prototype.addConnective=function(e){if(this.node.children.length<2)this.node.connective=e;else if(this.node.connective!=e){var t=this.node.connective,n=this.node.children;this.node.clear(),this.node.connective=e;var i=new r.c;i.connective=t,i.children=n,this.node.children.push(i);var o=new r.c;this.node.children.push(o),this.node=o}},e}()},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.loadSurvey=function(t,n){var r=new XMLHttpRequest;r.open("GET",e.serviceUrl+"/getSurvey?surveyId="+t),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.onload=function(){var e=JSON.parse(r.response);n(200==r.status,e,r.response)},r.send()},e.prototype.sendResult=function(t,n,r,i,o){void 0===i&&(i=null),void 0===o&&(o=!1);var s=new XMLHttpRequest;s.open("POST",e.serviceUrl+"/post/"),s.setRequestHeader("Content-Type","application/json; charset=utf-8");var a={postId:t,surveyResult:JSON.stringify(n)};i&&(a.clientId=i),o&&(a.isPartialCompleted=!0);var u=JSON.stringify(a);s.onload=s.onerror=function(){r&&r(200==s.status,s.response)},s.send(u)},e.prototype.sendFile=function(t,n,r){var i=new XMLHttpRequest;i.onload=i.onerror=function(){r&&r(200==i.status,JSON.parse(i.response))},i.open("POST",e.serviceUrl+"/upload/",!0);var o=new FormData;o.append("file",n),o.append("postId",t),i.send(o)},e.prototype.getResult=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&name="+n;i.open("GET",e.serviceUrl+"/getResult?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null,t=null;if(200==i.status){e=JSON.parse(i.response),t=[];for(var n in e.QuestionResult){var o={name:n,value:e.QuestionResult[n]};t.push(o)}}r(200==i.status,e,t,i.response)},i.send()},e.prototype.isCompleted=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&clientId="+n;i.open("GET",e.serviceUrl+"/isCompleted?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null;200==i.status&&(e=JSON.parse(i.response)),r(200==i.status,e,i.response)},i.send()},e}();r.serviceUrl="https://dxsurveyapi.azurewebsites.net/api/Survey"},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(4),s=n(31);n.d(t,"a",function(){return a});var a=function(e){function t(t){void 0===t&&(t="");var n=e.call(this,t)||this;return n.name=t,n.numValue=-1,n.navigationButtonsVisibility="inherit",n}return r.b(t,e),t.prototype.getType=function(){return"page"},Object.defineProperty(t.prototype,"num",{get:function(){return this.numValue},set:function(e){this.numValue!=e&&(this.numValue=e,this.onNumChanged(e))},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){for(var e=0;e0},e}(),c=function(e){function t(n){void 0===n&&(n="");var r=e.call(this)||this;r.name=n,r.dataValue=null,r.rowValues=null,r.conditionRunner=null,r.elementsValue=new Array,r.isQuestionsReady=!1,r.questionsValue=new Array,r.parent=null,r.visibleIf="",r.visibleIndex=-1,r.visibleValue=!0,r.idValue=t.getPanelId(),r.locTitleValue=new u.a(r);var i=r;return r.elementsValue.push=function(e){return i.doOnPushElement(this,e)},r.elementsValue.splice=function(e,t){for(var n=[],r=2;r=e.length||o.push(e[s+t]);var a=(u=Array.prototype.splice).call.apply(u,[e,t,n].concat(r));this.markQuestionListDirty(),r||(r=[]);for(var s=0;s-1){n.updateVisible();break}}},t.prototype.buildRows=function(){for(var e=new Array,t=0;t=this.elements.length?this.elements.push(e):this.elements.splice(t,0,e))},t.prototype.addQuestion=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addPanel=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addNewQuestion=function(e,t){var n=a.a.Instance.createQuestion(e,t);return this.addQuestion(n),n},t.prototype.addNewPanel=function(e){var t=this.createNewPanel(e);return this.addPanel(t),t},t.prototype.createNewPanel=function(e){return new h(e)},t.prototype.removeElement=function(e){var t=this.elements.indexOf(e);if(t<0){for(var n=0;n0&&(e=this.page.num+". "+e),i.createElement("h4",{className:this.css.pageTitle},e)},t}(i.Component),a=function(e){function t(t){var n=e.call(this,t)||this;return n.panel=t.panel,n.survey=t.survey,n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.panel=e.panel,this.survey=e.survey,this.creator=e.creator,this.css=e.css},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.afterRenderPage(e)},t.prototype.render=function(){if(null==this.panel||null==this.survey||null==this.creator)return null;for(var e=this.renderTitle(),t=[],n=this.panel.rows,r=0;r2;)L.push(arguments[a]);for(n&&n.children&&(L.length||L.push(n.children),delete n.children);L.length;)if((o=L.pop())instanceof Array)for(a=o.length;a--;)L.push(o[a]);else null!=o&&!0!==o&&!1!==o&&("number"==typeof o&&(o=String(o)),s="string"==typeof o,s&&i?r[r.length-1]+=o:((r||(r=[])).push(o),i=s));var u=new t(e,n||void 0,r||Q);return A.vnode&&A.vnode(u),u}function r(e,t){if(t)for(var n in t)e[n]=t[n];return e}function i(e){return r({},e)}function o(e,t){for(var n=t.split("."),r=0;r2?[].slice.call(arguments,2):e.children)}function c(e,t,n){var r=t.split(".");return function(t){for(var i=t&&t.target||this,s={},u=s,l=a(n)?o(t,n):i.nodeName?i.type.match(/^che|rad/)?i.checked:i.value:t,c=0;c=f?e.appendChild(u):u!==l[b]&&(u===l[b+1]&&v(l[b]),e.insertBefore(u,l[b]||null)))}if(p)for(var b in h)h[b]&&E(h[b]);for(;d<=g;)(u=c[g--])&&E(u)}function E(e,t){var n=e._component;if(n)_(n,!t);else{e[U]&&e[U].ref&&e[U].ref(null),t||x(e);for(var r;r=e.lastChild;)E(r,t)}}function S(e,t,n){var r;for(r in n)t&&r in t||null==n[r]||b(e,r,n[r],n[r]=void 0,Y);if(t)for(r in t)"children"===r||"innerHTML"===r||r in n&&t[r]===("value"===r||"checked"===r?e[r]:n[r])||b(e,r,n[r],n[r]=t[r],Y)}function R(e){var t=e.constructor.name,n=te[t];n?n.push(e):te[t]=[e]}function N(e,t,n){var r=new e(t,n),i=te[e.name];if(M.call(r,t,n),i)for(var o=i.length;o--;)if(i[o].constructor===e){r.nextBase=i[o].nextBase,i.splice(o,1);break}return r}function k(e,t,n,r,i){e._disable||(e._disable=!0,(e.__ref=t.ref)&&delete t.ref,(e.__key=t.key)&&delete t.key,!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,r),r&&r!==e.context&&(e.prevContext||(e.prevContext=e.context),e.context=r),e.prevProps||(e.prevProps=e.props),e.props=t,e._disable=!1,0!==n&&(1!==n&&!1===A.syncComponentUpdates&&e.base?h(e):j(e,1,i)),e.__ref&&e.__ref(e))}function j(e,t,n,o){if(!e._disable){var a,u,l,c,h=e.props,p=e.state,m=e.context,g=e.prevProps||h,v=e.prevState||p,b=e.prevContext||m,C=e.base,w=e.nextBase,x=C||w,P=e._component;if(C&&(e.props=g,e.state=v,e.context=b,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(h,p,m)?a=!0:e.componentWillUpdate&&e.componentWillUpdate(h,p,m),e.props=h,e.state=p,e.context=m),e.prevProps=e.prevState=e.prevContext=e.nextBase=null,e._dirty=!1,!a){for(e.render&&(u=e.render(h,p,m)),e.getChildContext&&(m=r(i(m),e.getChildContext()));d(u);)u=f(u,m);var T,q,S=u&&u.nodeName;if(s(S)){var R=y(u);l=P,l&&l.constructor===S&&R.key==l.__key?k(l,R,1,m):(T=l,l=N(S,R,m),l.nextBase=l.nextBase||w,l._parentComponent=e,e._component=l,k(l,R,0,m),j(l,1,n,!0)),q=l.base}else c=x,T=P,T&&(c=e._component=null),(x||1===t)&&(c&&(c._component=null),q=O(c,u,m,n||!C,x&&x.parentNode,!0));if(x&&q!==x&&l!==P){var I=x.parentNode;I&&q!==I&&(I.replaceChild(q,x),T||(x._component=null,E(x)))}if(T&&_(T,q!==x),e.base=q,q&&!o){for(var M=e,D=e;D=D._parentComponent;)(M=D).base=q;q._component=M,q._componentConstructor=M.constructor}}!C||n?K.unshift(e):a||(e.componentDidUpdate&&e.componentDidUpdate(g,v,b),A.afterUpdate&&A.afterUpdate(e));var L,Q=e._renderCallbacks;if(Q)for(;L=Q.pop();)L.call(e);$||o||V()}}function I(e,t,n,r){for(var i=e&&e._component,o=i,s=e,a=i&&e._componentConstructor===t.nodeName,u=a,l=y(t);i&&!u&&(i=i._parentComponent);)u=i.constructor===t.nodeName;return i&&u&&(!r||i._component)?(k(i,l,3,n,r),e=i.base):(o&&!a&&(_(o,!0),e=s=null),i=N(t.nodeName,l,n),e&&!i.nextBase&&(i.nextBase=e,s=null),k(i,l,1,n,r),e=i.base,s&&e!==s&&(s._component=null,E(s))),e}function _(e,t){A.beforeUnmount&&A.beforeUnmount(e);var n=e.base;e._disable=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var r=e._component;if(r)_(r,t);else if(n){n[U]&&n[U].ref&&n[U].ref(null),e.nextBase=n,t&&(v(n),R(e));for(var i;i=n.lastChild;)E(i,!t)}e.__ref&&e.__ref(null),e.componentDidUnmount&&e.componentDidUnmount()}function M(e,t){this._dirty=!0,this.context=t,this.props=e,this.state||(this.state={})}function D(e,t,n){return O(n,e,{},!1,t)}var A={},L=[],Q=[],B={},z=function(e){return B[e]||(B[e]=e.toLowerCase())},F="undefined"!=typeof Promise&&Promise.resolve(),H=F?function(e){F.then(e)}:setTimeout,W={},U="undefined"!=typeof Symbol?Symbol.for("preactattr"):"__preactattr_",G={boxFlex:1,boxFlexGroup:1,columnCount:1,fillOpacity:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,fontWeight:1,lineClamp:1,lineHeight:1,opacity:1,order:1,orphans:1,strokeOpacity:1,widows:1,zIndex:1,zoom:1},J={blur:1,error:1,focus:1,load:1,resize:1,scroll:1},Z=[],X={},K=[],$=0,Y=!1,ee=!1,te={};r(M.prototype,{linkState:function(e,t){var n=this._linkedStates||(this._linkedStates={});return n[e+t]||(n[e+t]=c(this,e,t))},setState:function(e,t){var n=this.state;this.prevState||(this.prevState=i(n)),r(n,s(e)?e(n,this.props):e),t&&(this._renderCallbacks=this._renderCallbacks||[]).push(t),h(this)},forceUpdate:function(){j(this,2)},render:function(){}}),e.h=n,e.cloneElement=l,e.Component=M,e.render=D,e.rerender=p,e.options=A})},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(h===clearTimeout)return clearTimeout(e);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(e);try{return h(e)}catch(t){try{return h.call(null,e)}catch(t){return h.call(this,e)}}}function s(){m&&d&&(m=!1,d.length?f=d.concat(f):g=-1,f.length&&a())}function a(){if(!m){var e=i(s);m=!0;for(var t=f.length;t;){for(d=f,f=[];++g1)for(var n=1;n=0},t.prototype.valueFromDataCore=function(e){if(!e||!Array.isArray(e))return e;for(var t=0;t0&&e.size>this.maxSize&&this.errors.push(new a.d(this.maxSize)),(t!=this.errors.length||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback),this.errors.length>0},t.prototype.isFileImage=function(e){if(e&&e.type){return 0==e.type.toLowerCase().indexOf("image")}},t}(i.a);o.a.metaData.addClass("file",["showPreview:boolean","imageHeight","imageWidth","storeDataAsText:boolean","maxSize:number"],function(){return new l("")},"question"),s.a.Instance.registerQuestion("file",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(21),o=n(3),s=n(5),a=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.locHtmlValue=new a.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"html"},Object.defineProperty(t.prototype,"html",{get:function(){return this.locHtml.text},set:function(e){this.locHtml.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locHtml",{get:function(){return this.locHtmlValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedHtml",{get:function(){return this.survey?this.survey.processHtml(this.html):this.html},enumerable:!0,configurable:!0}),t}(i.a);o.a.metaData.addClass("html",[{name:"html:html",serializationProperty:"locHtml"}],function(){return new u("")},"questionbase"),s.a.Instance.registerQuestion("html",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(11),s=n(10),a=n(3),u=n(1),l=n(9),c=n(5);n.d(t,"a",function(){return h}),n.d(t,"b",function(){return p});var h=function(e){function t(t,n,r,i,o){var s=e.call(this)||this;return s.name=t,s.text=n,s.fullName=r,s.data=i,s.rowValue=o,s}return r.b(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.rowValue},set:function(e){this.rowValue=e,this.data&&this.data.onMatrixRowChanged(this),this.onValueChanged()},enumerable:!0,configurable:!0}),t.prototype.onValueChanged=function(){},t}(i.b),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.isRowChanging=!1,n.isAllRowRequired=!1,n.columnsValue=o.a.createArray(n),n.rowsValue=o.a.createArray(n),n}return r.b(t,e),t.prototype.getType=function(){return"matrix"},Object.defineProperty(t.prototype,"hasRows",{get:function(){return this.rowsValue.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columns",{get:function(){return this.columnsValue},set:function(e){o.a.setData(this.columnsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.rowsValue},set:function(e){o.a.setData(this.rowsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRows",{get:function(){var e=new Array,t=this.value;t||(t={});for(var n=0;nt.MaxRowCount)){if(this.rowCountValue=e,this.value&&this.value.length>e){var n=this.value;n.splice(e),this.value=n}this.fireCallback(this.rowCountChangedCallback)}},enumerable:!0,configurable:!0}),t.prototype.addRow=function(){this.generatedVisibleRows&&this.generatedVisibleRows.push(this.createMatrixRow(null)),this.rowCount++},t.prototype.removeRow=function(e){if(!(e<0||e>=this.rowCount)){if(this.generatedVisibleRows&&ethis.rowCount&&t.splice(this.rowCount-1);for(var n=t.length;n0){n=!1;break}return n?null:e},t.prototype.getRowValueByIndex=function(e,t){return t>=0&&t4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getRows=function(){for(var e=this.colCount,t=this.items,n=[],r=0,i=0;i=e&&(r=0);return n},t.prototype.onValueChanged=function(){e.prototype.onValueChanged.call(this),this.onItemValueChanged()},t.prototype.createTextItem=function(e,t){return new h(e,t)},t.prototype.onItemValueChanged=function(){if(!this.isMultipleItemValueChanging)for(var e=0;e0?this.rateValues:t.defaultRateValues},enumerable:!0,configurable:!0}),t.prototype.getType=function(){return"rating"},t.prototype.supportGoNextPageAutomatic=function(){return!0},t.prototype.supportComment=function(){return!0},t.prototype.supportOther=function(){return!0},Object.defineProperty(t.prototype,"minRateDescription",{get:function(){return this.locMinRateDescription.text},set:function(e){this.locMinRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMinRateDescription",{get:function(){return this.locMinRateDescriptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxRateDescription",{get:function(){return this.locMaxRateDescription.text},set:function(e){this.locMaxRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMaxRateDescription",{get:function(){return this.locMaxRateDescriptionValue},enumerable:!0,configurable:!0}),t}(o.a);l.defaultRateValues=[],i.a.setData(l.defaultRateValues,[1,2,3,4,5]),s.a.metaData.addClass("rating",["hasComment:boolean",{name:"rateValues:itemvalues",onGetValue:function(e){return i.a.getData(e.rateValues)},onSetValue:function(e,t){e.rateValues=t}},{name:"minRateDescription",alternativeName:"mininumRateDescription",serializationProperty:"locMinRateDescription"},{name:"maxRateDescription",alternativeName:"maximumRateDescription",serializationProperty:"locMaxRateDescription"}],function(){return new l("")},"question"),a.a.Instance.registerQuestion("rating",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(5),o=n(3),s=n(10),a=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.size=25,n.inputType="text",n.locPlaceHolderValue=new a.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"text"},t.prototype.isEmpty=function(){return e.prototype.isEmpty.call(this)||""==this.value},t.prototype.supportGoNextPageAutomatic=function(){return!0},Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),t.prototype.setNewValue=function(t){t=this.correctValueType(t),e.prototype.setNewValue.call(this,t)},t.prototype.correctValueType=function(e){return e&&("number"==this.inputType||"range"==this.inputType)?this.isNumber(e)?parseFloat(e):"":e},t.prototype.isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},t}(s.a);o.a.metaData.addClass("text",[{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]},{name:"size:number",default:25},{name:"placeHolder",serializationProperty:"locPlaceHolder"}],function(){return new u("")},"question"),i.a.Instance.registerQuestion("text",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(2),o=(n.n(i),n(8)),s=n(12),a=n(6);n.d(t,"a",function(){return u}),n.d(t,"b",function(){return l});var u=function(e){function t(t){var n=e.call(this,t)||this;n.state={choicesChanged:0};var r=n;return n.question.choicesChangedCallback=function(){r.state.choicesChanged=r.state.choicesChanged+1,r.setState(r.state)},n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.render=function(){return this.question?i.createElement("div",{className:this.css.root},this.getItems()):null},t.prototype.getItems=function(){for(var e=[],t=0;t-1&&t.splice(n,1),this.question.value=t,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.item||!this.question)return null;var e=this.question.colCount>0?100/this.question.colCount+"%":"",t=0==this.question.colCount?"5px":"0px",n={marginRight:t};e&&(n.width=e);var r=this.question.value&&this.question.value.indexOf(this.item.value)>-1||!1,i=this.item.value===this.question.otherItem.value&&r?this.renderOther():null;return this.renderCheckbox(r,n,i)},Object.defineProperty(t.prototype,"inputStyle",{get:function(){return{marginRight:"3px"}},enumerable:!0,configurable:!0}),t.prototype.renderCheckbox=function(e,t,n){var r=this.isFirst?this.question.inputId:null;return i.createElement("div",{className:this.css.item,style:t},i.createElement("label",{className:this.css.item},i.createElement("input",{type:"checkbox",id:r,style:this.inputStyle,disabled:this.isDisplayMode,checked:e,onChange:this.handleOnChange}),i.createElement("span",null,this.item.text)),n)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.css.other},i.createElement(s.a,{question:this.question,css:this.rootCss,isDisplayMode:this.isDisplayMode}))},t}(o.a);a.a.Instance.registerQuestion("checkbox",function(e){return i.createElement(u,e)})},function(e,t,n){"use strict";var r=n(0),i=n(2),o=(n.n(i),n(8)),s=n(12),a=n(6),u=n(82);n.d(t,"a",function(){return l});var l=function(e){function t(t){var n=e.call(this,t)||this;n.state={value:n.question.value,choicesChanged:0};var r=n;return n.question.choicesChangedCallback=function(){r.state.choicesChanged=r.state.choicesChanged+1,r.setState(r.state)},n.handleOnChange=n.handleOnChange.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.state.value=this.question.value},t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;var e=this.question.value===this.question.otherItem.value?this.renderOther():null,t=this.renderSelect();return i.createElement("div",{className:this.css.root},t,e)},t.prototype.renderSelect=function(){if(this.isDisplayMode)return i.createElement("div",{id:this.question.inputId,className:this.css.control},this.question.value);for(var e=[],t=0;t0?100/this.question.colCount+"%":"",i=0==this.question.colCount?"5px":"0px",o={marginRight:i};r&&(o.width=r);var s=this.question.value==t.value,a=s&&t.value===this.question.otherItem.value?this.renderOther():null;return this.renderRadio(e,t,s,o,a,n)},t.prototype.renderRadio=function(e,t,n,r,o,s){var a=s?this.question.inputId:null;return i.createElement("div",{key:e,className:this.css.item,style:r},i.createElement("label",{className:this.css.label},i.createElement("input",{id:a,type:"radio",name:this.question.name+"_"+this.questionBase.id,checked:n,value:t.value,disabled:this.isDisplayMode,onChange:this.handleOnChange}),i.createElement("span",{style:this.textStyle},t.text)),o)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.css.other},i.createElement(s.a,{question:this.question,css:this.rootCss,isDisplayMode:this.isDisplayMode}))},t}(o.b);a.a.Instance.registerQuestion("radiogroup",function(e){return i.createElement(u,e)})},function(e,t,n){"use strict";var r=n(0),i=n(2),o=(n.n(i),n(8)),s=n(12),a=n(6);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.handleOnChange=n.handleOnChange.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;for(var e=[],t=this.question.minRateDescription?this.question.minRateDescription+" ":"",n=this.question.maxRateDescription?" "+this.question.maxRateDescription:"",r=0;r-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},t.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"operator",{get:function(){return this.opValue},set:function(e){e&&(e=e.toLowerCase(),t.operators[e]&&(this.opValue=e))},enumerable:!0,configurable:!0}),t.prototype.check=function(e){t.operators[this.operator](e,this.value)?this.onSuccess():this.onFailure()},t.prototype.onSuccess=function(){},t.prototype.onFailure=function(){},t}(i.b);s.operatorsValue=null;var a=function(e){function t(){var t=e.call(this)||this;return t.owner=null,t}return r.b(t,e),t.prototype.setOwner=function(e){this.owner=e},Object.defineProperty(t.prototype,"isOnNextPage",{get:function(){return!1},enumerable:!0,configurable:!0}),t}(s),u=function(e){function t(){var t=e.call(this)||this;return t.pages=[],t.questions=[],t}return r.b(t,e),t.prototype.getType=function(){return"visibletrigger"},t.prototype.onSuccess=function(){this.onTrigger(this.onItemSuccess)},t.prototype.onFailure=function(){this.onTrigger(this.onItemFailure)},t.prototype.onTrigger=function(e){if(this.owner)for(var t=this.owner.getObjects(this.pages,this.questions),n=0;n= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return JsonObjectProperty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return JsonMetadataClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return JsonMetadata; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return JsonError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return JsonUnknownPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return JsonMissingTypeErrorBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return JsonMissingTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return JsonIncorrectTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return JsonRequiredPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return JsonObject; }); + +var JsonObjectProperty = (function () { + function JsonObjectProperty(name) { + this.name = name; + this.typeValue = null; + this.choicesValue = null; + this.choicesfunc = null; + this.className = null; + this.alternativeName = null; + this.classNamePart = null; + this.baseClassName = null; + this.defaultValue = null; + this.readOnly = false; + this.visible = true; + this.isLocalizable = false; + this.serializationProperty = null; + this.onGetValue = null; + } + Object.defineProperty(JsonObjectProperty.prototype, "type", { + get: function () { return this.typeValue ? this.typeValue : "string"; }, + set: function (value) { this.typeValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseGetValue", { + get: function () { return this.onGetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.isDefaultValue = function (value) { + return (this.defaultValue) ? (this.defaultValue == value) : !(value); + }; + JsonObjectProperty.prototype.getValue = function (obj) { + if (this.onGetValue) + return this.onGetValue(obj); + if (this.serializationProperty) + return obj[this.serializationProperty].getJson(); + return obj[this.name]; + }; + JsonObjectProperty.prototype.getPropertyValue = function (obj) { + if (this.isLocalizable) + return obj[this.serializationProperty].text; + return this.getValue(obj); + }; + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseSetValue", { + get: function () { return this.onSetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) { + if (this.onSetValue) { + this.onSetValue(obj, value, jsonConv); + } + else { + if (this.serializationProperty) + obj[this.serializationProperty].setJson(value); + else + obj[this.name] = value; + } + }; + JsonObjectProperty.prototype.getObjType = function (objType) { + if (!this.classNamePart) + return objType; + return objType.replace(this.classNamePart, ""); + }; + JsonObjectProperty.prototype.getClassName = function (className) { + return (this.classNamePart && className.indexOf(this.classNamePart) < 0) ? className + this.classNamePart : className; + }; + Object.defineProperty(JsonObjectProperty.prototype, "choices", { + get: function () { + if (this.choicesValue != null) + return this.choicesValue; + if (this.choicesfunc != null) + return this.choicesfunc(); + return null; + }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setChoices = function (value, valueFunc) { + this.choicesValue = value; + this.choicesfunc = valueFunc; + }; + return JsonObjectProperty; +}()); + +var JsonMetadataClass = (function () { + function JsonMetadataClass(name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + this.name = name; + this.creator = creator; + this.parentName = parentName; + this.properties = null; + this.requiredProperties = null; + this.properties = new Array(); + for (var i = 0; i < properties.length; i++) { + var prop = this.createProperty(properties[i]); + if (prop) { + this.properties.push(prop); + } + } + } + JsonMetadataClass.prototype.find = function (name) { + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == name) + return this.properties[i]; + } + return null; + }; + JsonMetadataClass.prototype.createProperty = function (propInfo) { + var propertyName = typeof propInfo === "string" ? propInfo : propInfo.name; + if (!propertyName) + return; + var propertyType = null; + var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol); + if (typeIndex > -1) { + propertyType = propertyName.substring(typeIndex + 1); + propertyName = propertyName.substring(0, typeIndex); + } + propertyName = this.getPropertyName(propertyName); + var prop = new JsonObjectProperty(propertyName); + if (propertyType) { + prop.type = propertyType; + } + if (typeof propInfo === "object") { + if (propInfo.type) { + prop.type = propInfo.type; + } + if (propInfo.default) { + prop.defaultValue = propInfo.default; + } + if (propInfo.visible === false) { + prop.visible = false; + } + if (propInfo.isRequired) { + this.makePropertyRequired(prop.name); + } + if (propInfo.choices) { + var choicesFunc = typeof propInfo.choices === "function" ? propInfo.choices : null; + var choicesValue = typeof propInfo.choices !== "function" ? propInfo.choices : null; + prop.setChoices(choicesValue, choicesFunc); + } + if (propInfo.onGetValue) { + prop.onGetValue = propInfo.onGetValue; + } + if (propInfo.onSetValue) { + prop.onSetValue = propInfo.onSetValue; + } + if (propInfo.serializationProperty) { + prop.serializationProperty = propInfo.serializationProperty; + var s; + if (prop.serializationProperty && prop.serializationProperty.indexOf("loc") == 0) { + prop.isLocalizable = true; + } + } + if (propInfo.isLocalizable) { + prop.isLocalizable = propInfo.isLocalizable; + } + if (propInfo.className) { + prop.className = propInfo.className; + } + if (propInfo.baseClassName) { + prop.baseClassName = propInfo.baseClassName; + } + if (propInfo.classNamePart) { + prop.classNamePart = propInfo.classNamePart; + } + if (propInfo.alternativeName) { + prop.alternativeName = propInfo.alternativeName; + } + } + return prop; + }; + JsonMetadataClass.prototype.getPropertyName = function (propertyName) { + if (propertyName.length == 0 || propertyName[0] != JsonMetadataClass.requiredSymbol) + return propertyName; + propertyName = propertyName.slice(1); + this.makePropertyRequired(propertyName); + return propertyName; + }; + JsonMetadataClass.prototype.makePropertyRequired = function (propertyName) { + if (!this.requiredProperties) { + this.requiredProperties = new Array(); + } + this.requiredProperties.push(propertyName); + }; + return JsonMetadataClass; +}()); + +JsonMetadataClass.requiredSymbol = '!'; +JsonMetadataClass.typeSymbol = ':'; +var JsonMetadata = (function () { + function JsonMetadata() { + this.classes = {}; + this.childrenClasses = {}; + this.classProperties = {}; + this.classRequiredProperties = {}; + } + JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName); + this.classes[name] = metaDataClass; + if (parentName) { + var children = this.childrenClasses[parentName]; + if (!children) { + this.childrenClasses[parentName] = []; + } + this.childrenClasses[parentName].push(metaDataClass); + } + return metaDataClass; + }; + JsonMetadata.prototype.overrideClassCreatore = function (name, creator) { + var metaDataClass = this.findClass(name); + if (metaDataClass) { + metaDataClass.creator = creator; + } + }; + JsonMetadata.prototype.getProperties = function (className) { + var properties = this.classProperties[className]; + if (!properties) { + properties = new Array(); + this.fillProperties(className, properties); + this.classProperties[className] = properties; + } + return properties; + }; + JsonMetadata.prototype.findProperty = function (className, propertyName) { + var properties = this.getProperties(className); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == propertyName) + return properties[i]; + } + return null; + }; + JsonMetadata.prototype.createClass = function (name) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return null; + return metaDataClass.creator(); + }; + JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) { + if (canBeCreated === void 0) { canBeCreated = false; } + var result = []; + this.fillChildrenClasses(name, canBeCreated, result); + return result; + }; + JsonMetadata.prototype.getRequiredProperties = function (name) { + var properties = this.classRequiredProperties[name]; + if (!properties) { + properties = new Array(); + this.fillRequiredProperties(name, properties); + this.classRequiredProperties[name] = properties; + } + return properties; + }; + JsonMetadata.prototype.addProperty = function (className, propertyInfo) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return; + var property = metaDataClass.createProperty(propertyInfo); + if (property) { + this.addPropertyToClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.removeProperty = function (className, propertyName) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return false; + var property = metaDataClass.find(propertyName); + if (property) { + this.removePropertyFromClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) { + if (metaDataClass.find(property.name) != null) + return; + metaDataClass.properties.push(property); + }; + JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) { + var index = metaDataClass.properties.indexOf(property); + if (index < 0) + return; + metaDataClass.properties.splice(index, 1); + if (metaDataClass.requiredProperties) { + index = metaDataClass.requiredProperties.indexOf(property.name); + if (index >= 0) { + metaDataClass.requiredProperties.splice(index, 1); + } + } + }; + JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) { + this.classProperties[metaDataClass.name] = null; + var childClasses = this.getChildrenClasses(metaDataClass.name); + for (var i = 0; i < childClasses.length; i++) { + this.classProperties[childClasses[i].name] = null; + } + }; + JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) { + var children = this.childrenClasses[name]; + if (!children) + return; + for (var i = 0; i < children.length; i++) { + if (!canBeCreated || children[i].creator) { + result.push(children[i]); + } + this.fillChildrenClasses(children[i].name, canBeCreated, result); + } + }; + JsonMetadata.prototype.findClass = function (name) { + return this.classes[name]; + }; + JsonMetadata.prototype.fillProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.parentName) { + this.fillProperties(metaDataClass.parentName, list); + } + for (var i = 0; i < metaDataClass.properties.length; i++) { + this.addPropertyCore(metaDataClass.properties[i], list, list.length); + } + }; + JsonMetadata.prototype.addPropertyCore = function (property, list, endIndex) { + var index = -1; + for (var i = 0; i < endIndex; i++) { + if (list[i].name == property.name) { + index = i; + break; + } + } + if (index < 0) { + list.push(property); + } + else { + list[index] = property; + } + }; + JsonMetadata.prototype.fillRequiredProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.requiredProperties) { + Array.prototype.push.apply(list, metaDataClass.requiredProperties); + } + if (metaDataClass.parentName) { + this.fillRequiredProperties(metaDataClass.parentName, list); + } + }; + return JsonMetadata; +}()); + +var JsonError = (function () { + function JsonError(type, message) { + this.type = type; + this.message = message; + this.description = ""; + this.at = -1; + } + JsonError.prototype.getFullDescription = function () { + return this.message + (this.description ? "\n" + this.description : ""); + }; + return JsonError; +}()); + +var JsonUnknownPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonUnknownPropertyError, _super); + function JsonUnknownPropertyError(propertyName, className) { + var _this = _super.call(this, "unknownproperty", "The property '" + propertyName + "' in class '" + className + "' is unknown.") || this; + _this.propertyName = propertyName; + _this.className = className; + var properties = JsonObject.metaData.getProperties(className); + if (properties) { + _this.description = "The list of available properties are: "; + for (var i = 0; i < properties.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += properties[i].name; + } + _this.description += '.'; + } + return _this; + } + return JsonUnknownPropertyError; +}(JsonError)); + +var JsonMissingTypeErrorBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeErrorBase, _super); + function JsonMissingTypeErrorBase(baseClassName, type, message) { + var _this = _super.call(this, type, message) || this; + _this.baseClassName = baseClassName; + _this.type = type; + _this.message = message; + _this.description = "The following types are available: "; + var types = JsonObject.metaData.getChildrenClasses(baseClassName, true); + for (var i = 0; i < types.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += "'" + types[i].name + "'"; + } + _this.description += "."; + return _this; + } + return JsonMissingTypeErrorBase; +}(JsonError)); + +var JsonMissingTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeError, _super); + function JsonMissingTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "missingtypeproperty", "The property type is missing in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonMissingTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonIncorrectTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonIncorrectTypeError, _super); + function JsonIncorrectTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "incorrecttypeproperty", "The property type is incorrect in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonIncorrectTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonRequiredPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonRequiredPropertyError, _super); + function JsonRequiredPropertyError(propertyName, className) { + var _this = _super.call(this, "requiredproperty", "The property '" + propertyName + "' is required in class '" + className + "'.") || this; + _this.propertyName = propertyName; + _this.className = className; + return _this; + } + return JsonRequiredPropertyError; +}(JsonError)); + +var JsonObject = (function () { + function JsonObject() { + this.errors = new Array(); + } + Object.defineProperty(JsonObject, "metaData", { + get: function () { return JsonObject.metaDataValue; }, + enumerable: true, + configurable: true + }); + JsonObject.prototype.toJsonObject = function (obj) { + return this.toJsonObjectCore(obj, null); + }; + JsonObject.prototype.toObject = function (jsonObj, obj) { + if (!jsonObj) + return; + var properties = null; + if (obj.getType) { + properties = JsonObject.metaData.getProperties(obj.getType()); + } + if (!properties) + return; + for (var key in jsonObj) { + if (key == JsonObject.typePropertyName) + continue; + if (key == JsonObject.positionPropertyName) { + obj[key] = jsonObj[key]; + continue; + } + var property = this.findProperty(properties, key); + if (!property) { + this.addNewError(new JsonUnknownPropertyError(key.toString(), obj.getType()), jsonObj); + continue; + } + this.valueToObj(jsonObj[key], obj, key, property); + } + }; + JsonObject.prototype.toJsonObjectCore = function (obj, property) { + if (!obj.getType) + return obj; + var result = {}; + if (property != null && (!property.className)) { + result[JsonObject.typePropertyName] = property.getObjType(obj.getType()); + } + var properties = JsonObject.metaData.getProperties(obj.getType()); + for (var i = 0; i < properties.length; i++) { + this.valueToJson(obj, result, properties[i]); + } + return result; + }; + JsonObject.prototype.valueToJson = function (obj, result, property) { + var value = property.getValue(obj); + if (value === undefined || value === null) + return; + if (property.isDefaultValue(value)) + return; + if (this.isValueArray(value)) { + var arrValue = []; + for (var i = 0; i < value.length; i++) { + arrValue.push(this.toJsonObjectCore(value[i], property)); + } + value = arrValue.length > 0 ? arrValue : null; + } + else { + value = this.toJsonObjectCore(value, property); + } + if (!property.isDefaultValue(value)) { + result[property.name] = value; + } + }; + JsonObject.prototype.valueToObj = function (value, obj, key, property) { + if (value == null) + return; + if (property != null && property.hasToUseSetValue) { + property.setValue(obj, value, this); + return; + } + if (this.isValueArray(value)) { + this.valueToArray(value, obj, property.name, property); + return; + } + var newObj = this.createNewObj(value, property); + if (newObj.newObj) { + this.toObject(value, newObj.newObj); + value = newObj.newObj; + } + if (!newObj.error) { + obj[property.name] = value; + } + }; + JsonObject.prototype.isValueArray = function (value) { return value && Array.isArray(value); }; + JsonObject.prototype.createNewObj = function (value, property) { + var result = { newObj: null, error: null }; + var className = value[JsonObject.typePropertyName]; + if (!className && property != null && property.className) { + className = property.className; + } + className = property.getClassName(className); + result.newObj = (className) ? JsonObject.metaData.createClass(className) : null; + result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className); + return result; + }; + JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) { + var error = null; + if (newObj) { + var requiredProperties = JsonObject.metaData.getRequiredProperties(className); + if (requiredProperties) { + for (var i = 0; i < requiredProperties.length; i++) { + if (!value[requiredProperties[i]]) { + error = new JsonRequiredPropertyError(requiredProperties[i], className); + break; + } + } + } + } + else { + if (property.baseClassName) { + if (!className) { + error = new JsonMissingTypeError(property.name, property.baseClassName); + } + else { + error = new JsonIncorrectTypeError(property.name, property.baseClassName); + } + } + } + if (error) { + this.addNewError(error, value); + } + return error; + }; + JsonObject.prototype.addNewError = function (error, jsonObj) { + if (jsonObj && jsonObj[JsonObject.positionPropertyName]) { + error.at = jsonObj[JsonObject.positionPropertyName].start; + } + this.errors.push(error); + }; + JsonObject.prototype.valueToArray = function (value, obj, key, property) { + if (obj[key] && value.length > 0) + obj[key].splice(0, obj[key].length); + for (var i = 0; i < value.length; i++) { + var newValue = this.createNewObj(value[i], property); + if (newValue.newObj) { + obj[key].push(newValue.newObj); + this.toObject(value[i], newValue.newObj); + } + else { + if (!newValue.error) { + obj[key].push(value[i]); + } + } + } + }; + JsonObject.prototype.findProperty = function (properties, key) { + if (!properties) + return null; + for (var i = 0; i < properties.length; i++) { + var prop = properties[i]; + if (prop.name == key || prop.alternativeName == key) + return prop; + } + return null; + }; + return JsonObject; +}()); + +JsonObject.typePropertyName = "type"; +JsonObject.positionPropertyName = "pos"; +JsonObject.metaDataValue = new JsonMetadata(); + + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ElementFactory; }); + +//TODO replace completely with ElementFactory +var QuestionFactory = (function () { + function QuestionFactory() { + this.creatorHash = {}; + } + Object.defineProperty(QuestionFactory, "DefaultChoices", { + get: function () { + return ["1|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_firstItem"), "2|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_secondItem"), "3|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_thirdItem")]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultColums", { + get: function () { + var colName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_column") + " "; + return [colName + "1", colName + "2", colName + "3"]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultRows", { + get: function () { + var rowName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_row") + " "; + return [rowName + "1", rowName + "2"]; + }, + enumerable: true, + configurable: true + }); + QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + QuestionFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + QuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + QuestionFactory.prototype.createQuestion = function (questionType, name) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(name); + }; + return QuestionFactory; +}()); + +QuestionFactory.Instance = new QuestionFactory(); +var ElementFactory = (function () { + function ElementFactory() { + this.creatorHash = {}; + } + ElementFactory.prototype.registerElement = function (elementType, elementCreator) { + this.creatorHash[elementType] = elementCreator; + }; + ElementFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + ElementFactory.prototype.getAllTypes = function () { + var result = QuestionFactory.Instance.getAllTypes(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ElementFactory.prototype.createElement = function (elementType, name) { + var creator = this.creatorHash[elementType]; + if (creator == null) + return QuestionFactory.Instance.createQuestion(elementType, name); + return creator(name); + }; + return ElementFactory; +}()); + +ElementFactory.Instance = new ElementFactory(); + + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyLocalization; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyStrings; }); +var surveyLocalization = { + currentLocale: "", + locales: {}, + getString: function (strName) { + var loc = this.currentLocale ? this.locales[this.currentLocale] : surveyStrings; + if (!loc || !loc[strName]) + loc = surveyStrings; + return loc[strName]; + }, + getLocales: function () { + var res = []; + res.push(""); + for (var key in this.locales) { + res.push(key); + } + res.sort(); + return res; + } +}; +var surveyStrings = { + pagePrevText: "Previous", + pageNextText: "Next", + completeText: "Complete", + otherItemText: "Other (describe)", + progressText: "Page {0} of {1}", + emptySurvey: "There is no visible page or question in the survey.", + completingSurvey: "Thank you for completing the survey!", + loadingSurvey: "Survey is loading...", + optionsCaption: "Choose...", + requiredError: "Please answer the question.", + requiredInAllRowsError: "Please answer questions in all rows.", + numericError: "The value should be numeric.", + textMinLength: "Please enter at least {0} symbols.", + textMaxLength: "Please enter less than {0} symbols.", + textMinMaxLength: "Please enter more than {0} and less than {1} symbols.", + minRowCountError: "Please fill in at least {0} rows.", + minSelectError: "Please select at least {0} variants.", + maxSelectError: "Please select no more than {0} variants.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "The '{0}' should be equal or more than {1}", + numericMax: "The '{0}' should be equal or less than {1}", + invalidEmail: "Please enter a valid e-mail address.", + urlRequestError: "The request returned error '{0}'. {1}", + urlGetChoicesError: "The request returned empty data or the 'path' property is incorrect", + exceedMaxSize: "The file size should not exceed {0}.", + otherRequiredError: "Please enter the other value.", + uploadingFile: "Your file is uploading. Please wait several seconds and try again.", + addRow: "Add row", + removeRow: "Remove", + choices_firstItem: "first item", + choices_secondItem: "second item", + choices_thirdItem: "third item", + matrix_column: "Column", + matrix_row: "Row" +}; +surveyLocalization.locales["en"] = surveyStrings; +if (!String.prototype["format"]) { + String.prototype["format"] = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match; + }); + }; +} + + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Base; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyPageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Event; }); +var Base = (function () { + function Base() { + } + Base.prototype.getType = function () { + throw new Error('This method is abstract'); + }; + Base.prototype.isTwoValueEquals = function (x, y) { + if (x === y) + return true; + if (!(x instanceof Object) || !(y instanceof Object)) + return false; + for (var p in x) { + if (!x.hasOwnProperty(p)) + continue; + if (!y.hasOwnProperty(p)) + return false; + if (x[p] === y[p]) + continue; + if (typeof (x[p]) !== "object") + return false; + if (!this.isTwoValueEquals(x[p], y[p])) + return false; + } + for (p in y) { + if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) + return false; + } + return true; + }; + return Base; +}()); + +var SurveyError = (function () { + function SurveyError() { + } + SurveyError.prototype.getText = function () { + throw new Error('This method is abstract'); + }; + return SurveyError; +}()); + +var SurveyPageId; +SurveyPageId = "sq_page"; +var SurveyElement = (function () { + function SurveyElement() { + } + SurveyElement.ScrollElementToTop = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (!el || !el.scrollIntoView) + return false; + var elemTop = el.getBoundingClientRect().top; + if (elemTop < 0) + el.scrollIntoView(); + return elemTop < 0; + }; + SurveyElement.GetFirstNonTextElement = function (elements) { + if (!elements || !elements.length) + return; + for (var i = 0; i < elements.length; i++) { + if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") + return elements[i]; + } + return null; + }; + SurveyElement.FocusElement = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (el) { + el.focus(); + return true; + } + return false; + }; + return SurveyElement; +}()); + +var Event = (function () { + function Event() { + } + Object.defineProperty(Event.prototype, "isEmpty", { + get: function () { return this.callbacks == null || this.callbacks.length == 0; }, + enumerable: true, + configurable: true + }); + Event.prototype.fire = function (sender, options) { + if (this.callbacks == null) + return; + for (var i = 0; i < this.callbacks.length; i++) { + var callResult = this.callbacks[i](sender, options); + } + }; + Event.prototype.add = function (func) { + if (this.callbacks == null) { + this.callbacks = new Array(); + } + this.callbacks.push(func); + }; + Event.prototype.remove = function (func) { + if (this.callbacks == null) + return; + var index = this.callbacks.indexOf(func, 0); + if (index != undefined) { + this.callbacks.splice(index, 1); + } + }; + return Event; +}()); + + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LocalizableString; }); +var LocalizableString = (function () { + function LocalizableString(owner) { + this.owner = owner; + this.values = {}; + } + Object.defineProperty(LocalizableString.prototype, "locale", { + get: function () { return this.owner ? this.owner.getLocale() : ""; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LocalizableString.prototype, "text", { + get: function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return ""; + var loc = this.locale; + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + if (!res && loc !== LocalizableString.defaultLocale) { + res = this.values[LocalizableString.defaultLocale]; + } + return res ? res : this.values[keys[0]]; + }, + set: function (value) { + this.setLocaleText(this.locale, value); + }, + enumerable: true, + configurable: true + }); + LocalizableString.prototype.getLocaleText = function (loc) { + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + return res ? res : ""; + }; + LocalizableString.prototype.setLocaleText = function (loc, value) { + if (!loc) + loc = LocalizableString.defaultLocale; + if (!value) { + if (this.values[loc]) + delete this.values[loc]; + } + else { + if (typeof value === 'string') { + if (loc != LocalizableString.defaultLocale && value == this.getLocaleText(LocalizableString.defaultLocale)) { + this.setLocaleText(loc, null); + } + else { + this.values[loc] = value; + if (loc == LocalizableString.defaultLocale) { + this.deleteValuesEqualsToDefault(value); + } + } + } + } + }; + LocalizableString.prototype.getJson = function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return null; + if (keys.length == 1 && keys[0] == LocalizableString.defaultLocale) + return this.values[keys[0]]; + return this.values; + }; + LocalizableString.prototype.setJson = function (value) { + this.values = {}; + if (!value) + return; + if (typeof value === 'string') { + this.setLocaleText(null, value); + } + else { + for (var key in value) { + this.setLocaleText(key, value[key]); + } + } + }; + LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) { + var keys = Object.keys(this.values); + for (var i = 0; i < keys.length; i++) { + if (keys[i] == LocalizableString.defaultLocale) + continue; + if (this.values[keys[i]] == defaultValue) + delete this.values[keys[i]]; + } + }; + return LocalizableString; +}()); + +LocalizableString.defaultLocale = "default"; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_6__; + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__koquestionbase__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionImplementor; }); + + + + +var QuestionImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionImplementor, _super); + function QuestionImplementor(question) { + var _this = _super.call(this, question) || this; + _this.question = question; + _this.isUpdating = false; + var self = _this; + question.valueChangedCallback = function () { self.onValueChanged(); }; + question.commentChangedCallback = function () { self.onCommentChanged(); }; + question.errorsChangedCallback = function () { self.onErrorsChanged(); }; + question.titleChangedCallback = function () { self.onVisibleIndexChanged(); }; + question.visibleIndexChangedCallback = function () { self.onVisibleIndexChanged(); }; + question.readOnlyChangedCallback = function () { self.onReadOnlyChanged(); }; + _this.koDummy = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](0); + _this.koValue = _this.createkoValue(); + _this.koComment = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.question.comment); + _this.koTitle = __WEBPACK_IMPORTED_MODULE_1_knockout__["pureComputed"](function () { self.koDummy(); return self.question.fullTitle; }); + _this.koErrors(_this.question.errors); + _this.koIsReadOnly = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.question.isReadOnly); + _this.koValue.subscribe(function (newValue) { + self.updateValue(newValue); + }); + _this.koComment.subscribe(function (newValue) { + self.updateComment(newValue); + }); + _this.question["koValue"] = _this.koValue; + _this.question["koComment"] = _this.koComment; + _this.question["koTitle"] = _this.koTitle; + _this.question["koIsReadOnly"] = _this.koIsReadOnly; + _this.question["koQuestionAfterRender"] = function (el, con) { self.koQuestionAfterRender(el, con); }; + return _this; + } + QuestionImplementor.prototype.updateQuestion = function () { + this.koDummy(this.koDummy() + 1); + }; + QuestionImplementor.prototype.onValueChanged = function () { + if (this.isUpdating) + return; + this.setkoValue(this.question.value); + }; + QuestionImplementor.prototype.onCommentChanged = function () { + if (this.isUpdating) + return; + this.koComment(this.question.comment); + }; + QuestionImplementor.prototype.onVisibleIndexChanged = function () { + this.koDummy(this.koDummy() + 1); + }; + QuestionImplementor.prototype.onReadOnlyChanged = function () { + this.koIsReadOnly(this.question.isReadOnly); + }; + QuestionImplementor.prototype.onErrorsChanged = function () { + this.koErrors(this.question.errors); + }; + QuestionImplementor.prototype.createkoValue = function () { return __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.question.value); }; + QuestionImplementor.prototype.setkoValue = function (newValue) { + this.koValue(newValue); + }; + QuestionImplementor.prototype.updateValue = function (newValue) { + this.isUpdating = true; + this.question.value = newValue; + this.isUpdating = false; + }; + QuestionImplementor.prototype.updateComment = function (newValue) { + this.isUpdating = true; + this.question.comment = newValue; + this.isUpdating = false; + }; + QuestionImplementor.prototype.getNo = function () { + return this.question.visibleIndex > -1 ? this.question.visibleIndex + 1 + ". " : ""; + }; + QuestionImplementor.prototype.koQuestionAfterRender = function (elements, con) { + var el = __WEBPACK_IMPORTED_MODULE_3__base__["c" /* SurveyElement */].GetFirstNonTextElement(elements); + var tEl = elements[0]; + if (tEl.nodeName == "#text") + tEl.data = ""; + tEl = elements[elements.length - 1]; + if (tEl.nodeName == "#text") + tEl.data = ""; + if (el && this.question.customWidget) + this.question.customWidget.afterRender(this.question, el); + }; + return QuestionImplementor; +}(__WEBPACK_IMPORTED_MODULE_2__koquestionbase__["a" /* QuestionImplementorBase */])); + + + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AnswerRequiredError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return RequreNumericError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ExceedSizeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomError; }); + + + +var AnswerRequiredError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerRequiredError, _super); + function AnswerRequiredError() { + return _super.call(this) || this; + } + AnswerRequiredError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("requiredError"); + }; + return AnswerRequiredError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var RequreNumericError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RequreNumericError, _super); + function RequreNumericError() { + return _super.call(this) || this; + } + RequreNumericError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("numericError"); + }; + return RequreNumericError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var ExceedSizeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ExceedSizeError, _super); + function ExceedSizeError(maxSize) { + var _this = _super.call(this) || this; + _this.maxSize = maxSize; + return _this; + } + ExceedSizeError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("exceedMaxSize")["format"](this.getTextSize()); + }; + ExceedSizeError.prototype.getTextSize = function () { + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + var fixed = [0, 0, 2, 3, 3]; + if (this.maxSize == 0) + return '0 Byte'; + var i = Math.floor(Math.log(this.maxSize) / Math.log(1024)); + var value = this.maxSize / Math.pow(1024, i); + return value.toFixed(fixed[i]) + ' ' + sizes[i]; + }; + return ExceedSizeError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var CustomError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](CustomError, _super); + function CustomError(text) { + var _this = _super.call(this) || this; + _this.text = text; + return _this; + } + CustomError.prototype.getText = function () { + return this.text; + }; + return CustomError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + + + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionbase__ = __webpack_require__(23); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__validator__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Question; }); + + + + + + + + + +var Question = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Question, _super); + function Question(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRequiredValue = false; + _this.hasCommentValue = false; + _this.hasOtherValue = false; + _this.readOnlyValue = false; + _this.errors = []; + _this.validators = new Array(); + _this.isvalueChangedCallbackFiring = false; + _this.isValueChangedInSurvey = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + _this.locCommentTextValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(Question.prototype, "hasTitle", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasInput", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "inputId", { + get: function () { return this.id + "i"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "title", { + get: function () { + var res = this.locTitle.text; + return res ? res : this.name; + }, + set: function (newValue) { + this.locTitle.text = newValue; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locCommentText", { + get: function () { return this.locCommentTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "processedTitle", { + get: function () { return this.survey != null ? this.survey.processText(this.title) : this.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "fullTitle", { + get: function () { + if (this.survey && this.survey.questionTitleTemplate) { + if (!this.textPreProcessor) { + var self = this; + this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__["a" /* TextPreProcessor */](); + this.textPreProcessor.onHasValue = function (name) { return self.canProcessedTextValues(name.toLowerCase()); }; + this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + } + return this.textPreProcessor.process(this.survey.questionTitleTemplate); + } + var requireText = this.requiredText; + if (requireText) + requireText += " "; + var no = this.no; + if (no) + no += ". "; + return no + requireText + this.processedTitle; + }, + enumerable: true, + configurable: true + }); + Question.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + __WEBPACK_IMPORTED_MODULE_3__base__["c" /* SurveyElement */].ScrollElementToTop(this.id); + var id = !onError ? this.getFirstInputElementId() : this.getFirstErrorInputElementId(); + if (__WEBPACK_IMPORTED_MODULE_3__base__["c" /* SurveyElement */].FocusElement(id)) { + this.fireCallback(this.focusCallback); + } + }; + Question.prototype.getFirstInputElementId = function () { + return this.inputId; + }; + Question.prototype.getFirstErrorInputElementId = function () { + return this.getFirstInputElementId(); + }; + Question.prototype.canProcessedTextValues = function (name) { + return name == "no" || name == "title" || name == "require"; + }; + Question.prototype.getProcessedTextValue = function (name) { + if (name == "no") + return this.no; + if (name == "title") + return this.processedTitle; + if (name == "require") + return this.requiredText; + return null; + }; + Question.prototype.supportComment = function () { return false; }; + Question.prototype.supportOther = function () { return false; }; + Object.defineProperty(Question.prototype, "isRequired", { + get: function () { return this.isRequiredValue; }, + set: function (val) { + if (this.isRequired == val) + return; + this.isRequiredValue = val; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasComment", { + get: function () { return this.hasCommentValue; }, + set: function (val) { + if (!this.supportComment()) + return; + this.hasCommentValue = val; + if (this.hasComment) + this.hasOther = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "commentText", { + get: function () { + var res = this.locCommentText.text; + return res ? res : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + }, + set: function (value) { + this.locCommentText.text = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasOther", { + get: function () { return this.hasOtherValue; }, + set: function (val) { + if (!this.supportOther() || this.hasOther == val) + return; + this.hasOtherValue = val; + if (this.hasOther) + this.hasComment = false; + this.hasOtherChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.hasOtherChanged = function () { }; + Object.defineProperty(Question.prototype, "isReadOnly", { + get: function () { return this.readOnly || (this.survey && this.survey.isDisplayMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "readOnly", { + get: function () { return this.readOnlyValue; }, + set: function (value) { + if (this.readOnly == value) + return; + this.readOnlyValue = value; + this.readOnlyChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.readOnlyChanged = function () { + this.fireCallback(this.readOnlyChangedCallback); + }; + Object.defineProperty(Question.prototype, "no", { + get: function () { + if (this.visibleIndex < 0) + return ""; + var startIndex = 1; + var isNumeric = true; + var str = ""; + if (this.survey && this.survey.questionStartIndex) { + str = this.survey.questionStartIndex; + if (parseInt(str)) + startIndex = parseInt(str); + else if (str.length == 1) + isNumeric = false; + } + if (isNumeric) + return (this.visibleIndex + startIndex).toString(); + return String.fromCharCode(str.charCodeAt(0) + this.visibleIndex); + }, + enumerable: true, + configurable: true + }); + Question.prototype.onSetData = function () { + _super.prototype.onSetData.call(this); + this.onSurveyValueChanged(this.value); + }; + Object.defineProperty(Question.prototype, "value", { + get: function () { + return this.valueFromData(this.getValueCore()); + }, + set: function (newValue) { + this.setNewValue(newValue); + if (this.isvalueChangedCallbackFiring) + return; + this.isvalueChangedCallbackFiring = true; + this.fireCallback(this.valueChangedCallback); + this.isvalueChangedCallbackFiring = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "comment", { + get: function () { return this.getComment(); }, + set: function (newValue) { + if (this.comment == newValue) + return; + this.setComment(newValue); + this.fireCallback(this.commentChangedCallback); + }, + enumerable: true, + configurable: true + }); + Question.prototype.getComment = function () { return this.data != null ? this.data.getComment(this.name) : this.questionComment; }; + Question.prototype.setComment = function (newValue) { + this.setNewComment(newValue); + }; + Question.prototype.isEmpty = function () { return this.value == null; }; + Question.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + this.checkForErrors(fireCallback); + return this.errors.length > 0; + }; + Object.defineProperty(Question.prototype, "currentErrorCount", { + get: function () { return this.errors.length; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "requiredText", { + get: function () { return this.survey != null && this.isRequired ? this.survey.requiredText : ""; }, + enumerable: true, + configurable: true + }); + Question.prototype.addError = function (error) { + this.errors.push(error); + this.fireCallback(this.errorsChangedCallback); + }; + Question.prototype.checkForErrors = function (fireCallback) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + this.onCheckForErrors(this.errors); + if (this.errors.length == 0 && this.value) { + var error = this.runValidators(); + if (error) { + this.errors.push(error); + } + } + if (this.survey && this.errors.length == 0) { + var error = this.survey.validateQuestion(this.name); + if (error) { + this.errors.push(error); + } + } + if (fireCallback && (errorLength != this.errors.length || errorLength > 0)) { + this.fireCallback(this.errorsChangedCallback); + } + }; + Question.prototype.onCheckForErrors = function (errors) { + if (this.hasRequiredError()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["b" /* AnswerRequiredError */]()); + } + }; + Question.prototype.hasRequiredError = function () { + return this.isRequired && this.isEmpty(); + }; + Question.prototype.runValidators = function () { + return new __WEBPACK_IMPORTED_MODULE_6__validator__["a" /* ValidatorRunner */]().run(this); + }; + Question.prototype.setNewValue = function (newValue) { + this.setNewValueInData(newValue); + this.onValueChanged(); + }; + Question.prototype.setNewValueInData = function (newValue) { + if (!this.isValueChangedInSurvey) { + newValue = this.valueToData(newValue); + this.setValueCore(newValue); + } + }; + Question.prototype.getValueCore = function () { + return this.data != null ? this.data.getValue(this.name) : this.questionValue; + }; + Question.prototype.setValueCore = function (newValue) { + if (this.data != null) { + this.data.setValue(this.name, newValue); + } + else { + this.questionValue = newValue; + } + }; + Question.prototype.valueFromData = function (val) { return val; }; + Question.prototype.valueToData = function (val) { return val; }; + Question.prototype.onValueChanged = function () { }; + Question.prototype.setNewComment = function (newValue) { + if (this.data != null) { + this.data.setComment(this.name, newValue); + } + else + this.questionComment = newValue; + }; + //IQuestion + Question.prototype.onSurveyValueChanged = function (newValue) { + this.isValueChangedInSurvey = true; + this.value = this.valueFromData(newValue); + this.fireCallback(this.commentChangedCallback); + this.isValueChangedInSurvey = false; + }; + //IValidatorOwner + Question.prototype.getValidatorTitle = function () { return null; }; + return Question; +}(__WEBPACK_IMPORTED_MODULE_2__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("question", [{ name: "title:text", serializationProperty: "locTitle" }, + { name: "commentText", serializationProperty: "locCommentText" }, + "isRequired:boolean", "readOnly:boolean", { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], null, "questionbase"); + + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemValue; }); + +var ItemValue = (function () { + function ItemValue(value, text) { + if (text === void 0) { text = null; } + this.locTextValue = new __WEBPACK_IMPORTED_MODULE_0__localizablestring__["a" /* LocalizableString */](null); + if (text) + this.locText.text = text; + this.value = value; + } + ItemValue.createArray = function (locOwner) { + var items = []; + ItemValue.setupArray(items, locOwner); + return items; + }; + ItemValue.setupArray = function (items, locOwner) { + items.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = locOwner; + return result; + }; + items.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = locOwner; + } + return result; + var _a; + }; + }; + ItemValue.setData = function (items, values) { + items.length = 0; + for (var i = 0; i < values.length; i++) { + var value = values[i]; + var item = new ItemValue(null); + item.setData(value); + items.push(item); + } + }; + ItemValue.getData = function (items) { + var result = new Array(); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item.hasText) { + result.push({ value: item.value, text: item.locText.getJson() }); + } + else { + result.push(item.value); + } + } + return result; + }; + ItemValue.getItemByValue = function (items, val) { + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return items[i]; + } + return null; + }; + ItemValue.prototype.getType = function () { return "itemvalue"; }; + Object.defineProperty(ItemValue.prototype, "locText", { + get: function () { return this.locTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "locOwner", { + get: function () { return this.locText.owner; }, + set: function (value) { this.locText.owner = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "value", { + get: function () { return this.itemValue; }, + set: function (newValue) { + this.itemValue = newValue; + if (!this.itemValue) + return; + var str = this.itemValue.toString(); + var index = str.indexOf(ItemValue.Separator); + if (index > -1) { + this.itemValue = str.slice(0, index); + this.text = str.slice(index + 1); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "hasText", { + get: function () { return this.locText.text ? true : false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "text", { + get: function () { + if (this.hasText) + return this.locText.text; + if (this.value) + return this.value.toString(); + return null; + }, + set: function (newText) { + this.locText.text = newText; + }, + enumerable: true, + configurable: true + }); + ItemValue.prototype.setData = function (value) { + if (typeof (value.value) !== 'undefined') { + var exception = null; + if (this.isObjItemValue(value)) { + value.itemValue = value.itemValue; + this.locText.setJson(value.locText.getJson()); + exception = ItemValue.itemValueProp; + } + this.copyAttributes(value, exception); + } + else { + this.value = value; + } + }; + ItemValue.prototype.isObjItemValue = function (obj) { return typeof (obj.getType) !== 'undefined' && obj.getType() == 'itemvalue'; }; + ItemValue.prototype.copyAttributes = function (src, exceptons) { + for (var key in src) { + if ((typeof src[key] == 'function')) + continue; + if (exceptons && exceptons.indexOf(key) > -1) + continue; + if (key == "text") { + this.locText.setJson(src[key]); + } + else { + this[key] = src[key]; + } + } + }; + return ItemValue; +}()); + +ItemValue.Separator = '|'; +ItemValue.itemValueProp = ["text", "value", "hasText", "locOwner", "locText"]; + + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__koquestion__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionSelectBaseImplementor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionCheckboxBaseImplementor; }); + + + +var QuestionSelectBaseImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionSelectBaseImplementor, _super); + function QuestionSelectBaseImplementor(question) { + var _this = _super.call(this, question) || this; + var self = _this; + _this.koOtherVisible = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.koValue(); return self.isOtherSelected; }); + _this.koVisibleChoices = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](self.question.visibleChoices); + question.choicesChangedCallback = function () { self.koVisibleChoices(self.question.visibleChoices); }; + _this.question["koOtherVisible"] = _this.koOtherVisible; + _this.question["koVisibleChoices"] = _this.koVisibleChoices; + return _this; + } + Object.defineProperty(QuestionSelectBaseImplementor.prototype, "isOtherSelected", { + get: function () { + return this.question.isOtherSelected; + }, + enumerable: true, + configurable: true + }); + return QuestionSelectBaseImplementor; +}(__WEBPACK_IMPORTED_MODULE_2__koquestion__["a" /* QuestionImplementor */])); + +var QuestionCheckboxBaseImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxBaseImplementor, _super); + function QuestionCheckboxBaseImplementor(question) { + var _this = _super.call(this, question) || this; + _this.koWidth = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.colWidth); + _this.question["koWidth"] = _this.koWidth; + _this.question["koAfterRender"] = _this.koAfterRender; + var self = _this; + _this.question.colCountChangedCallback = function () { self.onColCountChanged(); }; + return _this; + } + QuestionCheckboxBaseImplementor.prototype.onColCountChanged = function () { + this.question["koWidth"] = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.colWidth); + }; + Object.defineProperty(QuestionCheckboxBaseImplementor.prototype, "colWidth", { + get: function () { + var colCount = this.question.colCount; + return colCount > 0 ? (100 / colCount) + '%' : ""; + }, + enumerable: true, + configurable: true + }); + QuestionCheckboxBaseImplementor.prototype.koAfterRender = function (el, con) { + var tEl = el[0]; + if (tEl.nodeName == "#text") + tEl.data = ""; + tEl = el[el.length - 1]; + if (tEl.nodeName == "#text") + tEl.data = ""; + }; + return QuestionCheckboxBaseImplementor; +}(QuestionSelectBaseImplementor)); + + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionSelectBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxBase; }); + + + + + + + + +var QuestionSelectBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionSelectBase, _super); + function QuestionSelectBase(name) { + var _this = _super.call(this, name) || this; + _this.visibleChoicesCache = null; + _this.otherItemValue = new __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */]("other", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText")); + _this.choicesFromUrl = null; + _this.cachedValueForUrlRequestion = null; + _this.storeOthersAsComment = true; + _this.choicesOrderValue = "none"; + _this.isSettingComment = false; + _this.choicesValues = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.choicesByUrl = _this.createRestfull(); + _this.locOtherTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.locOtherErrorTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.choicesByUrl.getResultCallback = function (items) { self.onLoadChoicesFromUrl(items); }; + return _this; + } + Object.defineProperty(QuestionSelectBase.prototype, "otherItem", { + get: function () { + this.otherItemValue.text = this.otherText ? this.otherText : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + return this.otherItemValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "isOtherSelected", { + get: function () { + return this.getStoreOthersAsComment() ? this.getHasOther(this.value) : this.getHasOther(this.cachedValue); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.getHasOther = function (val) { + return val == this.otherItem.value; + }; + QuestionSelectBase.prototype.createRestfull = function () { return new __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__["a" /* ChoicesRestfull */](); }; + QuestionSelectBase.prototype.getComment = function () { + if (this.getStoreOthersAsComment()) + return _super.prototype.getComment.call(this); + return this.commentValue; + }; + QuestionSelectBase.prototype.setComment = function (newValue) { + if (this.getStoreOthersAsComment()) + _super.prototype.setComment.call(this, newValue); + else { + if (!this.isSettingComment && newValue != this.commentValue) { + this.isSettingComment = true; + this.commentValue = newValue; + if (this.isOtherSelected) { + this.setNewValueInData(this.cachedValue); + } + this.isSettingComment = false; + } + } + }; + QuestionSelectBase.prototype.setNewValue = function (newValue) { + if (newValue) + this.cachedValueForUrlRequestion = newValue; + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionSelectBase.prototype.valueFromData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueFromData.call(this, val); + this.cachedValue = this.valueFromDataCore(val); + return this.cachedValue; + }; + QuestionSelectBase.prototype.valueToData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueToData.call(this, val); + this.cachedValue = val; + return this.valueToDataCore(val); + }; + QuestionSelectBase.prototype.valueFromDataCore = function (val) { + if (!this.hasUnknownValue(val)) + return val; + if (val == this.otherItem.value) + return val; + this.comment = val; + return this.otherItem.value; + }; + QuestionSelectBase.prototype.valueToDataCore = function (val) { + if (val == this.otherItem.value && this.getComment()) { + val = this.getComment(); + } + return val; + }; + QuestionSelectBase.prototype.hasUnknownValue = function (val) { + if (!val) + return false; + var items = this.activeChoices; + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return false; + } + return true; + }; + Object.defineProperty(QuestionSelectBase.prototype, "choices", { + get: function () { return this.choicesValues; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.choicesValues, newValue); + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.hasOtherChanged = function () { + this.onVisibleChoicesChanged(); + }; + Object.defineProperty(QuestionSelectBase.prototype, "choicesOrder", { + get: function () { return this.choicesOrderValue; }, + set: function (newValue) { + if (newValue == this.choicesOrderValue) + return; + this.choicesOrderValue = newValue; + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherText", { + get: function () { return this.locOtherText.text; }, + set: function (value) { + this.locOtherText.text = value; + this.updateOtherItem(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherErrorText", { + get: function () { return this.locOtherErrorText.text; }, + set: function (value) { this.locOtherErrorText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherText", { + get: function () { return this.locOtherTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherErrorText", { + get: function () { return this.locOtherErrorTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "visibleChoices", { + get: function () { + if (!this.hasOther && this.choicesOrder == "none") + return this.activeChoices; + if (!this.visibleChoicesCache) { + this.visibleChoicesCache = this.sortVisibleChoices(this.activeChoices.slice()); + if (this.hasOther) { + this.visibleChoicesCache.push(this.otherItem); + } + } + return this.visibleChoicesCache; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "activeChoices", { + get: function () { return this.choicesFromUrl ? this.choicesFromUrl : this.choices; }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.supportComment = function () { return true; }; + QuestionSelectBase.prototype.supportOther = function () { return true; }; + QuestionSelectBase.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (!this.isOtherSelected || this.comment) + return; + var text = this.otherErrorText; + if (!text) { + text = __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherRequiredError"); + } + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](text)); + }; + QuestionSelectBase.prototype.onLocaleChanged = function () { + _super.prototype.onLocaleChanged.call(this); + this.updateOtherItem(); + }; + QuestionSelectBase.prototype.updateOtherItem = function () { + var item = this.otherItem; // set the correct text + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.getStoreOthersAsComment = function () { return this.storeOthersAsComment && (this.survey != null ? this.survey.storeOthersAsComment : true); }; + QuestionSelectBase.prototype.onSurveyLoad = function () { + if (this.choicesByUrl) + this.choicesByUrl.run(); + }; + QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) { + var errorCount = this.errors.length; + this.errors = []; + if (this.choicesByUrl && this.choicesByUrl.error) { + this.errors.push(this.choicesByUrl.error); + } + if (errorCount > 0 || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + var newChoices = null; + if (array && array.length > 0) { + newChoices = new Array(); + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(newChoices, array); + } + this.choicesFromUrl = newChoices; + this.onVisibleChoicesChanged(); + if (this.cachedValueForUrlRequestion) { + this.value = this.cachedValueForUrlRequestion; + } + }; + QuestionSelectBase.prototype.onVisibleChoicesChanged = function () { + this.visibleChoicesCache = null; + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.sortVisibleChoices = function (array) { + var order = this.choicesOrder.toLowerCase(); + if (order == "asc") + return this.sortArray(array, 1); + if (order == "desc") + return this.sortArray(array, -1); + if (order == "random") + return this.randomizeArray(array); + return array; + }; + QuestionSelectBase.prototype.sortArray = function (array, mult) { + return array.sort(function (a, b) { + if (a.text < b.text) + return -1 * mult; + if (a.text > b.text) + return 1 * mult; + return 0; + }); + }; + QuestionSelectBase.prototype.randomizeArray = function (array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + return array; + }; + QuestionSelectBase.prototype.clearUnusedValues = function () { + _super.prototype.clearUnusedValues.call(this); + if (!this.isOtherSelected) { + this.comment = null; + } + }; + return QuestionSelectBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +var QuestionCheckboxBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxBase, _super); + function QuestionCheckboxBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + return _this; + } + Object.defineProperty(QuestionCheckboxBase.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + return QuestionCheckboxBase; +}(QuestionSelectBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("selectbase", ["hasComment:boolean", "hasOther:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "otherText", serializationProperty: "locOtherText" }, { name: "otherErrorText", serializationProperty: "locOtherErrorText" }, + { name: "storeOthersAsComment:boolean", default: true }], null, "question"); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkboxbase", [{ name: "colCount:number", default: 1, choices: [0, 1, 2, 3, 4] }], null, "selectbase"); + + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__itemvalue__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__question_baseselect__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return MatrixDropdownColumn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return MatrixDropdownCell; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDropdownRowModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionMatrixDropdownModelBase; }); + + + + + + + + + + +var MatrixDropdownColumn = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownColumn, _super); + function MatrixDropdownColumn(name, title) { + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.hasOther = false; + _this.minWidth = ""; + _this.cellType = "default"; + _this.inputType = "text"; + _this.choicesOrder = "none"; + _this.locOwner = null; + _this.colCountValue = -1; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.choicesByUrl = new __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__["a" /* ChoicesRestfull */](); + return _this; + } + MatrixDropdownColumn.prototype.getType = function () { return "matrixdropdowncolumn"; }; + Object.defineProperty(MatrixDropdownColumn.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text; }, + set: function (value) { this.locOptionsCaption.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < -1 || value > 4) + return; + this.colCountValue = value; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownColumn.prototype.getLocale = function () { + return this.locOwner ? this.locOwner.getLocale() : ""; + }; + return MatrixDropdownColumn; +}(__WEBPACK_IMPORTED_MODULE_3__base__["a" /* Base */])); + +var MatrixDropdownCell = (function () { + function MatrixDropdownCell(column, row, data) { + this.column = column; + this.row = row; + this.questionValue = data.createQuestion(this.row, this.column); + this.questionValue.setData(row); + } + Object.defineProperty(MatrixDropdownCell.prototype, "question", { + get: function () { return this.questionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownCell.prototype, "value", { + get: function () { return this.question.value; }, + set: function (value) { + this.question.value = value; + }, + enumerable: true, + configurable: true + }); + return MatrixDropdownCell; +}()); + +var MatrixDropdownRowModelBase = (function () { + function MatrixDropdownRowModelBase(data, value) { + this.rowValues = {}; + this.rowComments = {}; + this.isSettingValue = false; + this.cells = []; + this.data = data; + this.value = value; + this.idValue = MatrixDropdownRowModelBase.getId(); + this.buildCells(); + } + MatrixDropdownRowModelBase.getId = function () { return "srow_" + MatrixDropdownRowModelBase.idCounter++; }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "rowName", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "value", { + get: function () { return this.rowValues; }, + set: function (value) { + this.isSettingValue = true; + this.rowValues = {}; + if (value != null) { + for (var key in value) { + this.rowValues[key] = value[key]; + } + } + for (var i = 0; i < this.cells.length; i++) { + this.cells[i].question.onSurveyValueChanged(this.getValue(this.cells[i].column.name)); + } + this.isSettingValue = false; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getValue = function (name) { + return this.rowValues[name]; + }; + MatrixDropdownRowModelBase.prototype.setValue = function (name, newValue) { + if (this.isSettingValue) + return; + if (newValue === "") + newValue = null; + if (newValue != null) { + this.rowValues[name] = newValue; + } + else { + delete this.rowValues[name]; + } + this.data.onRowChanged(this, this.value); + }; + MatrixDropdownRowModelBase.prototype.getComment = function (name) { + return this.rowComments[name]; + }; + MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue) { + this.rowComments[name] = newValue; + }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "isEmpty", { + get: function () { + var val = this.value; + if (!val) + return true; + for (var key in val) + return false; + return true; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + MatrixDropdownRowModelBase.prototype.buildCells = function () { + var columns = this.data.columns; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + this.cells.push(this.createCell(column)); + } + }; + MatrixDropdownRowModelBase.prototype.createCell = function (column) { + return new MatrixDropdownCell(column, this, this.data); + }; + return MatrixDropdownRowModelBase; +}()); + +MatrixDropdownRowModelBase.idCounter = 1; +var QuestionMatrixDropdownModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModelBase, _super); + function QuestionMatrixDropdownModelBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.columnsValue = []; + _this.isRowChanging = false; + _this.generatedVisibleRows = null; + _this.cellTypeValue = "dropdown"; + _this.columnColCountValue = 0; + _this.columnMinWidth = ""; + _this.horizontalScroll = false; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.overrideColumnsMethods(); + return _this; + } + QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) { + var colNames = __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].DefaultColums; + for (var i = 0; i < colNames.length; i++) + matrix.addColumn(colNames[i]); + }; + QuestionMatrixDropdownModelBase.prototype.getType = function () { + return "matrixdropdownbase"; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (value) { + this.columnsValue = value; + this.overrideColumnsMethods(); + this.fireCallback(this.columnsChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.overrideColumnsMethods = function () { + var self = this; + this.columnsValue.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = self; + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + }; + this.columnsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = self; + } + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + var _a; + }; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "cellType", { + get: function () { return this.cellTypeValue; }, + set: function (newValue) { + if (this.cellType == newValue) + return; + this.cellTypeValue = newValue; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columnColCount", { + get: function () { return this.columnColCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.columnColCountValue = value; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.getColumnTitle = function (column) { + var result = column.title; + if (column.isRequired && this.survey) { + var requireText = this.survey.requiredText; + if (requireText) + requireText += " "; + result = requireText + result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) { + return column.minWidth ? column.minWidth : this.columnMinWidth; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) { + if (title === void 0) { title = null; } + var column = new MatrixDropdownColumn(name, title); + this.columnsValue.push(column); + return column; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "visibleRows", { + get: function () { + this.generatedVisibleRows = this.generateRows(); + return this.generatedVisibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.generateRows = function () { return null; }; + QuestionMatrixDropdownModelBase.prototype.createMatrixRow = function (name, text, value) { + return null; + }; + QuestionMatrixDropdownModelBase.prototype.createNewValue = function (curValue) { return !curValue ? {} : curValue; }; + QuestionMatrixDropdownModelBase.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + var result = questionValue[row.rowName] ? questionValue[row.rowName] : null; + if (!result && create) { + result = {}; + questionValue[row.rowName] = result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { + }; + QuestionMatrixDropdownModelBase.prototype.onValueChanged = function () { + if (this.isRowChanging) + return; + this.onBeforeValueChanged(this.value); + if (!(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + this.generatedVisibleRows[i].value = this.getRowValue(row, val); + } + this.isRowChanging = false; + }; + QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + if (!cells) + continue; + for (var colIndex = 0; colIndex < cells.length; colIndex++) { + var question = cells[colIndex].question; + if (question && (!question.supportGoNextPageAutomatic() || !question.value)) + return false; + } + } + return true; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var errosInColumns = this.hasErrorInColumns(fireCallback); + return _super.prototype.hasErrors.call(this, fireCallback) || errosInColumns; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrorInColumns = function (fireCallback) { + if (!this.generatedVisibleRows) + return false; + var res = false; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + res = cells && cells[colIndex] && cells[colIndex].question && cells[colIndex].question.hasErrors(fireCallback) || res; + } + } + return res; + }; + QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () { + var question = this.getFirstCellQuestion(false); + return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () { + var question = this.getFirstCellQuestion(true); + return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) { + if (!this.generatedVisibleRows) + return null; + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + if (!onError) + return cells[colIndex].question; + if (cells[colIndex].question.currentErrorCount > 0) + return cells[colIndex].question; + } + } + return null; + }; + //IMatrixDropdownData + QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) { + var question = this.createQuestionCore(row, column); + question.name = column.name; + question.isRequired = column.isRequired; + question.hasOther = column.hasOther; + question.readOnly = this.readOnly; + question.setData(this.survey); + if (column.hasOther) { + if (question instanceof __WEBPACK_IMPORTED_MODULE_6__question_baseselect__["b" /* QuestionSelectBase */]) { + question.storeOthersAsComment = false; + } + } + return question; + }; + QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) { + var cellType = column.cellType == "default" ? this.cellType : column.cellType; + var name = this.getQuestionName(row, column); + if (cellType == "checkbox") + return this.createCheckbox(name, column); + if (cellType == "radiogroup") + return this.createRadiogroup(name, column); + if (cellType == "text") + return this.createText(name, column); + if (cellType == "comment") + return this.createComment(name, column); + return this.createDropdown(name, column); + }; + QuestionMatrixDropdownModelBase.prototype.getQuestionName = function (row, column) { return row.rowName + "_" + column.name; }; + QuestionMatrixDropdownModelBase.prototype.getColumnChoices = function (column) { + return column.choices && column.choices.length > 0 ? column.choices : this.choices; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnOptionsCaption = function (column) { + return column.optionsCaption ? column.optionsCaption : this.optionsCaption; + }; + QuestionMatrixDropdownModelBase.prototype.createDropdown = function (name, column) { + var q = this.createCellQuestion("dropdown", name); + this.setSelectBaseProperties(q, column); + q.optionsCaption = this.getColumnOptionsCaption(column); + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCheckbox = function (name, column) { + var q = this.createCellQuestion("checkbox", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createRadiogroup = function (name, column) { + var q = this.createCellQuestion("radiogroup", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.setSelectBaseProperties = function (question, column) { + question.choicesOrder = column.choicesOrder; + question.choices = this.getColumnChoices(column); + question.choicesByUrl.setData(column.choicesByUrl); + if (!question.choicesByUrl.isEmpty) { + question.choicesByUrl.run(); + } + }; + QuestionMatrixDropdownModelBase.prototype.createText = function (name, column) { + var q = this.createCellQuestion("text", name); + q.inputType = column.inputType; + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createComment = function (name, column) { + var q = this.createCellQuestion("comment", name); + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCellQuestion = function (questionType, name) { + return __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + }; + QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) { + delete newValue[row.rowName]; + return Object.keys(newValue).length == 0 ? null : newValue; + }; + QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, newRowValue) { + var newValue = this.createNewValue(this.value); + var rowValue = this.getRowValue(row, newValue, true); + for (var key in rowValue) + delete rowValue[key]; + if (newRowValue) { + newRowValue = JSON.parse(JSON.stringify(newRowValue)); + for (var key in newRowValue) + rowValue[key] = newRowValue[key]; + } + if (Object.keys(rowValue).length == 0) { + newValue = this.deleteRowValue(newValue, row); + } + this.isRowChanging = true; + this.setNewValue(newValue); + this.isRowChanging = false; + }; + return QuestionMatrixDropdownModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdowncolumn", ["name", { name: "title", serializationProperty: "locTitle" }, + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, { name: "cellType", default: "default", choices: ["default", "dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "colCount", default: -1, choices: [-1, 0, 1, 2, 3, 4] }, "isRequired:boolean", "hasOther:boolean", "minWidth", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }], function () { return new MatrixDropdownColumn(""); }); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdownbase", [{ name: "columns:matrixdropdowncolumns", className: "matrixdropdowncolumn" }, + "horizontalScroll:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, + { name: "cellType", default: "dropdown", choices: ["dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "columnColCount", default: 0, choices: [0, 1, 2, 3, 4] }, "columnMinWidth"], function () { return new QuestionMatrixDropdownModelBase(""); }, "question"); + + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__kopage__ = __webpack_require__(28); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__defaultCss_cssstandard__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__templateText__ = __webpack_require__(29); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionCustomWidgets__ = __webpack_require__(22); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Survey; }); + + + + + + + + +__WEBPACK_IMPORTED_MODULE_7__questionCustomWidgets__["a" /* CustomWidgetCollection */].Instance.onCustomWidgetAdded.add(function (customWidget) { + if (customWidget.widgetJson.isDefaultRender) + return; + if (!customWidget.htmlTemplate) + customWidget.htmlTemplate = "
'htmlTemplate' attribute is missed.
"; + new __WEBPACK_IMPORTED_MODULE_6__templateText__["a" /* SurveyTemplateText */]().replaceText(customWidget.htmlTemplate, "widget", customWidget.name); +}); +var Survey = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Survey, _super); + function Survey(jsonObj, renderedElement, css) { + if (jsonObj === void 0) { jsonObj = null; } + if (renderedElement === void 0) { renderedElement = null; } + if (css === void 0) { css = null; } + var _this = _super.call(this, jsonObj) || this; + //TODO remove it, since there is onAfterRenderSurvey + _this.onRendered = new __WEBPACK_IMPORTED_MODULE_3__base__["b" /* Event */](); + _this.isFirstRender = true; + if (css) { + _this.css = css; + } + if (renderedElement) { + _this.renderedElement = renderedElement; + } + if (typeof __WEBPACK_IMPORTED_MODULE_1_knockout__ === 'undefined') + throw new Error('knockoutjs library is not loaded.'); + _this.render(renderedElement); + return _this; + } + Object.defineProperty(Survey, "cssType", { + get: function () { return __WEBPACK_IMPORTED_MODULE_5__defaultCss_cssstandard__["b" /* surveyCss */].currentType; }, + set: function (value) { __WEBPACK_IMPORTED_MODULE_5__defaultCss_cssstandard__["b" /* surveyCss */].currentType = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Survey.prototype, "cssNavigationComplete", { + get: function () { return this.getNavigationCss(this.css.navigationButton, this.css.navigation.complete); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Survey.prototype, "cssNavigationPrev", { + get: function () { return this.getNavigationCss(this.css.navigationButton, this.css.navigation.prev); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Survey.prototype, "cssNavigationNext", { + get: function () { return this.getNavigationCss(this.css.navigationButton, this.css.navigation.next); }, + enumerable: true, + configurable: true + }); + Survey.prototype.getNavigationCss = function (main, btn) { + var res = ""; + if (main) + res = main; + if (btn) + res += ' ' + btn; + return res; + }; + Object.defineProperty(Survey.prototype, "css", { + get: function () { return __WEBPACK_IMPORTED_MODULE_5__defaultCss_cssstandard__["b" /* surveyCss */].getCss(); }, + set: function (value) { + this.mergeValues(value, this.css); + }, + enumerable: true, + configurable: true + }); + Survey.prototype.render = function (element) { + if (element === void 0) { element = null; } + this.updateCustomWidgets(this.currentPage); + var self = this; + if (element && typeof element == "string") { + element = document.getElementById(element); + } + if (element) { + this.renderedElement = element; + } + element = this.renderedElement; + if (!element) + return; + element.innerHTML = this.getTemplate(); + self.applyBinding(); + }; + Survey.prototype.koEventAfterRender = function (element, survey) { + survey.onRendered.fire(self, {}); + survey.afterRenderSurvey(element); + }; + Survey.prototype.loadSurveyFromService = function (surveyId, renderedElement) { + if (surveyId === void 0) { surveyId = null; } + if (renderedElement === void 0) { renderedElement = null; } + if (renderedElement) { + this.renderedElement = renderedElement; + } + _super.prototype.loadSurveyFromService.call(this, surveyId); + }; + Survey.prototype.setCompleted = function () { + _super.prototype.setCompleted.call(this); + this.updateKoCurrentPage(); + }; + Survey.prototype.createNewPage = function (name) { return new __WEBPACK_IMPORTED_MODULE_4__kopage__["b" /* Page */](name); }; + Survey.prototype.getTemplate = function () { return __WEBPACK_IMPORTED_MODULE_6__templateText__["b" /* koTemplate */]; }; + Survey.prototype.onBeforeCreating = function () { + var self = this; + this.dummyObservable = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](0); + this.koCurrentPage = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.currentPage; }); + this.koIsNavigationButtonsShowing = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.isNavigationButtonsShowing; }); + this.koIsFirstPage = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.isFirstPage; }); + this.koIsLastPage = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.isLastPage; }); + this.koProgressText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.progressText; }); + this.koProgress = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.getProgress(); }); + this.koState = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.dummyObservable(); return self.state; }); + this.koAfterRenderPage = function (elements, con) { + var el = __WEBPACK_IMPORTED_MODULE_3__base__["c" /* SurveyElement */].GetFirstNonTextElement(elements); + if (el) + self.afterRenderPage(el); + }; + }; + Survey.prototype.currentPageChanged = function (newValue, oldValue) { + this.updateKoCurrentPage(); + _super.prototype.currentPageChanged.call(this, newValue, oldValue); + if (!this.isDesignMode && this.focusFirstQuestionAutomatic) + this.focusFirstQuestion(); + }; + Survey.prototype.pageVisibilityChanged = function (page, newValue) { + _super.prototype.pageVisibilityChanged.call(this, page, newValue); + this.updateKoCurrentPage(); + }; + Survey.prototype.onLoadSurveyFromService = function () { + this.render(); + }; + Survey.prototype.onLoadingSurveyFromService = function () { + this.render(); + }; + Survey.prototype.applyBinding = function () { + if (!this.renderedElement) + return; + this.updateKoCurrentPage(); + __WEBPACK_IMPORTED_MODULE_1_knockout__["cleanNode"](this.renderedElement); + if (!this.isFirstRender) { + this.updateCurrentPageQuestions(); + } + this.isFirstRender = false; + __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"](this, this.renderedElement); + }; + Survey.prototype.updateKoCurrentPage = function () { + this.dummyObservable(this.dummyObservable() + 1); + }; + Survey.prototype.updateCurrentPageQuestions = function () { + var questions = this.currentPage ? this.currentPage.questions : []; + for (var i = 0; i < questions.length; i++) { + var q = questions[i]; + if (q.visible) + q["updateQuestion"](); + } + }; + return Survey; +}(__WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */])); + +__WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register('survey', { + viewModel: { + createViewModel: function (params, componentInfo) { + var survey = __WEBPACK_IMPORTED_MODULE_1_knockout__["unwrap"](params.survey); + survey.render(); + return params.survey; + } + }, + template: __WEBPACK_IMPORTED_MODULE_6__templateText__["b" /* koTemplate */] +}); + + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditionsParser__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__ = __webpack_require__(19); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Condition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ConditionNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionRunner; }); + + +var Condition = (function () { + function Condition() { + this.opValue = "equal"; + } + Object.defineProperty(Condition, "operators", { + get: function () { + if (Condition.operatorsValue != null) + return Condition.operatorsValue; + Condition.operatorsValue = { + empty: function (left, right) { return !left; }, + notempty: function (left, right) { return !(!left); }, + equal: function (left, right) { return left == right; }, + notequal: function (left, right) { return left != right; }, + contains: function (left, right) { return left && left["indexOf"] && left.indexOf(right) > -1; }, + notcontains: function (left, right) { return !left || !left["indexOf"] || left.indexOf(right) == -1; }, + greater: function (left, right) { return left > right; }, + less: function (left, right) { return left < right; }, + greaterorequal: function (left, right) { return left >= right; }, + lessorequal: function (left, right) { return left <= right; } + }; + return Condition.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Condition.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Condition.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Condition.prototype.perform = function (left, right) { + if (left === void 0) { left = null; } + if (right === void 0) { right = null; } + if (!left) + left = this.left; + if (!right) + right = this.right; + return Condition.operators[this.operator](this.getPureValue(left), this.getPureValue(right)); + }; + Condition.prototype.getPureValue = function (val) { + if (!val || (typeof val != "string")) + return val; + var str = ""; + if (val.length > 0 && (val[0] == "'" || val[0] == '"')) + val = val.substr(1); + var len = val.length; + if (len > 0 && (val[len - 1] == "'" || val[len - 1] == '"')) + val = val.substr(0, len - 1); + return val; + }; + return Condition; +}()); + +Condition.operatorsValue = null; +var ConditionNode = (function () { + function ConditionNode() { + this.connectiveValue = "and"; + this.children = []; + } + Object.defineProperty(ConditionNode.prototype, "connective", { + get: function () { return this.connectiveValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (value == "&" || value == "&&") + value = "and"; + if (value == "|" || value == "||") + value = "or"; + if (value != "and" && value != "or") + return; + this.connectiveValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConditionNode.prototype, "isEmpty", { + get: function () { return this.children.length == 0; }, + enumerable: true, + configurable: true + }); + ConditionNode.prototype.clear = function () { + this.children = []; + this.connective = "and"; + }; + return ConditionNode; +}()); + +var ConditionRunner = (function () { + function ConditionRunner(expression) { + this.root = new ConditionNode(); + this.expression = expression; + this.processValue = new __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__["a" /* ProcessValue */](); + } + Object.defineProperty(ConditionRunner.prototype, "expression", { + get: function () { return this.expressionValue; }, + set: function (value) { + if (this.expression == value) + return; + this.expressionValue = value; + new __WEBPACK_IMPORTED_MODULE_0__conditionsParser__["a" /* ConditionsParser */]().parse(this.expressionValue, this.root); + }, + enumerable: true, + configurable: true + }); + ConditionRunner.prototype.run = function (values) { + this.values = values; + return this.runNode(this.root); + }; + ConditionRunner.prototype.runNode = function (node) { + var onFirstFail = node.connective == "and"; + for (var i = 0; i < node.children.length; i++) { + var res = this.runNodeCondition(node.children[i]); + if (!res && onFirstFail) + return false; + if (res && !onFirstFail) + return true; + } + return onFirstFail; + }; + ConditionRunner.prototype.runNodeCondition = function (value) { + if (!value) + return false; + if (value["children"]) + return this.runNode(value); + if (value["left"]) + return this.runCondition(value); + return false; + }; + ConditionRunner.prototype.runCondition = function (condition) { + var left = condition.left; + var name = this.getValueName(left); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return condition.operator === "empty"; + left = this.processValue.getValue(name, this.values); + } + var right = condition.right; + name = this.getValueName(right); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return false; + right = this.processValue.getValue(name, this.values); + } + return condition.perform(left, right); + }; + ConditionRunner.prototype.getValueName = function (nodeValue) { + if (!nodeValue) + return null; + if (typeof nodeValue !== 'string') + return null; + if (nodeValue.length < 3 || nodeValue[0] != '{' || nodeValue[nodeValue.length - 1] != '}') + return null; + return nodeValue.substr(1, nodeValue.length - 2); + }; + return ConditionRunner; +}()); + + + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultStandardCss; }); +var surveyCss = { + currentType: "", + getCss: function () { + var loc = this.currentType ? this[this.currentType] : defaultStandardCss; + if (!loc) + loc = defaultStandardCss; + return loc; + }, +}; +var defaultStandardCss = { + root: "sv_main", + header: "", + body: "sv_body", + footer: "sv_nav", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "sv_progress", progressBar: "", + pageTitle: "sv_p_title", + row: "sv_row", + question: { root: "sv_q", title: "sv_q_title", comment: "", indent: 20 }, + error: { root: "sv_q_erbox", icon: "", item: "" }, + checkbox: { root: "sv_qcbc", item: "sv_q_checkbox", other: "sv_q_other" }, + comment: "", + dropdown: { root: "", control: "" }, + matrix: { root: "sv_q_matrix" }, + matrixdropdown: { root: "sv_q_matrix" }, + matrixdynamic: { root: "table", button: "" }, + multipletext: { root: "", itemTitle: "", itemValue: "" }, + radiogroup: { root: "sv_qcbc", item: "sv_q_radiogroup", label: "", other: "sv_q_other" }, + rating: { root: "sv_q_rating", item: "sv_q_rating_item" }, + text: "", + window: { + root: "sv_window", body: "sv_window_content", + header: { + root: "sv_window_title", title: "", button: "", buttonExpanded: "", buttonCollapsed: "" + } + } +}; +surveyCss["standard"] = defaultStandardCss; + + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionImplementorBase; }); + +var QuestionImplementorBase = (function () { + function QuestionImplementorBase(question) { + this.question = question; + var self = this; + question.visibilityChangedCallback = function () { self.onVisibilityChanged(); }; + question.renderWidthChangedCallback = function () { self.onRenderWidthChanged(); }; + this.koTemplateName = __WEBPACK_IMPORTED_MODULE_0_knockout__["pureComputed"](function () { return self.getTemplateName(); }); + this.koVisible = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.question.isVisible); + this.koRenderWidth = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.question.renderWidth); + this.koErrors = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); + this.koMarginLeft = __WEBPACK_IMPORTED_MODULE_0_knockout__["pureComputed"](function () { self.koRenderWidth(); return self.getIndentSize(self.question.indent); }); + this.koPaddingRight = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](self.getIndentSize(self.question.rightIndent)); + this.question["koTemplateName"] = this.koTemplateName; + this.question["koVisible"] = this.koVisible; + this.question["koRenderWidth"] = this.koRenderWidth; + this.question["koErrors"] = this.koErrors; + this.question["koMarginLeft"] = this.koMarginLeft; + this.question["koPaddingRight"] = this.koPaddingRight; + this.question["updateQuestion"] = function () { self.updateQuestion(); }; + } + QuestionImplementorBase.prototype.updateQuestion = function () { }; + QuestionImplementorBase.prototype.onVisibilityChanged = function () { + this.koVisible(this.question.isVisible); + }; + QuestionImplementorBase.prototype.onRenderWidthChanged = function () { + this.koRenderWidth(this.question.renderWidth); + this.koPaddingRight(this.getIndentSize(this.question.rightIndent)); + }; + QuestionImplementorBase.prototype.getIndentSize = function (indent) { + if (indent < 1) + return ""; + if (!this.question["data"]) + return ""; + var css = this.question["data"]["css"]; + if (!css) + return ""; + return indent * css.question.indent + "px"; + }; + QuestionImplementorBase.prototype.getTemplateName = function () { + if (this.question.customWidget && !this.question.customWidget.widgetJson.isDefaultRender) + return "survey-widget-" + this.question.customWidget.name; + return "survey-question-" + this.question.getType(); + }; + return QuestionImplementorBase; +}()); + + + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChoicesRestfull; }); + + + + + + +var ChoicesRestfull = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ChoicesRestfull, _super); + function ChoicesRestfull() { + var _this = _super.call(this) || this; + _this.url = ""; + _this.path = ""; + _this.valueName = ""; + _this.titleName = ""; + _this.error = null; + return _this; + } + ChoicesRestfull.prototype.run = function () { + if (!this.url || !this.getResultCallback) + return; + this.error = null; + var xhr = new XMLHttpRequest(); + xhr.open('GET', this.url); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + if (xhr.status == 200) { + self.onLoad(JSON.parse(xhr.response)); + } + else { + self.onError(xhr.statusText, xhr.responseText); + } + }; + xhr.send(); + }; + ChoicesRestfull.prototype.getType = function () { return "choicesByUrl"; }; + Object.defineProperty(ChoicesRestfull.prototype, "isEmpty", { + get: function () { + return !this.url && !this.path && !this.valueName && !this.titleName; + }, + enumerable: true, + configurable: true + }); + ChoicesRestfull.prototype.setData = function (json) { + this.clear(); + if (json.url) + this.url = json.url; + if (json.path) + this.path = json.path; + if (json.valueName) + this.valueName = json.valueName; + if (json.titleName) + this.titleName = json.titleName; + }; + ChoicesRestfull.prototype.clear = function () { + this.url = ""; + this.path = ""; + this.valueName = ""; + this.titleName = ""; + }; + ChoicesRestfull.prototype.onLoad = function (result) { + var items = []; + result = this.getResultAfterPath(result); + if (result && result["length"]) { + for (var i = 0; i < result.length; i++) { + var itemValue = result[i]; + if (!itemValue) + continue; + var value = this.getValue(itemValue); + var title = this.getTitle(itemValue); + items.push(new __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */](value, title)); + } + } + else { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlGetChoicesError")); + } + this.getResultCallback(items); + }; + ChoicesRestfull.prototype.onError = function (status, response) { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlRequestError")["format"](status, response)); + this.getResultCallback([]); + }; + ChoicesRestfull.prototype.getResultAfterPath = function (result) { + if (!result) + return result; + if (!this.path) + return result; + var pathes = this.getPathes(); + for (var i = 0; i < pathes.length; i++) { + result = result[pathes[i]]; + if (!result) + return null; + } + return result; + }; + ChoicesRestfull.prototype.getPathes = function () { + var pathes = []; + if (this.path.indexOf(';') > -1) { + pathes = this.path.split(';'); + } + else { + pathes = this.path.split(','); + } + if (pathes.length == 0) + pathes.push(this.path); + return pathes; + }; + ChoicesRestfull.prototype.getValue = function (item) { + if (this.valueName) + return item[this.valueName]; + var len = Object.keys(item).length; + if (len < 1) + return null; + return item[Object.keys(item)[0]]; + }; + ChoicesRestfull.prototype.getTitle = function (item) { + if (!this.titleName) + return null; + return item[this.titleName]; + }; + return ChoicesRestfull; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("choicesByUrl", ["url", "path", "valueName", "titleName"], function () { return new ChoicesRestfull(); }); + + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ProcessValue; }); +var ProcessValue = (function () { + function ProcessValue() { + } + ProcessValue.prototype.getFirstName = function (text) { + if (!text) + return text; + var res = ""; + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + if (ch == '.' || ch == '[') + break; + res += ch; + } + return res; + }; + ProcessValue.prototype.hasValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.hasValue; + }; + ProcessValue.prototype.getValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.value; + }; + ProcessValue.prototype.getValueCore = function (text, values) { + var res = { hasValue: false, value: null }; + var curValue = values; + if (!curValue) + return res; + var isFirst = true; + while (text && text.length > 0) { + var isArray = !isFirst && text[0] == '['; + if (!isArray) { + if (!isFirst) + text = text.substr(1); + var curName = this.getFirstName(text); + if (!curName) + return res; + if (!curValue[curName]) + return res; + curValue = curValue[curName]; + text = text.substr(curName.length); + } + else { + if (!Array.isArray(curValue)) + return res; + var index = 1; + var str = ""; + while (index < text.length && text[index] != ']') { + str += text[index]; + index++; + } + text = index < text.length ? text.substr(index + 1) : ""; + index = this.getIntValue(str); + if (index < 0 || index >= curValue.length) + return res; + curValue = curValue[index]; + } + isFirst = false; + } + res.value = curValue; + res.hasValue = true; + return res; + }; + ProcessValue.prototype.getIntValue = function (str) { + if (str == "0" || ((str | 0) > 0 && str % 1 == 0)) + return Number(str); + return -1; + }; + return ProcessValue; +}()); + + + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(21); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PageModel; }); + + + + +var PageModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PageModel, _super); + function PageModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.numValue = -1; + _this.navigationButtonsVisibility = "inherit"; + return _this; + } + PageModel.prototype.getType = function () { return "page"; }; + Object.defineProperty(PageModel.prototype, "num", { + get: function () { return this.numValue; }, + set: function (value) { + if (this.numValue == value) + return; + this.numValue = value; + this.onNumChanged(value); + }, + enumerable: true, + configurable: true + }); + PageModel.prototype.focusFirstQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + var question = this.questions[i]; + if (!question.visible || !question.hasInput) + continue; + this.questions[i].focus(); + break; + } + }; + PageModel.prototype.focusFirstErrorQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + if (!this.questions[i].visible || this.questions[i].currentErrorCount == 0) + continue; + this.questions[i].focus(true); + break; + } + }; + PageModel.prototype.scrollToTop = function () { + __WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyElement */].ScrollElementToTop(__WEBPACK_IMPORTED_MODULE_2__base__["d" /* SurveyPageId */]); + }; + PageModel.prototype.onNumChanged = function (value) { + }; + PageModel.prototype.onVisibleChanged = function () { + _super.prototype.onVisibleChanged.call(this); + if (this.data != null) { + this.data.pageVisibilityChanged(this, this.visible); + } + }; + return PageModel; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["a" /* PanelModelBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("page", [{ name: "navigationButtonsVisibility", default: "inherit", choices: ["iherit", "show", "hide"] }], function () { return new PageModel(); }, "panel"); + + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanelModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return PanelModel; }); + + + + + + +var QuestionRowModel = (function () { + function QuestionRowModel(panel) { + this.panel = panel; + this.elements = []; + this.visibleValue = panel.data && panel.data.isDesignMode; + } + Object.defineProperty(QuestionRowModel.prototype, "questions", { + //TODO remove after updating react and vue + get: function () { return this.elements; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRowModel.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionRowModel.prototype.updateVisible = function () { + this.visible = this.calcVisible(); + this.setWidth(); + }; + QuestionRowModel.prototype.addElement = function (q) { + this.elements.push(q); + this.updateVisible(); + }; + QuestionRowModel.prototype.onVisibleChanged = function () { + if (this.visibilityChangedCallback) + this.visibilityChangedCallback(); + }; + QuestionRowModel.prototype.setWidth = function () { + var visCount = this.getVisibleCount(); + if (visCount == 0) + return; + var counter = 0; + for (var i = 0; i < this.elements.length; i++) + if (this.elements[i].isVisible) { + var q = this.elements[i]; + q.renderWidth = q.width ? q.width : Math.floor(100 / visCount) + '%'; + q.rightIndent = counter < visCount - 1 ? 1 : 0; + counter++; + } + }; + QuestionRowModel.prototype.getVisibleCount = function () { + var res = 0; + for (var i = 0; i < this.elements.length; i++) { + if (this.elements[i].isVisible) + res++; + } + return res; + }; + QuestionRowModel.prototype.calcVisible = function () { return this.getVisibleCount() > 0; }; + return QuestionRowModel; +}()); + +var PanelModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModelBase, _super); + function PanelModelBase(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this) || this; + _this.name = name; + _this.dataValue = null; + _this.rowValues = null; + _this.conditionRunner = null; + _this.elementsValue = new Array(); + _this.isQuestionsReady = false; + _this.questionsValue = new Array(); + _this.parent = null; + _this.visibleIf = ""; + _this.visibleIndex = -1; + _this.visibleValue = true; + _this.idValue = PanelModelBase.getPanelId(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.elementsValue.push = function (value) { return self.doOnPushElement(this, value); }; + _this.elementsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + return self.doSpliceElements.apply(self, [this, start, deleteCount].concat(items)); + }; + return _this; + } + PanelModelBase.getPanelId = function () { + return "sp_" + PanelModelBase.panelCounter++; + }; + Object.defineProperty(PanelModelBase.prototype, "data", { + get: function () { return this.dataValue; }, + set: function (value) { + if (this.dataValue === value) + return; + this.dataValue = value; + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].setData(value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (newValue) { + this.locTitle.text = newValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + Object.defineProperty(PanelModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "questions", { + get: function () { + if (!this.isQuestionsReady) { + this.questionsValue = []; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel) { + var qs = el.questions; + for (var j = 0; j < qs.length; j++) { + this.questionsValue.push(qs[j]); + } + } + else { + this.questionsValue.push(el); + } + } + this.isQuestionsReady = true; + } + return this.questionsValue; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.markQuestionListDirty = function () { + this.isQuestionsReady = false; + if (this.parent) + this.parent.markQuestionListDirty(); + }; + Object.defineProperty(PanelModelBase.prototype, "elements", { + get: function () { return this.elementsValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.containsElement = function (element) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el == element) + return true; + if (el.isPanel) { + if (el.containsElement(element)) + return true; + } + } + return false; + }; + PanelModelBase.prototype.hasErrors = function (fireCallback, focuseOnFirstError) { + if (fireCallback === void 0) { fireCallback = true; } + if (focuseOnFirstError === void 0) { focuseOnFirstError = false; } + var result = false; + var firstErrorQuestion = null; + var visibleQuestions = []; + this.addQuestionsToList(visibleQuestions, true); + for (var i = 0; i < visibleQuestions.length; i++) { + var question = visibleQuestions[i]; + if (question.isReadOnly) + continue; + if (question.hasErrors(fireCallback)) { + if (focuseOnFirstError && firstErrorQuestion == null) { + firstErrorQuestion = question; + } + result = true; + } + } + if (firstErrorQuestion) + firstErrorQuestion.focus(true); + return result; + }; + PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + if (visibleOnly && !this.visible) + return; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (visibleOnly && !el.visible) + continue; + if (el.isPanel) { + el.addQuestionsToList(list, visibleOnly); + } + else { + list.push(el); + } + } + }; + Object.defineProperty(PanelModelBase.prototype, "rows", { + get: function () { + if (!this.rowValues) { + this.rowValues = this.buildRows(); + } + return this.rowValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isActive", { + get: function () { return (!this.data) || this.data.currentPage == this.root; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "root", { + get: function () { + var res = this; + while (res.parent) + res = res.parent; + return res; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.createRow = function () { return new QuestionRowModel(this); }; + PanelModelBase.prototype.onSurveyLoad = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onSurveyLoad(); + } + if (this.rowsChangedCallback) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isLoadingFromJson", { + get: function () { return this.data && this.data.isLoadingFromJson; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onRowsChanged = function () { + this.rowValues = null; + if (this.rowsChangedCallback && !this.isLoadingFromJson) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isDesignMode", { + get: function () { return this.data && this.data.isDesignMode; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.doOnPushElement = function (list, value) { + var result = Array.prototype.push.call(list, value); + this.markQuestionListDirty(); + this.onAddElement(value, list.length); + this.onRowsChanged(); + return result; + }; + PanelModelBase.prototype.doSpliceElements = function (list, start, deleteCount) { + var items = []; + for (var _i = 3; _i < arguments.length; _i++) { + items[_i - 3] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var deletedQuestions = []; + for (var i = 0; i < deleteCount; i++) { + if (i + start >= list.length) + continue; + deletedQuestions.push(list[i + start]); + } + var result = (_a = Array.prototype.splice).call.apply(_a, [list, start, deleteCount].concat(items)); + this.markQuestionListDirty(); + if (!items) + items = []; + for (var i = 0; i < deletedQuestions.length; i++) { + this.onRemoveElement(deletedQuestions[i]); + } + for (var i = 0; i < items.length; i++) { + this.onAddElement(items[i], start + i); + } + this.onRowsChanged(); + return result; + var _a; + }; + PanelModelBase.prototype.onAddElement = function (element, index) { + if (element.isPanel) { + var p = element; + p.data = this.data; + p.parent = this; + if (this.data) { + this.data.panelAdded(p, index, this, this.root); + } + } + else { + if (this.data) { + var q = element; + q.setData(this.data); + this.data.questionAdded(q, index, this, this.root); + } + } + var self = this; + element.rowVisibilityChangedCallback = function () { self.onElementVisibilityChanged(element); }; + element.startWithNewLineChangedCallback = function () { self.onElementStartWithNewLineChanged(element); }; + }; + PanelModelBase.prototype.onRemoveElement = function (element) { + if (!element.isPanel) { + if (this.data) + this.data.questionRemoved(element); + } + else { + if (this.data) + this.data.panelRemoved(element); + } + }; + PanelModelBase.prototype.onElementVisibilityChanged = function (element) { + if (this.rowValues) { + this.updateRowsVisibility(element); + } + if (this.parent) { + this.parent.onElementVisibilityChanged(this); + } + }; + PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) { + this.onRowsChanged(); + }; + PanelModelBase.prototype.updateRowsVisibility = function (element) { + for (var i = 0; i < this.rowValues.length; i++) { + var row = this.rowValues[i]; + if (row.elements.indexOf(element) > -1) { + row.updateVisible(); + break; + } + } + }; + PanelModelBase.prototype.buildRows = function () { + var result = new Array(); + var lastRowVisibleIndex = -1; + var self = this; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + var isNewRow = i == 0 || el.startWithNewLine; + var row = isNewRow ? this.createRow() : result[result.length - 1]; + if (isNewRow) + result.push(row); + row.addElement(el); + } + for (var i = 0; i < result.length; i++) { + result[i].updateVisible(); + } + return result; + }; + Object.defineProperty(PanelModelBase.prototype, "processedTitle", { + get: function () { + var str = this.title; + if (!str && this.isPanel && this.isDesignMode) + return "[" + this.name + "]"; + return this.data != null ? this.data.processText(str) : str; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (value) { + if (value === this.visible) + return; + this.visibleValue = value; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onVisibleChanged = function () { + }; + Object.defineProperty(PanelModelBase.prototype, "isVisible", { + get: function () { return (this.data && this.data.isDesignMode) || this.getIsPageVisible(null); }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) { + if (!this.visible) + return false; + for (var i = 0; i < this.questions.length; i++) { + if (this.questions[i] == exceptionQuestion) + continue; + if (this.questions[i].visible) + return true; + } + return false; + }; + PanelModelBase.prototype.addElement = function (element, index) { + if (index === void 0) { index = -1; } + if (element == null) + return; + if (index < 0 || index >= this.elements.length) { + this.elements.push(element); + } + else { + this.elements.splice(index, 0, element); + } + }; + PanelModelBase.prototype.addQuestion = function (question, index) { + if (index === void 0) { index = -1; } + this.addElement(question, index); + }; + PanelModelBase.prototype.addPanel = function (panel, index) { + if (index === void 0) { index = -1; } + this.addElement(panel, index); + }; + PanelModelBase.prototype.addNewQuestion = function (questionType, name) { + var question = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + this.addQuestion(question); + return question; + }; + PanelModelBase.prototype.addNewPanel = function (name) { + var panel = this.createNewPanel(name); + this.addPanel(panel); + return panel; + }; + PanelModelBase.prototype.createNewPanel = function (name) { + return new PanelModel(name); + }; + PanelModelBase.prototype.removeElement = function (element) { + var index = this.elements.indexOf(element); + if (index < 0) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel && el.removeElement(element)) + return true; + } + return false; + } + this.elements.splice(index, 1); + return true; + }; + PanelModelBase.prototype.removeQuestion = function (question) { + this.removeElement(question); + }; + PanelModelBase.prototype.runCondition = function (values) { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].runCondition(values); + } + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + PanelModelBase.prototype.onLocaleChanged = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onLocaleChanged(); + } + }; + return PanelModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__base__["a" /* Base */])); + +PanelModelBase.panelCounter = 100; +//export class +var PanelModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModel, _super); + function PanelModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.innerIndentValue = 0; + _this.startWithNewLineValue = true; + return _this; + } + PanelModel.prototype.getType = function () { return "panel"; }; + PanelModel.prototype.setData = function (newValue) { + this.data = newValue; + }; + Object.defineProperty(PanelModel.prototype, "isPanel", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "innerIndent", { + get: function () { return this.innerIndentValue; }, + set: function (val) { + if (val == this.innerIndentValue) + return; + this.innerIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + PanelModel.prototype.onVisibleChanged = function () { + if (this.rowVisibilityChangedCallback) + this.rowVisibilityChangedCallback(); + }; + return PanelModel; +}(PanelModelBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("panel", ["name", { name: "elements", alternativeName: "questions", baseClassName: "question", visible: false }, + { name: "visible:boolean", default: true }, "visibleIf:expression", { name: "title:text", serializationProperty: "locTitle" }, + { name: "innerIndent:number", default: 0, choices: [0, 1, 2, 3] }], function () { return new PanelModel(); }); + + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionCustomWidget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomWidgetCollection; }); + +var QuestionCustomWidget = (function () { + function QuestionCustomWidget(name, widgetJson) { + this.name = name; + this.widgetJson = widgetJson; + this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : ""; + } + QuestionCustomWidget.prototype.afterRender = function (question, el) { + if (this.widgetJson.afterRender) + this.widgetJson.afterRender(question, el); + }; + QuestionCustomWidget.prototype.willUnmount = function (question, el) { + if (this.widgetJson.willUnmount) + this.widgetJson.willUnmount(question, el); + }; + QuestionCustomWidget.prototype.isFit = function (question) { + if (this.widgetJson.isFit) + return this.widgetJson.isFit(question); + return false; + }; + return QuestionCustomWidget; +}()); + +var CustomWidgetCollection = (function () { + function CustomWidgetCollection() { + this.widgetsValues = []; + this.onCustomWidgetAdded = new __WEBPACK_IMPORTED_MODULE_0__base__["b" /* Event */](); + } + Object.defineProperty(CustomWidgetCollection.prototype, "widgets", { + get: function () { return this.widgetsValues; }, + enumerable: true, + configurable: true + }); + CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson) { + var name = widgetJson.name; + if (!name) { + name = "widget_" + this.widgets.length + 1; + } + var customWidget = new QuestionCustomWidget(name, widgetJson); + this.widgetsValues.push(customWidget); + this.onCustomWidgetAdded.fire(customWidget, null); + }; + CustomWidgetCollection.prototype.clear = function () { this.widgetsValues = []; }; + CustomWidgetCollection.prototype.getCustomWidget = function (question) { + for (var i = 0; i < this.widgetsValues.length; i++) { + if (this.widgetsValues[i].isFit(question)) + return this.widgetsValues[i]; + } + return null; + }; + return CustomWidgetCollection; +}()); + +CustomWidgetCollection.Instance = new CustomWidgetCollection(); + + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionBase; }); + + + + +var QuestionBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionBase, _super); + function QuestionBase(name) { + var _this = _super.call(this) || this; + _this.name = name; + _this.conditionRunner = null; + _this.visibleIf = ""; + _this.visibleValue = true; + _this.startWithNewLineValue = true; + _this.visibleIndexValue = -1; + _this.width = ""; + _this.renderWidthValue = ""; + _this.rightIndentValue = 0; + _this.indent = 0; + _this.idValue = QuestionBase.getQuestionId(); + _this.onCreating(); + return _this; + } + QuestionBase.getQuestionId = function () { + return "sq_" + QuestionBase.questionCounter++; + }; + Object.defineProperty(QuestionBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.fireCallback(this.visibilityChangedCallback); + this.fireCallback(this.rowVisibilityChangedCallback); + if (this.survey) { + this.survey.questionVisibilityChanged(this, this.visible); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isVisible", { + get: function () { return this.visible || (this.survey && this.survey.isDesignMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isReadOnly", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visibleIndex", { + get: function () { return this.visibleIndexValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + return false; + }; + Object.defineProperty(QuestionBase.prototype, "currentErrorCount", { + get: function () { return 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasTitle", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasInput", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasComment", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + }; + QuestionBase.prototype.setData = function (newValue) { + this.data = newValue; + if (newValue && newValue["questionAdded"]) { + this.surveyValue = newValue; + } + this.onSetData(); + }; + Object.defineProperty(QuestionBase.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.fireCallback = function (callback) { + if (callback) + callback(); + }; + QuestionBase.prototype.onSetData = function () { }; + QuestionBase.prototype.onCreating = function () { }; + QuestionBase.prototype.runCondition = function (values) { + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + //IQuestion + QuestionBase.prototype.onSurveyValueChanged = function (newValue) { + }; + QuestionBase.prototype.onSurveyLoad = function () { + }; + QuestionBase.prototype.setVisibleIndex = function (value) { + if (this.visibleIndexValue == value) + return; + this.visibleIndexValue = value; + this.fireCallback(this.visibleIndexChangedCallback); + }; + QuestionBase.prototype.supportGoNextPageAutomatic = function () { return false; }; + QuestionBase.prototype.clearUnusedValues = function () { }; + QuestionBase.prototype.onLocaleChanged = function () { }; + //ILocalizableOwner + QuestionBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + return QuestionBase; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +QuestionBase.questionCounter = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("questionbase", ["!name", { name: "visible:boolean", default: true }, "visibleIf:expression", + { name: "width" }, { name: "startWithNewLine:boolean", default: true }, { name: "indent:number", default: 0, choices: [0, 1, 2, 3] }]); + + +/***/ }), +/* 24 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__page__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__ = __webpack_require__(31); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyModel; }); + + + + + + + + + + + +var SurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyModel, _super); + function SurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + var _this = _super.call(this) || this; + _this.surveyId = null; + _this.surveyPostId = null; + _this.clientId = null; + _this.cookieName = null; + _this.sendResultOnPageNext = false; + _this.commentPrefix = "-Comment"; + _this.focusFirstQuestionAutomatic = true; + _this.showNavigationButtons = true; + _this.showTitle = true; + _this.showPageTitles = true; + _this.showCompletedPage = true; + _this.requiredText = "*"; + _this.questionStartIndex = ""; + _this.showProgressBar = "off"; + _this.storeOthersAsComment = true; + _this.goNextPageAutomatic = false; + _this.pages = new Array(); + _this.triggers = new Array(); + _this.clearInvisibleValues = false; + _this.currentPageValue = null; + _this.valuesHash = {}; + _this.variablesHash = {}; + _this.showPageNumbersValue = false; + _this.showQuestionNumbersValue = "on"; + _this.questionTitleLocationValue = "top"; + _this.localeValue = ""; + _this.isCompleted = false; + _this.isLoading = false; + _this.processedTextValues = {}; + _this.isValidatingOnServerValue = false; + _this.modeValue = "edit"; + _this.isDesignModeValue = false; + _this.onComplete = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPartialSend = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onCurrentPageChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onValueChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPageVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onQuestionRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onPanelRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onValidateQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onProcessHtml = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onSendResult = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onGetResult = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onUploadFile = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderSurvey = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderPage = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.onAfterRenderPanel = new __WEBPACK_IMPORTED_MODULE_2__base__["b" /* Event */](); + _this.jsonErrors = null; + _this.isLoadingFromJsonValue = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompletedHtmlValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPagePrevTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPageNextTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompleteTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locQuestionTitleTemplateValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__["a" /* TextPreProcessor */](); + _this.textPreProcessor.onHasValue = function (name) { return self.hasProcessedTextValue(name); }; + _this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + _this.pages.push = function (value) { + value.data = self; + return Array.prototype.push.call(this, value); + }; + _this.triggers.push = function (value) { + value.setOwner(self); + return Array.prototype.push.call(this, value); + }; + _this.updateProcessedTextValues(); + _this.onBeforeCreating(); + if (jsonObj) { + _this.setJsonObject(jsonObj); + if (_this.surveyId) { + _this.loadSurveyFromService(_this.surveyId); + } + } + _this.onCreating(); + return _this; + } + SurveyModel.prototype.getType = function () { return "survey"; }; + Object.defineProperty(SurveyModel.prototype, "locale", { + get: function () { return this.localeValue; }, + set: function (value) { + this.localeValue = value; + __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].currentLocale = value; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onLocaleChanged(); + } + }, + enumerable: true, + configurable: true + }); + //ILocalizableOwner + SurveyModel.prototype.getLocale = function () { return this.locale; }; + SurveyModel.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getString(str); }; + Object.defineProperty(SurveyModel.prototype, "emptySurveyText", { + get: function () { return this.getLocString("emptySurvey"); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completedHtml", { + get: function () { return this.locCompletedHtml.text; }, + set: function (value) { this.locCompletedHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompletedHtml", { + get: function () { return this.locCompletedHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pagePrevText", { + get: function () { return this.locPagePrevText.text ? this.locPagePrevText.text : this.getLocString("pagePrevText"); }, + set: function (newValue) { this.locPagePrevText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPagePrevText", { + get: function () { return this.locPagePrevTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pageNextText", { + get: function () { return this.locPageNextText.text ? this.locPageNextText.text : this.getLocString("pageNextText"); }, + set: function (newValue) { this.locPageNextText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPageNextText", { + get: function () { return this.locPageNextTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completeText", { + get: function () { return this.locCompleteText.text ? this.locCompleteText.text : this.getLocString("completeText"); }, + set: function (newValue) { this.locCompleteText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompleteText", { + get: function () { return this.locCompleteTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplate.text; }, + set: function (value) { this.locQuestionTitleTemplate.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locQuestionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplateValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showPageNumbers", { + get: function () { return this.showPageNumbersValue; }, + set: function (value) { + if (value === this.showPageNumbers) + return; + this.showPageNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showQuestionNumbers", { + get: function () { return this.showQuestionNumbersValue; }, + set: function (value) { + if (value === this.showQuestionNumbers) + return; + this.showQuestionNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "processedTitle", { + get: function () { return this.processText(this.title); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleLocation", { + get: function () { return this.questionTitleLocationValue; }, + set: function (value) { + if (value === this.questionTitleLocationValue) + return; + this.questionTitleLocationValue = value; + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "mode", { + get: function () { return this.modeValue; }, + set: function (value) { + if (value == this.mode) + return; + if (value != "edit" && value != "display") + return; + this.modeValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "data", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + result[key] = this.valuesHash[key]; + } + return result; + }, + set: function (data) { + this.valuesHash = {}; + if (data) { + for (var key in data) { + this._setDataValue(data, key); + this.checkTriggers(key, data[key], false); + if (!this.processedTextValues[key.toLowerCase()]) { + this.processedTextValues[key.toLowerCase()] = "value"; + } + } + } + this.notifyAllQuestionsOnValueChanged(); + this.runConditions(); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype._setDataValue = function (data, key) { + this.valuesHash[key] = data[key]; + }; + Object.defineProperty(SurveyModel.prototype, "comments", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + if (key.indexOf(this.commentPrefix) > 0) { + result[key] = this.valuesHash[key]; + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePages", { + get: function () { + if (this.isDesignMode) + return this.pages; + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].isVisible) { + result.push(this.pages[i]); + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEmpty", { + get: function () { return this.pages.length == 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "PageCount", { + get: function () { + return this.pages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePageCount", { + get: function () { + return this.visiblePages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPage", { + get: function () { + var vPages = this.visiblePages; + if (this.currentPageValue != null) { + if (vPages.indexOf(this.currentPageValue) < 0) { + this.currentPage = null; + } + } + if (this.currentPageValue == null && vPages.length > 0) { + this.currentPage = vPages[0]; + } + return this.currentPageValue; + }, + set: function (value) { + var vPages = this.visiblePages; + if (value != null && vPages.indexOf(value) < 0) + return; + if (value == this.currentPageValue) + return; + var oldValue = this.currentPageValue; + this.currentPageValue = value; + this.updateCustomWidgets(value); + this.currentPageChanged(value, oldValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPageNo", { + get: function () { + return this.visiblePages.indexOf(this.currentPage); + }, + set: function (value) { + var vPages = this.visiblePages; + if (value < 0 || value >= this.visiblePages.length) + return; + this.currentPage = this.visiblePages[value]; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.focusFirstQuestion = function () { + if (this.currentPageValue) { + this.currentPageValue.scrollToTop(); + this.currentPageValue.focusFirstQuestion(); + } + }; + Object.defineProperty(SurveyModel.prototype, "state", { + get: function () { + if (this.isLoading) + return "loading"; + if (this.isCompleted) + return "completed"; + return (this.currentPage) ? "running" : "empty"; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.clear = function (clearData, gotoFirstPage) { + if (clearData === void 0) { clearData = true; } + if (gotoFirstPage === void 0) { gotoFirstPage = true; } + if (clearData) { + this.data = null; + this.variablesHash = {}; + } + this.isCompleted = false; + if (gotoFirstPage && this.visiblePageCount > 0) { + this.currentPage = this.visiblePages[0]; + } + }; + SurveyModel.prototype.mergeValues = function (src, dest) { + if (!dest || !src) + return; + for (var key in src) { + var value = src[key]; + if (value && typeof value === 'object') { + if (!dest[key]) + dest[key] = {}; + this.mergeValues(value, dest[key]); + } + else { + dest[key] = value; + } + } + }; + SurveyModel.prototype.updateCustomWidgets = function (page) { + if (!page) + return; + for (var i = 0; i < page.questions.length; i++) { + page.questions[i].customWidget = __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__["a" /* CustomWidgetCollection */].Instance.getCustomWidget(page.questions[i]); + } + }; + SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) { + this.onCurrentPageChanged.fire(this, { 'oldCurrentPage': oldValue, 'newCurrentPage': newValue }); + }; + SurveyModel.prototype.getProgress = function () { + if (this.currentPage == null) + return 0; + var index = this.visiblePages.indexOf(this.currentPage) + 1; + return Math.ceil((index * 100 / this.visiblePageCount)); + }; + Object.defineProperty(SurveyModel.prototype, "isNavigationButtonsShowing", { + get: function () { + if (this.isDesignMode) + return false; + var page = this.currentPage; + if (!page) + return false; + return page.navigationButtonsVisibility == "show" || + (page.navigationButtonsVisibility != "hide" && this.showNavigationButtons); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEditMode", { + get: function () { return this.mode == "edit"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDisplayMode", { + get: function () { return this.mode == "display"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDesignMode", { + get: function () { return this.isDesignModeValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setDesignMode = function (value) { + this.isDesignModeValue = value; + }; + Object.defineProperty(SurveyModel.prototype, "hasCookie", { + get: function () { + if (!this.cookieName) + return false; + var cookies = document.cookie; + return cookies && cookies.indexOf(this.cookieName + "=true") > -1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=true; expires=Fri, 31 Dec 9999 0:0:0 GMT"; + }; + SurveyModel.prototype.deleteCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=;"; + }; + SurveyModel.prototype.nextPage = function () { + if (this.isLastPage) + return false; + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doNextPage(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isCurrentPageHasErrors", { + get: function () { + if (this.currentPage == null) + return true; + return this.currentPage.hasErrors(true, true); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.prevPage = function () { + if (this.isFirstPage) + return false; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index - 1]; + }; + SurveyModel.prototype.completeLastPage = function () { + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doComplete(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isFirstPage", { + get: function () { + if (this.currentPage == null) + return true; + return this.visiblePages.indexOf(this.currentPage) == 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isLastPage", { + get: function () { + if (this.currentPage == null) + return true; + var vPages = this.visiblePages; + return vPages.indexOf(this.currentPage) == vPages.length - 1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.doComplete = function () { + this.clearUnusedValues(); + this.setCookie(); + this.setCompleted(); + this.onComplete.fire(this, null); + if (this.surveyPostId) { + this.sendResult(); + } + }; + Object.defineProperty(SurveyModel.prototype, "isValidatingOnServer", { + get: function () { return this.isValidatingOnServerValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setIsValidatingOnServer = function (val) { + if (val == this.isValidatingOnServer) + return; + this.isValidatingOnServerValue = val; + this.onIsValidatingOnServerChanged(); + }; + SurveyModel.prototype.onIsValidatingOnServerChanged = function () { }; + SurveyModel.prototype.doServerValidation = function () { + if (!this.onServerValidateQuestions) + return false; + var self = this; + var options = { data: {}, errors: {}, survey: this, complete: function () { self.completeServerValidation(options); } }; + for (var i = 0; i < this.currentPage.questions.length; i++) { + var question = this.currentPage.questions[i]; + if (!question.visible) + continue; + var value = this.getValue(question.name); + if (value) + options.data[question.name] = value; + } + this.setIsValidatingOnServer(true); + this.onServerValidateQuestions(this, options); + return true; + }; + SurveyModel.prototype.completeServerValidation = function (options) { + this.setIsValidatingOnServer(false); + if (!options && !options.survey) + return; + var self = options.survey; + var hasErrors = false; + if (options.errors) { + for (var name in options.errors) { + var question = self.getQuestionByName(name); + if (question && question["errors"]) { + hasErrors = true; + question["addError"](new __WEBPACK_IMPORTED_MODULE_8__error__["a" /* CustomError */](options.errors[name])); + } + } + } + if (!hasErrors) { + if (self.isLastPage) + self.doComplete(); + else + self.doNextPage(); + } + }; + SurveyModel.prototype.doNextPage = function () { + this.checkOnPageTriggers(); + if (this.sendResultOnPageNext) { + this.sendResult(this.surveyPostId, this.clientId, true); + } + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index + 1]; + }; + SurveyModel.prototype.setCompleted = function () { + this.isCompleted = true; + }; + Object.defineProperty(SurveyModel.prototype, "processedCompletedHtml", { + get: function () { + if (this.completedHtml) { + return this.processHtml(this.completedHtml); + } + return "

" + this.getLocString("completingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "processedLoadingHtml", { + get: function () { + return "

" + this.getLocString("loadingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "progressText", { + get: function () { + if (this.currentPage == null) + return ""; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage) + 1; + return this.getLocString("progressText")["format"](index, vPages.length); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.afterRenderSurvey = function (htmlElement) { + this.onAfterRenderSurvey.fire(this, { survey: this, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPage = function (htmlElement) { + if (this.onAfterRenderPage.isEmpty) + return; + this.onAfterRenderPage.fire(this, { page: this.currentPage, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) { + this.onAfterRenderQuestion.fire(this, { question: question, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) { + this.onAfterRenderPanel.fire(this, { panel: panel, htmlElement: htmlElement }); + }; + SurveyModel.prototype.uploadFile = function (name, file, storeDataAsText, uploadingCallback) { + var accept = true; + this.onUploadFile.fire(this, { name: name, file: file, accept: accept }); + if (!accept) + return false; + if (!storeDataAsText && this.surveyPostId) { + this.uploadFileCore(name, file, uploadingCallback); + } + return true; + }; + SurveyModel.prototype.uploadFileCore = function (name, file, uploadingCallback) { + var self = this; + if (uploadingCallback) + uploadingCallback("uploading"); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendFile(this.surveyPostId, file, function (success, response) { + if (uploadingCallback) + uploadingCallback(success ? "success" : "error"); + if (success) { + self.setValue(name, response); + } + }); + }; + SurveyModel.prototype.getPage = function (index) { + return this.pages[index]; + }; + SurveyModel.prototype.addPage = function (page) { + if (page == null) + return; + this.pages.push(page); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.addNewPage = function (name) { + var page = this.createNewPage(name); + this.addPage(page); + return page; + }; + SurveyModel.prototype.removePage = function (page) { + var index = this.pages.indexOf(page); + if (index < 0) + return; + this.pages.splice(index, 1); + if (this.currentPageValue == page) { + this.currentPage = this.pages.length > 0 ? this.pages[0] : null; + } + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var questions = this.getAllQuestions(); + if (caseInsensitive) + name = name.toLowerCase(); + for (var i = 0; i < questions.length; i++) { + var questionName = questions[i].name; + if (caseInsensitive) + questionName = questionName.toLowerCase(); + if (questionName == name) + return questions[i]; + } + return null; + }; + SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var question = this.getQuestionByName(names[i], caseInsensitive); + if (question) + result.push(question); + } + return result; + }; + SurveyModel.prototype.getPageByElement = function (element) { + for (var i = 0; i < this.pages.length; i++) { + var page = this.pages[i]; + if (page.containsElement(element)) + return page; + } + return null; + }; + SurveyModel.prototype.getPageByQuestion = function (question) { + return this.getPageByElement(question); + }; + SurveyModel.prototype.getPageByName = function (name) { + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].name == name) + return this.pages[i]; + } + return null; + }; + SurveyModel.prototype.getPagesByNames = function (names) { + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var page = this.getPageByName(names[i]); + if (page) + result.push(page); + } + return result; + }; + SurveyModel.prototype.getAllQuestions = function (visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].addQuestionsToList(result, visibleOnly); + } + return result; + }; + SurveyModel.prototype.createNewPage = function (name) { return new __WEBPACK_IMPORTED_MODULE_3__page__["a" /* PageModel */](name); }; + SurveyModel.prototype.notifyQuestionOnValueChanged = function (name, newValue) { + var questions = this.getAllQuestions(); + var question = null; + for (var i = 0; i < questions.length; i++) { + if (questions[i].name != name) + continue; + question = questions[i]; + this.doSurveyValueChanged(question, newValue); + } + this.onValueChanged.fire(this, { 'name': name, 'question': question, 'value': newValue }); + }; + SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.doSurveyValueChanged(questions[i], this.getValue(questions[i].name)); + } + }; + SurveyModel.prototype.doSurveyValueChanged = function (question, newValue) { + question.onSurveyValueChanged(newValue); + }; + SurveyModel.prototype.checkOnPageTriggers = function () { + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + var question = questions[i]; + var value = this.getValue(question.name); + this.checkTriggers(question.name, value, true); + } + }; + SurveyModel.prototype.getCurrentPageQuestions = function () { + var result = []; + var page = this.currentPage; + if (!page) + return result; + for (var i = 0; i < page.questions.length; i++) { + var question = page.questions[i]; + if (!question.visible || !question.name) + continue; + result.push(question); + } + return result; + }; + SurveyModel.prototype.checkTriggers = function (name, newValue, isOnNextPage) { + for (var i = 0; i < this.triggers.length; i++) { + var trigger = this.triggers[i]; + if (trigger.name == name && trigger.isOnNextPage == isOnNextPage) { + trigger.check(newValue); + } + } + }; + SurveyModel.prototype.doElementsOnLoad = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onSurveyLoad(); + } + }; + SurveyModel.prototype.runConditions = function () { + var pages = this.pages; + for (var i = 0; i < pages.length; i++) { + pages[i].runCondition(this.valuesHash); + } + }; + SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) { + if (postId === void 0) { postId = null; } + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + if (!this.isEditMode) + return; + if (isPartialCompleted && this.onPartialSend) { + this.onPartialSend.fire(this, null); + } + if (!postId && this.surveyPostId) { + postId = this.surveyPostId; + } + if (!postId) + return; + if (clientId) { + this.clientId = clientId; + } + if (isPartialCompleted && !this.clientId) + return; + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendResult(postId, this.data, function (success, response) { + self.onSendResult.fire(self, { success: success, response: response }); + }, this.clientId, isPartialCompleted); + }; + SurveyModel.prototype.getResult = function (resultId, name) { + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().getResult(resultId, name, function (success, data, dataList, response) { + self.onGetResult.fire(self, { success: success, data: data, dataList: dataList, response: response }); + }); + }; + SurveyModel.prototype.loadSurveyFromService = function (surveyId) { + if (surveyId === void 0) { surveyId = null; } + if (surveyId) { + this.surveyId = surveyId; + } + var self = this; + this.isLoading = true; + this.onLoadingSurveyFromService(); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().loadSurvey(this.surveyId, function (success, result, response) { + self.isLoading = false; + if (success && result) { + self.setJsonObject(result); + self.notifyAllQuestionsOnValueChanged(); + self.onLoadSurveyFromService(); + } + }); + }; + SurveyModel.prototype.onLoadingSurveyFromService = function () { + }; + SurveyModel.prototype.onLoadSurveyFromService = function () { + }; + SurveyModel.prototype.checkPageVisibility = function (question, oldQuestionVisible) { + var page = this.getPageByQuestion(question); + if (!page) + return; + var newValue = page.isVisible; + if (newValue != page.getIsPageVisible(question) || oldQuestionVisible) { + this.pageVisibilityChanged(page, newValue); + } + }; + SurveyModel.prototype.updateVisibleIndexes = function () { + this.updatePageVisibleIndexes(this.showPageNumbers); + if (this.showQuestionNumbers == "onPage") { + var visPages = this.visiblePages; + for (var i = 0; i < visPages.length; i++) { + this.updateQuestionVisibleIndexes(visPages[i].questions, true); + } + } + else { + this.updateQuestionVisibleIndexes(this.getAllQuestions(false), this.showQuestionNumbers == "on"); + } + }; + SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) { + var index = 0; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].visibleIndex = this.pages[i].visible ? (index++) : -1; + this.pages[i].num = showIndex && this.pages[i].visible ? this.pages[i].visibleIndex + 1 : -1; + } + }; + SurveyModel.prototype.updateQuestionVisibleIndexes = function (questions, showIndex) { + var index = 0; + for (var i = 0; i < questions.length; i++) { + questions[i].setVisibleIndex(showIndex && questions[i].visible && questions[i].hasTitle ? (index++) : -1); + } + }; + Object.defineProperty(SurveyModel.prototype, "isLoadingFromJson", { + get: function () { return this.isLoadingFromJsonValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setJsonObject = function (jsonObj) { + if (!jsonObj) + return; + this.jsonErrors = null; + this.isLoadingFromJsonValue = true; + var jsonConverter = new __WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */](); + jsonConverter.toObject(jsonObj, this); + if (jsonConverter.errors.length > 0) { + this.jsonErrors = jsonConverter.errors; + } + this.isLoadingFromJsonValue = false; + this.updateProcessedTextValues(); + if (this.hasCookie) { + this.doComplete(); + } + this.doElementsOnLoad(); + this.runConditions(); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.onBeforeCreating = function () { }; + SurveyModel.prototype.onCreating = function () { }; + SurveyModel.prototype.updateProcessedTextValues = function () { + this.processedTextValues = {}; + var self = this; + this.processedTextValues["pageno"] = function (name) { return self.currentPage != null ? self.visiblePages.indexOf(self.currentPage) + 1 : 0; }; + this.processedTextValues["pagecount"] = function (name) { return self.visiblePageCount; }; + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.addQuestionToProcessedTextValues(questions[i]); + } + }; + SurveyModel.prototype.addQuestionToProcessedTextValues = function (question) { + this.processedTextValues[question.name.toLowerCase()] = "question"; + }; + SurveyModel.prototype.hasProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + return this.processedTextValues[firstName.toLowerCase()]; + }; + SurveyModel.prototype.getProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + var val = this.processedTextValues[firstName.toLowerCase()]; + if (!val) + return null; + if (val == "variable") { + return this.getVariable(name.toLowerCase()); + } + if (val == "question") { + var question = this.getQuestionByName(firstName, true); + if (!question) + return null; + name = question.name + name.substr(firstName.length); + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + if (val == "value") { + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + return val(name); + }; + SurveyModel.prototype.clearUnusedValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + questions[i].clearUnusedValues(); + } + if (this.clearInvisibleValues) { + this.clearInvisibleQuestionValues(); + } + }; + SurveyModel.prototype.clearInvisibleQuestionValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].visible) + continue; + this.clearValue(questions[i].name); + } + }; + SurveyModel.prototype.getVariable = function (name) { + if (!name) + return null; + return this.variablesHash[name]; + }; + SurveyModel.prototype.setVariable = function (name, newValue) { + if (!name) + return; + this.variablesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "variable"; + }; + //ISurvey data + SurveyModel.prototype.getUnbindValue = function (value) { + if (value && value instanceof Object) { + //do not return the same object instance!!! + return JSON.parse(JSON.stringify(value)); + } + return value; + }; + SurveyModel.prototype.getValue = function (name) { + if (!name || name.length == 0) + return null; + var value = this.valuesHash[name]; + return this.getUnbindValue(value); + }; + SurveyModel.prototype.setValue = function (name, newValue) { + if (this.isValueEqual(name, newValue)) + return; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + newValue = this.getUnbindValue(newValue); + this.valuesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "value"; + } + this.notifyQuestionOnValueChanged(name, newValue); + this.checkTriggers(name, newValue, false); + this.runConditions(); + this.tryGoNextPageAutomatic(name); + }; + SurveyModel.prototype.isValueEqual = function (name, newValue) { + if (newValue == "") + newValue = null; + var oldValue = this.getValue(name); + if (newValue === null || oldValue === null) + return newValue === oldValue; + return this.isTwoValueEquals(newValue, oldValue); + }; + SurveyModel.prototype.tryGoNextPageAutomatic = function (name) { + if (!this.goNextPageAutomatic || !this.currentPage) + return; + var question = this.getQuestionByName(name); + if (question && (!question.visible || !question.supportGoNextPageAutomatic())) + return; + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].hasInput && !this.getValue(questions[i].name)) + return; + } + if (!this.currentPage.hasErrors(true, false)) { + if (!this.isLastPage) { + this.nextPage(); + } + else { + this.doComplete(); + } + } + }; + SurveyModel.prototype.getComment = function (name) { + var result = this.data[name + this.commentPrefix]; + if (result == null) + result = ""; + return result; + }; + SurveyModel.prototype.setComment = function (name, newValue) { + name = name + this.commentPrefix; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + this.valuesHash[name] = newValue; + this.tryGoNextPageAutomatic(name); + } + }; + SurveyModel.prototype.clearValue = function (name) { + this.setValue(name, null); + this.setComment(name, null); + }; + SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) { + this.updateVisibleIndexes(); + this.onVisibleChanged.fire(this, { 'question': question, 'name': question.name, 'visible': newValue }); + this.checkPageVisibility(question, !newValue); + }; + SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) { + this.updateVisibleIndexes(); + this.onPageVisibleChanged.fire(this, { 'page': page, 'visible': newValue }); + }; + SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.addQuestionToProcessedTextValues(question); + this.onQuestionAdded.fire(this, { 'question': question, 'name': question.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.questionRemoved = function (question) { + this.updateVisibleIndexes(); + this.onQuestionRemoved.fire(this, { 'question': question, 'name': question.name }); + }; + SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.onPanelAdded.fire(this, { 'panel': panel, 'name': panel.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.panelRemoved = function (panel) { + this.updateVisibleIndexes(); + this.onPanelRemoved.fire(this, { 'panel': panel, 'name': panel.name }); + }; + SurveyModel.prototype.validateQuestion = function (name) { + if (this.onValidateQuestion.isEmpty) + return null; + var options = { name: name, value: this.getValue(name), error: null }; + this.onValidateQuestion.fire(this, options); + return options.error ? new __WEBPACK_IMPORTED_MODULE_8__error__["a" /* CustomError */](options.error) : null; + }; + SurveyModel.prototype.processHtml = function (html) { + var options = { html: html }; + this.onProcessHtml.fire(this, options); + return this.processText(options.html); + }; + SurveyModel.prototype.processText = function (text) { + return this.textPreProcessor.process(text); + }; + //ISurveyTriggerOwner + SurveyModel.prototype.getObjects = function (pages, questions) { + var result = []; + Array.prototype.push.apply(result, this.getPagesByNames(pages)); + Array.prototype.push.apply(result, this.getQuestionsByNames(questions)); + return result; + }; + SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) { + if (!name) + return; + if (isVariable) { + this.setVariable(name, value); + } + else { + this.setValue(name, value); + } + }; + return SurveyModel; +}(__WEBPACK_IMPORTED_MODULE_2__base__["a" /* Base */])); + +//Make localizable: completedHtml, pagePrevText, pageNextText, completeText +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("survey", [{ name: "locale", choices: function () { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getLocales(); } }, + { name: "title", serializationProperty: "locTitle" }, { name: "focusFirstQuestionAutomatic:boolean", default: true }, + { name: "completedHtml:html", serializationProperty: "locCompletedHtml" }, { name: "pages", className: "page", visible: false }, + { name: "questions", baseClassName: "question", visible: false, onGetValue: function (obj) { return null; }, onSetValue: function (obj, value, jsonConverter) { var page = obj.addNewPage(""); jsonConverter.toObject({ questions: value }, page); } }, + { name: "triggers:triggers", baseClassName: "surveytrigger", classNamePart: "trigger" }, + "surveyId", "surveyPostId", "cookieName", "sendResultOnPageNext:boolean", + { name: "showNavigationButtons:boolean", default: true }, { name: "showTitle:boolean", default: true }, + { name: "showPageTitles:boolean", default: true }, { name: "showCompletedPage:boolean", default: true }, + "showPageNumbers:boolean", { name: "showQuestionNumbers", default: "on", choices: ["on", "onPage", "off"] }, + { name: "questionTitleLocation", default: "top", choices: ["top", "bottom"] }, + { name: "showProgressBar", default: "off", choices: ["off", "top", "bottom"] }, + { name: "mode", default: "edit", choices: ["edit", "display"] }, + { name: "storeOthersAsComment:boolean", default: true }, "goNextPageAutomatic:boolean", "clearInvisibleValues:boolean", + { name: "pagePrevText", serializationProperty: "locPagePrevText" }, + { name: "pageNextText", serializationProperty: "locPageNextText" }, + { name: "completeText", serializationProperty: "locCompleteText" }, + { name: "requiredText", default: "*" }, "questionStartIndex", { name: "questionTitleTemplate", serializationProperty: "locQuestionTitleTemplate" }]); + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TextPreProcessorItem */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TextPreProcessor; }); +var TextPreProcessorItem = (function () { + function TextPreProcessorItem() { + } + return TextPreProcessorItem; +}()); + +var TextPreProcessor = (function () { + function TextPreProcessor() { + } + TextPreProcessor.prototype.process = function (text) { + if (!text) + return text; + if (!this.onProcess) + return text; + var items = this.getItems(text); + for (var i = items.length - 1; i >= 0; i--) { + var item = items[i]; + var name = this.getName(text.substring(item.start + 1, item.end)); + if (!this.canProcessName(name)) + continue; + if (this.onHasValue && !this.onHasValue(name)) + continue; + var value = this.onProcess(name); + if (value == null) + value = ""; + text = text.substr(0, item.start) + value + text.substr(item.end + 1); + } + return text; + }; + TextPreProcessor.prototype.getItems = function (text) { + var items = []; + var length = text.length; + var start = -1; + var ch = ''; + for (var i = 0; i < length; i++) { + ch = text[i]; + if (ch == '{') + start = i; + if (ch == '}') { + if (start > -1) { + var item = new TextPreProcessorItem(); + item.start = start; + item.end = i; + items.push(item); + } + start = -1; + } + } + return items; + }; + TextPreProcessor.prototype.getName = function (name) { + if (!name) + return; + return name.trim(); + }; + TextPreProcessor.prototype.canProcessName = function (name) { + if (!name) + return false; + for (var i = 0; i < name.length; i++) { + var ch = name[i]; + //TODO + if (ch == ' ' || ch == '-' || ch == '&') + return false; + } + return true; + }; + return TextPreProcessor; +}()); + + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return ValidatorResult; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return SurveyValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ValidatorRunner; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return NumericValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return TextValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AnswerCountValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return RegexValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return EmailValidator; }); + + + + + +var ValidatorResult = (function () { + function ValidatorResult(value, error) { + if (error === void 0) { error = null; } + this.value = value; + this.error = error; + } + return ValidatorResult; +}()); + +var SurveyValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyValidator, _super); + function SurveyValidator() { + var _this = _super.call(this) || this; + _this.text = ""; + return _this; + } + SurveyValidator.prototype.getErrorText = function (name) { + if (this.text) + return this.text; + return this.getDefaultErrorText(name); + }; + SurveyValidator.prototype.getDefaultErrorText = function (name) { + return ""; + }; + SurveyValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + return null; + }; + return SurveyValidator; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +var ValidatorRunner = (function () { + function ValidatorRunner() { + } + ValidatorRunner.prototype.run = function (owner) { + for (var i = 0; i < owner.validators.length; i++) { + var validatorResult = owner.validators[i].validate(owner.value, owner.getValidatorTitle()); + if (validatorResult != null) { + if (validatorResult.error) + return validatorResult.error; + if (validatorResult.value) { + owner.value = validatorResult.value; + } + } + } + return null; + }; + return ValidatorRunner; +}()); + +var NumericValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](NumericValidator, _super); + function NumericValidator(minValue, maxValue) { + if (minValue === void 0) { minValue = null; } + if (maxValue === void 0) { maxValue = null; } + var _this = _super.call(this) || this; + _this.minValue = minValue; + _this.maxValue = maxValue; + return _this; + } + NumericValidator.prototype.getType = function () { return "numericvalidator"; }; + NumericValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value || !this.isNumber(value)) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* RequreNumericError */]()); + } + var result = new ValidatorResult(parseFloat(value)); + if (this.minValue && this.minValue > result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name)); + return result; + } + if (this.maxValue && this.maxValue < result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name)); + return result; + } + return (typeof value === 'number') ? null : result; + }; + NumericValidator.prototype.getDefaultErrorText = function (name) { + var vName = name ? name : "value"; + if (this.minValue && this.maxValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMinMax")["format"](vName, this.minValue, this.maxValue); + } + else { + if (this.minValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMin")["format"](vName, this.minValue); + } + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMax")["format"](vName, this.maxValue); + } + }; + NumericValidator.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return NumericValidator; +}(SurveyValidator)); + +var TextValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](TextValidator, _super); + function TextValidator(minLength, maxLength) { + if (minLength === void 0) { minLength = 0; } + if (maxLength === void 0) { maxLength = 0; } + var _this = _super.call(this) || this; + _this.minLength = minLength; + _this.maxLength = maxLength; + return _this; + } + TextValidator.prototype.getType = function () { return "textvalidator"; }; + TextValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (this.minLength > 0 && value.length < this.minLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + } + if (this.maxLength > 0 && value.length > this.maxLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + } + return null; + }; + TextValidator.prototype.getDefaultErrorText = function (name) { + if (this.minLength > 0 && this.maxLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinMaxLength")["format"](this.minLength, this.maxLength); + if (this.minLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinLength")["format"](this.minLength); + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMaxLength")["format"](this.maxLength); + }; + return TextValidator; +}(SurveyValidator)); + +var AnswerCountValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerCountValidator, _super); + function AnswerCountValidator(minCount, maxCount) { + if (minCount === void 0) { minCount = null; } + if (maxCount === void 0) { maxCount = null; } + var _this = _super.call(this) || this; + _this.minCount = minCount; + _this.maxCount = maxCount; + return _this; + } + AnswerCountValidator.prototype.getType = function () { return "answercountvalidator"; }; + AnswerCountValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (value == null || value.constructor != Array) + return null; + var count = value.length; + if (this.minCount && count < this.minCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("minSelectError")["format"](this.minCount)))); + } + if (this.maxCount && count > this.maxCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("maxSelectError")["format"](this.maxCount)))); + } + return null; + }; + AnswerCountValidator.prototype.getDefaultErrorText = function (name) { + return name; + }; + return AnswerCountValidator; +}(SurveyValidator)); + +var RegexValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RegexValidator, _super); + function RegexValidator(regex) { + if (regex === void 0) { regex = null; } + var _this = _super.call(this) || this; + _this.regex = regex; + return _this; + } + RegexValidator.prototype.getType = function () { return "regexvalidator"; }; + RegexValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!this.regex || !value) + return null; + var re = new RegExp(this.regex); + if (re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + }; + return RegexValidator; +}(SurveyValidator)); + +var EmailValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](EmailValidator, _super); + function EmailValidator() { + var _this = _super.call(this) || this; + _this.re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; + return _this; + } + EmailValidator.prototype.getType = function () { return "emailvalidator"; }; + EmailValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value) + return null; + if (this.re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + }; + EmailValidator.prototype.getDefaultErrorText = function (name) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("invalidEmail"); + }; + return EmailValidator; +}(SurveyValidator)); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("surveyvalidator", ["text"]); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("numericvalidator", ["minValue:number", "maxValue:number"], function () { return new NumericValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("textvalidator", ["minLength:number", "maxLength:number"], function () { return new TextValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("answercountvalidator", ["minCount:number", "maxCount:number"], function () { return new AnswerCountValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("regexvalidator", ["regex"], function () { return new RegexValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("emailvalidator", [], function () { return new EmailValidator(); }, "surveyvalidator"); + + +/***/ }), +/* 27 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__page__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionfactory__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRow; }); +/* unused harmony export PanelImplementorBase */ +/* unused harmony export PageImplementor */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return Panel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Page; }); + + + + + + + +var QuestionRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRow, _super); + function QuestionRow(panel) { + var _this = _super.call(this, panel) || this; + _this.panel = panel; + _this.koVisible = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.visible); + _this.koElements = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + return _this; + } + QuestionRow.prototype.addElement = function (q) { + _super.prototype.addElement.call(this, q); + this.koElements(this.elements); + }; + QuestionRow.prototype.onVisibleChanged = function () { + this.koVisible(this.visible); + _super.prototype.onVisibleChanged.call(this); + }; + QuestionRow.prototype.koAfterRender = function (el, con) { + for (var i = 0; i < el.length; i++) { + var tEl = el[i]; + var nName = tEl.nodeName; + if (nName == "#text") + tEl.data = ""; + } + }; + return QuestionRow; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["b" /* QuestionRowModel */])); + +var PanelImplementorBase = (function () { + function PanelImplementorBase(panel) { + this.panel = panel; + var self = this; + this.koRows = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + this.panel.rowsChangedCallback = function () { self.koRows(self.panel.rows); }; + this.panel["koQuestionAfterRender"] = function (el, con) { self.koQuestionAfterRender(el, con); }; + this.panel["koPanelAfterRender"] = function (el, con) { self.koPanelAfterRender(el, con); }; + this.panel["koRows"] = this.koRows; + } + PanelImplementorBase.prototype.koQuestionAfterRender = function (elements, con) { + if (!this.panel.data) + return; + var el = __WEBPACK_IMPORTED_MODULE_5__base__["c" /* SurveyElement */].GetFirstNonTextElement(elements); + if (el) + this.panel.data.afterRenderQuestion(con, el); + }; + PanelImplementorBase.prototype.koPanelAfterRender = function (elements, con) { + if (!this.panel.data) + return; + var el = __WEBPACK_IMPORTED_MODULE_5__base__["c" /* SurveyElement */].GetFirstNonTextElement(elements); + if (el) + this.panel.data.afterRenderPanel(con, el); + }; + return PanelImplementorBase; +}()); + +var PageImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PageImplementor, _super); + function PageImplementor(panel) { + var _this = _super.call(this, panel) || this; + _this.panel = panel; + _this.koNo = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); + _this.panel["koNo"] = _this.koNo; + return _this; + } + return PageImplementor; +}(PanelImplementorBase)); + +var Panel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Panel, _super); + function Panel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + new PanelImplementorBase(_this); + _this.onCreating(); + var self = _this; + _this.renderWidthChangedCallback = function () { self.onRenderWidthChanged(); }; + _this.koInnerMargin = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.getIndentSize(_this.innerIndent)); + return _this; + } + Panel.prototype.createRow = function () { return new QuestionRow(this); }; + Panel.prototype.onCreating = function () { }; + Panel.prototype.onNumChanged = function (value) { + this["koNo"](value > 0 ? value + ". " : ""); + }; + Panel.prototype.onRenderWidthChanged = function () { + this.koInnerMargin(this.getIndentSize(this.innerIndent)); + }; + Panel.prototype.getIndentSize = function (indent) { + if (indent < 1) + return ""; + if (!this.data) + return ""; + var css = this.data["css"]; + if (!css) + return ""; + return indent * css.question.indent + "px"; + }; + return Panel; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["c" /* PanelModel */])); + +var Page = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Page, _super); + function Page(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + new PageImplementor(_this); + _this.onCreating(); + return _this; + } + Page.prototype.createRow = function () { return new QuestionRow(this); }; + Page.prototype.createNewPanel = function (name) { + return new Panel(name); + }; + Page.prototype.onCreating = function () { }; + Page.prototype.onNumChanged = function (value) { + this["koNo"](value > 0 ? value + ". " : ""); + }; + return Page; +}(__WEBPACK_IMPORTED_MODULE_2__page__["a" /* PageModel */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("panel", function () { return new Panel(); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("page", function () { return new Page(); }); +__WEBPACK_IMPORTED_MODULE_6__questionfactory__["b" /* ElementFactory */].Instance.registerElement("panel", function (name) { return new Panel(name); }); + + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return koTemplate; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTemplateText; }); +var koTemplate = __webpack_require__(81); +var SurveyTemplateText = (function () { + function SurveyTemplateText() { + } + SurveyTemplateText.prototype.addText = function (newText, id, name) { + id = this.getId(id, name); + this.text = this.text + ''; + }; + SurveyTemplateText.prototype.replaceText = function (replaceText, id, questionType) { + if (questionType === void 0) { questionType = null; } + var posId = this.getId(id, questionType); + var pos = this.text.indexOf(posId); + if (pos < 0) { + this.addText(replaceText, id, questionType); + return; + } + pos = this.text.indexOf('>', pos); + if (pos < 0) + return; + var startPos = pos + 1; + var endString = ""; + pos = this.text.indexOf(endString, startPos); + if (pos < 0) + return; + this.text = this.text.substr(0, startPos) + replaceText + this.text.substr(pos); + }; + SurveyTemplateText.prototype.getId = function (id, questionType) { + var result = 'id="survey-' + id; + if (questionType) { + result += "-" + questionType; + } + return result + '"'; + }; + Object.defineProperty(SurveyTemplateText.prototype, "text", { + get: function () { return koTemplate; }, + set: function (value) { koTemplate = value; }, + enumerable: true, + configurable: true + }); + return SurveyTemplateText; +}()); + + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditions__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionsParser; }); + +var ConditionsParser = (function () { + function ConditionsParser() { + } + ConditionsParser.prototype.parse = function (text, root) { + this.text = text; + this.root = root; + this.root.clear(); + this.at = 0; + this.length = this.text.length; + var res = this.parseText(); + return res; + }; + ConditionsParser.prototype.toString = function (root) { + this.root = root; + return this.nodeToString(root); + }; + ConditionsParser.prototype.toStringCore = function (value) { + if (!value) + return ""; + if (value["children"]) + return this.nodeToString(value); + if (value["left"]) + return this.conditionToString(value); + return ""; + }; + ConditionsParser.prototype.nodeToString = function (node) { + if (node.isEmpty) + return ""; + var res = ""; + for (var i = 0; i < node.children.length; i++) { + var nodeText = this.toStringCore(node.children[i]); + if (nodeText) { + if (res) + res += ' ' + node.connective + ' '; + res += nodeText; + } + } + if (node != this.root && node.children.length > 1) { + res = '(' + res + ')'; + } + return res; + }; + ConditionsParser.prototype.conditionToString = function (condition) { + if (!condition.right || !condition.operator) + return ""; + var left = condition.left; + if (left && !this.isNumeric(left)) + left = "'" + left + "'"; + var res = left + ' ' + this.operationToString(condition.operator); + if (this.isNoRightOperation(condition.operator)) + return res; + var right = condition.right; + if (right && !this.isNumeric(right)) + right = "'" + right + "'"; + return res + ' ' + right; + }; + ConditionsParser.prototype.operationToString = function (op) { + if (op == "equal") + return "="; + if (op == "notequal") + return "!="; + if (op == "greater") + return ">"; + if (op == "less") + return "<"; + if (op == "greaterorequal") + return ">="; + if (op == "lessorequal") + return "<="; + return op; + }; + ConditionsParser.prototype.isNumeric = function (value) { + var val = parseFloat(value); + if (isNaN(val)) + return false; + return isFinite(val); + }; + ConditionsParser.prototype.parseText = function () { + this.node = this.root; + this.expressionNodes = []; + this.expressionNodes.push(this.node); + var res = this.readConditions(); + return res && this.at >= this.length; + }; + ConditionsParser.prototype.readConditions = function () { + var res = this.readCondition(); + if (!res) + return res; + var connective = this.readConnective(); + if (connective) { + this.addConnective(connective); + return this.readConditions(); + } + return true; + }; + ConditionsParser.prototype.readCondition = function () { + var expRes = this.readExpression(); + if (expRes < 0) + return false; + if (expRes == 1) + return true; + var left = this.readString(); + if (!left) + return false; + var op = this.readOperator(); + if (!op) + return false; + var c = new __WEBPACK_IMPORTED_MODULE_0__conditions__["b" /* Condition */](); + c.left = left; + c.operator = op; + if (!this.isNoRightOperation(op)) { + var right = this.readString(); + if (!right) + return false; + c.right = right; + } + this.addCondition(c); + return true; + }; + ConditionsParser.prototype.readExpression = function () { + this.skip(); + if (this.at >= this.length || this.ch != '(') + return 0; + this.at++; + this.pushExpression(); + var res = this.readConditions(); + if (res) { + this.skip(); + res = this.ch == ')'; + this.at++; + this.popExpression(); + return 1; + } + return -1; + }; + Object.defineProperty(ConditionsParser.prototype, "ch", { + get: function () { return this.text.charAt(this.at); }, + enumerable: true, + configurable: true + }); + ConditionsParser.prototype.skip = function () { + while (this.at < this.length && this.isSpace(this.ch)) + this.at++; + }; + ConditionsParser.prototype.isSpace = function (c) { + return c == ' ' || c == '\n' || c == '\t' || c == '\r'; + }; + ConditionsParser.prototype.isQuotes = function (c) { + return c == "'" || c == '"'; + }; + ConditionsParser.prototype.isOperatorChar = function (c) { + return c == '>' || c == '<' || c == '=' || c == '!'; + }; + ConditionsParser.prototype.isBrackets = function (c) { + return c == '(' || c == ')'; + }; + ConditionsParser.prototype.readString = function () { + this.skip(); + if (this.at >= this.length) + return null; + var start = this.at; + var hasQuotes = this.isQuotes(this.ch); + if (hasQuotes) + this.at++; + var isFirstOpCh = this.isOperatorChar(this.ch); + while (this.at < this.length) { + if (!hasQuotes && this.isSpace(this.ch)) + break; + if (this.isQuotes(this.ch)) { + if (hasQuotes) + this.at++; + break; + } + if (!hasQuotes) { + if (isFirstOpCh != this.isOperatorChar(this.ch)) + break; + if (this.isBrackets(this.ch)) + break; + } + this.at++; + } + if (this.at <= start) + return null; + var res = this.text.substr(start, this.at - start); + if (res) { + if (res.length > 1 && this.isQuotes(res[0])) { + var len = res.length - 1; + if (this.isQuotes(res[res.length - 1])) + len--; + res = res.substr(1, len); + } + } + return res; + }; + ConditionsParser.prototype.isNoRightOperation = function (op) { + return op == "empty" || op == "notempty"; + }; + ConditionsParser.prototype.readOperator = function () { + var op = this.readString(); + if (!op) + return null; + op = op.toLowerCase(); + if (op == '>') + op = "greater"; + if (op == '<') + op = "less"; + if (op == '>=' || op == '=>') + op = "greaterorequal"; + if (op == '<=' || op == '=<') + op = "lessorequal"; + if (op == '=' || op == '==') + op = "equal"; + if (op == '<>' || op == '!=') + op = "notequal"; + if (op == 'contain') + op = "contains"; + if (op == 'notcontain') + op = "notcontains"; + return op; + }; + ConditionsParser.prototype.readConnective = function () { + var con = this.readString(); + if (!con) + return null; + con = con.toLowerCase(); + if (con == "&" || con == "&&") + con = "and"; + if (con == "|" || con == "||") + con = "or"; + if (con != "and" && con != "or") + con = null; + return con; + }; + ConditionsParser.prototype.pushExpression = function () { + var node = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.expressionNodes.push(node); + this.node = node; + }; + ConditionsParser.prototype.popExpression = function () { + var node = this.expressionNodes.pop(); + this.node = this.expressionNodes[this.expressionNodes.length - 1]; + this.node.children.push(node); + }; + ConditionsParser.prototype.addCondition = function (c) { + this.node.children.push(c); + }; + ConditionsParser.prototype.addConnective = function (con) { + if (this.node.children.length < 2) { + this.node.connective = con; + } + else { + if (this.node.connective != con) { + var oldCon = this.node.connective; + var oldChildren = this.node.children; + this.node.clear(); + this.node.connective = con; + var oldNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + oldNode.connective = oldCon; + oldNode.children = oldChildren; + this.node.children.push(oldNode); + var newNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.node.children.push(newNode); + this.node = newNode; + } + } + }; + return ConditionsParser; +}()); + + + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return dxSurveyService; }); +var dxSurveyService = (function () { + //public static serviceUrl: string = "http://localhost:50488/api/Survey"; + function dxSurveyService() { + } + dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', dxSurveyService.serviceUrl + '/getSurvey?surveyId=' + surveyId); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.onload = function () { + var result = JSON.parse(xhr.response); + onLoad(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) { + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + var xhr = new XMLHttpRequest(); + xhr.open('POST', dxSurveyService.serviceUrl + '/post/'); + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + var data = { postId: postId, surveyResult: JSON.stringify(result) }; + if (clientId) + data['clientId'] = clientId; + if (isPartialCompleted) + data['isPartialCompleted'] = true; + var dataStringify = JSON.stringify(data); + var self = this; + xhr.onload = xhr.onerror = function () { + if (!onSendResult) + return; + onSendResult(xhr.status == 200, xhr.response); + }; + xhr.send(dataStringify); + }; + dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) { + var xhr = new XMLHttpRequest(); + xhr.onload = xhr.onerror = function () { + if (!onSendFile) + return; + onSendFile(xhr.status == 200, JSON.parse(xhr.response)); + }; + xhr.open("POST", dxSurveyService.serviceUrl + '/upload/', true); + var formData = new FormData(); + formData.append("file", file); + formData.append("postId", postId); + xhr.send(formData); + }; + dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&name=' + name; + xhr.open('GET', dxSurveyService.serviceUrl + '/getResult?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + var list = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + list = []; + for (var key in result.QuestionResult) { + var el = { name: key, value: result.QuestionResult[key] }; + list.push(el); + } + } + onGetResult(xhr.status == 200, result, list, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&clientId=' + clientId; + xhr.open('GET', dxSurveyService.serviceUrl + '/isCompleted?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + } + onIsCompleted(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + return dxSurveyService; +}()); + +dxSurveyService.serviceUrl = "https://dxsurveyapi.azurewebsites.net/api/Survey"; + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxModel; }); + + + + +var QuestionCheckboxModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxModel, _super); + function QuestionCheckboxModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionCheckboxModel.prototype.getHasOther = function (val) { + if (!val || !Array.isArray(val)) + return false; + return val.indexOf(this.otherItem.value) >= 0; + }; + QuestionCheckboxModel.prototype.valueFromDataCore = function (val) { + if (!val || !Array.isArray(val)) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) + return val; + if (this.hasUnknownValue(val[i])) { + this.comment = val[i]; + var newVal = val.slice(); + newVal[i] = this.otherItem.value; + return newVal; + } + } + return val; + }; + QuestionCheckboxModel.prototype.valueToDataCore = function (val) { + if (!val || !val.length) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) { + if (this.getComment()) { + var newVal = val.slice(); + newVal[i] = this.getComment(); + return newVal; + } + } + } + return val; + }; + QuestionCheckboxModel.prototype.getType = function () { + return "checkbox"; + }; + return QuestionCheckboxModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkbox", [], function () { return new QuestionCheckboxModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("checkbox", function (name) { var q = new QuestionCheckboxModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCommentModel; }); + + + + + +var QuestionCommentModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCommentModel, _super); + function QuestionCommentModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rows = 4; + _this.cols = 50; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionCommentModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionCommentModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionCommentModel.prototype.getType = function () { + return "comment"; + }; + QuestionCommentModel.prototype.isEmpty = function () { + return _super.prototype.isEmpty.call(this) || this.value == ""; + }; + return QuestionCommentModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("comment", [{ name: "cols:number", default: 50 }, { name: "rows:number", default: 4 }, + { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionCommentModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("comment", function (name) { return new QuestionCommentModel(name); }); + + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionDropdownModel; }); + + + + + + +var QuestionDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionDropdownModel, _super); + function QuestionDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionDropdownModel.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionDropdownModel.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionDropdownModel.prototype.getType = function () { + return "dropdown"; + }; + QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["b" /* QuestionSelectBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("dropdown", [{ name: "optionsCaption", serializationProperty: "locOptionsCaption" }], function () { return new QuestionDropdownModel(""); }, "selectbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("dropdown", function (name) { var q = new QuestionDropdownModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFileModel; }); + + + + + + +var QuestionFileModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFileModel, _super); + function QuestionFileModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.showPreviewValue = false; + _this.isUploading = false; + return _this; + } + QuestionFileModel.prototype.getType = function () { + return "file"; + }; + Object.defineProperty(QuestionFileModel.prototype, "showPreview", { + get: function () { return this.showPreviewValue; }, + set: function (value) { this.showPreviewValue = value; }, + enumerable: true, + configurable: true + }); + QuestionFileModel.prototype.loadFile = function (file) { + var self = this; + if (this.survey && !this.survey.uploadFile(this.name, file, this.storeDataAsText, function (status) { self.isUploading = status == "uploading"; })) + return; + this.setFileValue(file); + }; + QuestionFileModel.prototype.setFileValue = function (file) { + if (!FileReader) + return; + if (!this.showPreview && !this.storeDataAsText) + return; + if (this.checkFileForErrors(file)) + return; + var fileReader = new FileReader(); + var self = this; + fileReader.onload = function (e) { + if (self.showPreview) { + self.previewValue = self.isFileImage(file) ? fileReader.result : null; + self.fireCallback(self.previewValueLoadedCallback); + } + if (self.storeDataAsText) { + self.value = fileReader.result; + } + }; + fileReader.readAsDataURL(file); + }; + QuestionFileModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.isUploading) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("uploadingFile"))); + } + }; + QuestionFileModel.prototype.checkFileForErrors = function (file) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + if (this.maxSize > 0 && file.size > this.maxSize) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["d" /* ExceedSizeError */](this.maxSize)); + } + if (errorLength != this.errors.length || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + return this.errors.length > 0; + }; + QuestionFileModel.prototype.isFileImage = function (file) { + if (!file || !file.type) + return; + var str = file.type.toLowerCase(); + return str.indexOf("image") == 0; + }; + return QuestionFileModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("file", ["showPreview:boolean", "imageHeight", "imageWidth", "storeDataAsText:boolean", "maxSize:number"], function () { return new QuestionFileModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("file", function (name) { return new QuestionFileModel(name); }); + + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionbase__ = __webpack_require__(23); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionHtmlModel; }); + + + + + +var QuestionHtmlModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionHtmlModel, _super); + function QuestionHtmlModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locHtmlValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionHtmlModel.prototype.getType = function () { + return "html"; + }; + Object.defineProperty(QuestionHtmlModel.prototype, "html", { + get: function () { return this.locHtml.text; }, + set: function (value) { this.locHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "locHtml", { + get: function () { return this.locHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "processedHtml", { + get: function () { return this.survey ? this.survey.processHtml(this.html) : this.html; }, + enumerable: true, + configurable: true + }); + return QuestionHtmlModel; +}(__WEBPACK_IMPORTED_MODULE_1__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("html", [{ name: "html:html", serializationProperty: "locHtml" }], function () { return new QuestionHtmlModel(""); }, "questionbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("html", function (name) { return new QuestionHtmlModel(name); }); + + +/***/ }), +/* 37 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionfactory__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixModel; }); + + + + + + + + +var MatrixRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixRowModel, _super); + function MatrixRowModel(name, text, fullName, data, value) { + var _this = _super.call(this) || this; + _this.name = name; + _this.text = text; + _this.fullName = fullName; + _this.data = data; + _this.rowValue = value; + return _this; + } + Object.defineProperty(MatrixRowModel.prototype, "value", { + get: function () { return this.rowValue; }, + set: function (newValue) { + this.rowValue = newValue; + if (this.data) + this.data.onMatrixRowChanged(this); + this.onValueChanged(); + }, + enumerable: true, + configurable: true + }); + MatrixRowModel.prototype.onValueChanged = function () { + }; + return MatrixRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +var QuestionMatrixModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixModel, _super); + function QuestionMatrixModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRowChanging = false; + _this.isAllRowRequired = false; + _this.columnsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixModel.prototype.getType = function () { + return "matrix"; + }; + Object.defineProperty(QuestionMatrixModel.prototype, "hasRows", { + get: function () { + return this.rowsValue.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.columnsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "visibleRows", { + get: function () { + var result = new Array(); + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, this.name + '_' + this.rows[i].value.toString(), val[this.rows[i].value])); + } + if (result.length == 0) { + result.push(this.createMatrixRow(null, "", this.name, val)); + } + this.generatedVisibleRows = result; + return result; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () { return this.hasValuesInAllRows(); }; + QuestionMatrixModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("requiredInAllRowsError"))); + } + }; + QuestionMatrixModel.prototype.hasErrorInRows = function () { + if (!this.isAllRowRequired) + return false; + return !this.hasValuesInAllRows(); + }; + QuestionMatrixModel.prototype.hasValuesInAllRows = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var val = rows[i].value; + if (!val) + return false; + } + return true; + }; + QuestionMatrixModel.prototype.createMatrixRow = function (name, text, fullName, value) { + return new MatrixRowModel(name, text, fullName, this, value); + }; + QuestionMatrixModel.prototype.onValueChanged = function () { + if (this.isRowChanging || !(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.value; + if (!val) + val = {}; + if (this.rows.length == 0) { + this.generatedVisibleRows[0].value = val; + } + else { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + var rowVal = val[row.name] ? val[row.name] : null; + this.generatedVisibleRows[i].value = rowVal; + } + } + this.isRowChanging = false; + }; + //IMatrixData + QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) { + if (this.isRowChanging) + return; + this.isRowChanging = true; + if (!this.hasRows) { + this.setNewValue(row.value); + } + else { + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[row.name] = row.value; + this.setNewValue(newValue); + } + this.isRowChanging = false; + }; + return QuestionMatrixModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("matrix", [{ name: "columns:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.columns); }, onSetValue: function (obj, value) { obj.columns = value; } }, + { name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }, + "isAllRowRequired:boolean"], function () { return new QuestionMatrixModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrix", function (name) { var q = new QuestionMatrixModel(name); q.rows = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultRows; q.columns = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultColums; return q; }); + + +/***/ }), +/* 38 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDropdownRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionMatrixDropdownModel; }); + + + + + +var MatrixDropdownRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownRowModel, _super); + function MatrixDropdownRowModel(name, text, data, value) { + var _this = _super.call(this, data, value) || this; + _this.name = name; + _this.text = text; + return _this; + } + Object.defineProperty(MatrixDropdownRowModel.prototype, "rowName", { + get: function () { return this.name; }, + enumerable: true, + configurable: true + }); + return MatrixDropdownRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["b" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModel, _super); + function QuestionMatrixDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixDropdownModel.prototype.getType = function () { + return "matrixdropdown"; + }; + Object.defineProperty(QuestionMatrixDropdownModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModel.prototype.generateRows = function () { + var result = new Array(); + if (!this.rows || this.rows.length === 0) + return result; + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, val[this.rows[i].value])); + } + return result; + }; + QuestionMatrixDropdownModel.prototype.createMatrixRow = function (name, text, value) { + return new MatrixDropdownRowModel(name, text, this, value); + }; + return QuestionMatrixDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["a" /* QuestionMatrixDropdownModelBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdown", [{ name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }], function () { return new QuestionMatrixDropdownModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdropdown", function (name) { var q = new QuestionMatrixDropdownModel(name); q.choices = [1, 2, 3, 4, 5]; q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultColums; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["a" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 39 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDynamicRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionMatrixDynamicModel; }); + + + + + + + +var MatrixDynamicRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDynamicRowModel, _super); + function MatrixDynamicRowModel(index, data, value) { + var _this = _super.call(this, data, value) || this; + _this.index = index; + return _this; + } + Object.defineProperty(MatrixDynamicRowModel.prototype, "rowName", { + get: function () { return "row" + this.index; }, + enumerable: true, + configurable: true + }); + return MatrixDynamicRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["b" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDynamicModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamicModel, _super); + function QuestionMatrixDynamicModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowCounter = 0; + _this.rowCountValue = 2; + _this.minRowCount = 0; + _this.locAddRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + _this.locRemoveRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionMatrixDynamicModel.prototype.getType = function () { + return "matrixdynamic"; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "rowCount", { + get: function () { return this.rowCountValue; }, + set: function (val) { + if (val < 0 || val > QuestionMatrixDynamicModel.MaxRowCount) + return; + this.rowCountValue = val; + if (this.value && this.value.length > val) { + var qVal = this.value; + qVal.splice(val); + this.value = qVal; + } + this.fireCallback(this.rowCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.addRow = function () { + if (this.generatedVisibleRows) { + this.generatedVisibleRows.push(this.createMatrixRow(null)); + } + this.rowCount++; + }; + QuestionMatrixDynamicModel.prototype.removeRow = function (index) { + if (index < 0 || index >= this.rowCount) + return; + if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) { + this.generatedVisibleRows.splice(index, 1); + } + if (this.value) { + var val = this.createNewValue(this.value); + val.splice(index, 1); + val = this.deleteRowValue(val, null); + this.value = val; + } + this.rowCount--; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "addRowText", { + get: function () { return this.locAddRowText.text ? this.locAddRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("addRow"); }, + set: function (value) { this.locAddRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locAddRowText", { + get: function () { return this.locAddRowTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "removeRowText", { + get: function () { return this.locRemoveRowText.text ? this.locRemoveRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("removeRow"); }, + set: function (value) { this.locRemoveRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locRemoveRowText", { + get: function () { return this.locRemoveRowTextValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () { return false; }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "cachedVisibleRows", { + get: function () { + if (this.generatedVisibleRows && this.generatedVisibleRows.length == this.rowCount) + return this.generatedVisibleRows; + return this.visibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("minRowCountError")["format"](this.minRowCount))); + } + }; + QuestionMatrixDynamicModel.prototype.hasErrorInRows = function () { + if (this.minRowCount <= 0 || !this.generatedVisibleRows) + return false; + var res = false; + var setRowCount = 0; + for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) { + var row = this.generatedVisibleRows[rowIndex]; + if (!row.isEmpty) + setRowCount++; + } + return setRowCount < this.minRowCount; + }; + QuestionMatrixDynamicModel.prototype.generateRows = function () { + var result = new Array(); + if (this.rowCount === 0) + return result; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.rowCount; i++) { + result.push(this.createMatrixRow(this.getRowValueByIndex(val, i))); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) { + return new MatrixDynamicRowModel(this.rowCounter++, this, value); + }; + QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) { + var newRowCount = val && Array.isArray(val) ? val.length : 0; + if (newRowCount <= this.rowCount) + return; + this.rowCountValue = newRowCount; + if (this.generatedVisibleRows) { + this.generatedVisibleRows = this.visibleRows; + } + }; + QuestionMatrixDynamicModel.prototype.createNewValue = function (curValue) { + var result = curValue; + if (!result) + result = []; + var r = []; + if (result.length > this.rowCount) + result.splice(this.rowCount - 1); + for (var i = result.length; i < this.rowCount; i++) { + result.push({}); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) { + var isEmpty = true; + for (var i = 0; i < newValue.length; i++) { + if (Object.keys(newValue[i]).length > 0) { + isEmpty = false; + break; + } + } + return isEmpty ? null : newValue; + }; + QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) { + return index >= 0 && index < questionValue.length ? questionValue[index] : null; + }; + QuestionMatrixDynamicModel.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + return this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row)); + }; + return QuestionMatrixDynamicModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["a" /* QuestionMatrixDropdownModelBase */])); + +QuestionMatrixDynamicModel.MaxRowCount = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdynamic", [{ name: "rowCount:number", default: 2 }, { name: "minRowCount:number", default: 0 }, + { name: "addRowText", serializationProperty: "locAddRowText" }, { name: "removeRowText", serializationProperty: "locRemoveRowText" }], function () { return new QuestionMatrixDynamicModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdynamic", function (name) { var q = new QuestionMatrixDynamicModel(name); q.choices = [1, 2, 3, 4, 5]; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["a" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 40 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__validator__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MultipleTextItemModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMultipleTextModel; }); + + + + + + + + +var MultipleTextItemModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleTextItemModel, _super); + function MultipleTextItemModel(name, title) { + if (name === void 0) { name = null; } + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.validators = new Array(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.title = title; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + MultipleTextItemModel.prototype.getType = function () { + return "multipletextitem"; + }; + MultipleTextItemModel.prototype.setData = function (data) { + this.data = data; + }; + Object.defineProperty(MultipleTextItemModel.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "fullTitle", { + get: function () { + var res = this.title; + if (this.isRequired && this.data) + res = this.data.getIsRequiredText() + ' ' + res; + return res; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "value", { + get: function () { + return this.data ? this.data.getMultipleTextValue(this.name) : null; + }, + set: function (value) { + if (this.data != null) { + this.data.setMultipleTextValue(this.name, value); + } + }, + enumerable: true, + configurable: true + }); + MultipleTextItemModel.prototype.onValueChanged = function (newValue) { + }; + //IValidatorOwner + MultipleTextItemModel.prototype.getValidatorTitle = function () { return this.title; }; + //ILocalizableOwner + MultipleTextItemModel.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + return MultipleTextItemModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +var QuestionMultipleTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleTextModel, _super); + function QuestionMultipleTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + _this.itemSize = 25; + _this.itemsValues = new Array(); + _this.isMultipleItemValueChanging = false; + _this.setItemsOverriddenMethods(); + return _this; + } + QuestionMultipleTextModel.prototype.getType = function () { + return "multipletext"; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "items", { + get: function () { return this.itemsValues; }, + set: function (value) { + this.itemsValues = value; + this.setItemsOverriddenMethods(); + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.addItem = function (name, title) { + if (title === void 0) { title = null; } + var item = this.createTextItem(name, title); + this.items.push(item); + return item; + }; + QuestionMultipleTextModel.prototype.setItemsOverriddenMethods = function () { + var self = this; + this.itemsValues.push = function (value) { + value.setData(self); + var result = Array.prototype.push.call(this, value); + self.fireCallback(self.colCountChangedCallback); + return result; + }; + this.itemsValues.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var result = (_a = Array.prototype.splice).call.apply(_a, [self.itemsValues, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].setData(self); + } + self.fireCallback(self.colCountChangedCallback); + return result; + var _a; + }; + }; + QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () { + for (var i = 0; i < this.items.length; i++) { + if (!this.items[i].value) + return false; + } + return true; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 1 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.getRows = function () { + var colCount = this.colCount; + var items = this.items; + var rows = []; + var index = 0; + for (var i = 0; i < items.length; i++) { + if (index == 0) { + rows.push([]); + } + rows[rows.length - 1].push(items[i]); + index++; + if (index >= colCount) { + index = 0; + } + } + return rows; + }; + QuestionMultipleTextModel.prototype.onValueChanged = function () { + _super.prototype.onValueChanged.call(this); + this.onItemValueChanged(); + }; + QuestionMultipleTextModel.prototype.createTextItem = function (name, title) { + return new MultipleTextItemModel(name, title); + }; + QuestionMultipleTextModel.prototype.onItemValueChanged = function () { + if (this.isMultipleItemValueChanging) + return; + for (var i = 0; i < this.items.length; i++) { + var itemValue = null; + if (this.value && (this.items[i].name in this.value)) { + itemValue = this.value[this.items[i].name]; + } + this.items[i].onValueChanged(itemValue); + } + }; + QuestionMultipleTextModel.prototype.runValidators = function () { + var error = _super.prototype.runValidators.call(this); + if (error != null) + return error; + for (var i = 0; i < this.items.length; i++) { + error = new __WEBPACK_IMPORTED_MODULE_2__validator__["a" /* ValidatorRunner */]().run(this.items[i]); + if (error != null) + return error; + } + return null; + }; + QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var res = _super.prototype.hasErrors.call(this, fireCallback); + if (!res) + res = this.hasErrorInItems(fireCallback); + return res; + }; + QuestionMultipleTextModel.prototype.hasErrorInItems = function (fireCallback) { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.isRequired && !item.value) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["b" /* AnswerRequiredError */]()); + if (fireCallback) { + this.fireCallback(this.errorsChangedCallback); + } + return true; + } + } + return false; + }; + //IMultipleTextData + QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) { + if (!this.value) + return null; + return this.value[name]; + }; + QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) { + this.isMultipleItemValueChanging = true; + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[name] = value; + this.setNewValue(newValue); + this.isMultipleItemValueChanging = false; + }; + QuestionMultipleTextModel.prototype.getIsRequiredText = function () { + return this.survey ? this.survey.requiredText : ""; + }; + return QuestionMultipleTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletextitem", ["name", "isRequired:boolean", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "title", serializationProperty: "locTitle" }, { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], function () { return new MultipleTextItemModel(""); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletext", [{ name: "!items:textitems", className: "multipletextitem" }, + { name: "itemSize:number", default: 25 }, { name: "colCount:number", default: 1, choices: [1, 2, 3, 4] }], function () { return new QuestionMultipleTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("multipletext", function (name) { var q = new QuestionMultipleTextModel(name); q.addItem("text1"); q.addItem("text2"); return q; }); + + +/***/ }), +/* 41 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRadiogroupModel; }); + + + + +var QuestionRadiogroupModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRadiogroupModel, _super); + function QuestionRadiogroupModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionRadiogroupModel.prototype.getType = function () { + return "radiogroup"; + }; + QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionRadiogroupModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("radiogroup", [], function () { return new QuestionRadiogroupModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("radiogroup", function (name) { var q = new QuestionRadiogroupModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 42 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRatingModel; }); + + + + + + +var QuestionRatingModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRatingModel, _super); + function QuestionRatingModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rates = __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locMinRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + _this.locMaxRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionRatingModel.prototype, "rateValues", { + get: function () { return this.rates; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(this.rates, newValue); + this.fireCallback(this.rateValuesChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "visibleRateValues", { + get: function () { + if (this.rateValues.length > 0) + return this.rateValues; + return QuestionRatingModel.defaultRateValues; + }, + enumerable: true, + configurable: true + }); + QuestionRatingModel.prototype.getType = function () { + return "rating"; + }; + QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + QuestionRatingModel.prototype.supportComment = function () { return true; }; + QuestionRatingModel.prototype.supportOther = function () { return true; }; + Object.defineProperty(QuestionRatingModel.prototype, "minRateDescription", { + get: function () { return this.locMinRateDescription.text; }, + set: function (value) { this.locMinRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMinRateDescription", { + get: function () { return this.locMinRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + Object.defineProperty(QuestionRatingModel.prototype, "maxRateDescription", { + get: function () { return this.locMaxRateDescription.text; }, + set: function (value) { this.locMaxRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMaxRateDescription", { + get: function () { return this.locMaxRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + return QuestionRatingModel; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +QuestionRatingModel.defaultRateValues = []; +__WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(QuestionRatingModel.defaultRateValues, [1, 2, 3, 4, 5]); +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("rating", ["hasComment:boolean", { name: "rateValues:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].getData(obj.rateValues); }, onSetValue: function (obj, value) { obj.rateValues = value; } }, + { name: "minRateDescription", alternativeName: "mininumRateDescription", serializationProperty: "locMinRateDescription" }, + { name: "maxRateDescription", alternativeName: "maximumRateDescription", serializationProperty: "locMaxRateDescription" }], function () { return new QuestionRatingModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("rating", function (name) { return new QuestionRatingModel(name); }); + + +/***/ }), +/* 43 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionTextModel; }); + + + + + +var QuestionTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionTextModel, _super); + function QuestionTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.size = 25; + _this.inputType = "text"; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionTextModel.prototype.getType = function () { + return "text"; + }; + QuestionTextModel.prototype.isEmpty = function () { return _super.prototype.isEmpty.call(this) || this.value == ""; }; + QuestionTextModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + Object.defineProperty(QuestionTextModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionTextModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionTextModel.prototype.setNewValue = function (newValue) { + newValue = this.correctValueType(newValue); + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionTextModel.prototype.correctValueType = function (newValue) { + if (!newValue) + return newValue; + if (this.inputType == "number" || this.inputType == "range") { + return this.isNumber(newValue) ? parseFloat(newValue) : ""; + } + return newValue; + }; + QuestionTextModel.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return QuestionTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("text", [{ name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }, + { name: "size:number", default: 25 }, { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_1__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("text", function (name) { return new QuestionTextModel(name); }); + + +/***/ }), +/* 44 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(24); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindowModel; }); + + + +var SurveyWindowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindowModel, _super); + function SurveyWindowModel(jsonObj) { + var _this = _super.call(this) || this; + _this.surveyValue = _this.createSurvey(jsonObj); + _this.surveyValue.showTitle = false; + _this.windowElement = document.createElement("div"); + return _this; + } + SurveyWindowModel.prototype.getType = function () { return "window"; }; + Object.defineProperty(SurveyWindowModel.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isShowing", { + get: function () { return this.isShowingValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isExpanded", { + get: function () { return this.isExpandedValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "title", { + get: function () { return this.titleValue ? this.titleValue : this.survey.title; }, + set: function (value) { this.titleValue = value; }, + enumerable: true, + configurable: true + }); + SurveyWindowModel.prototype.expand = function () { + this.expandcollapse(true); + }; + SurveyWindowModel.prototype.collapse = function () { + this.expandcollapse(false); + }; + SurveyWindowModel.prototype.createSurvey = function (jsonObj) { + return new __WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */](jsonObj); + }; + SurveyWindowModel.prototype.expandcollapse = function (value) { + this.isExpandedValue = value; + }; + return SurveyWindowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +SurveyWindowModel.surveyElementName = "windowSurveyJS"; + + +/***/ }), +/* 45 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(16); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultBootstrapCss; }); + +var defaultBootstrapCss = { + root: "", + header: "panel-heading", + body: "panel-body", + footer: "panel-footer", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "progress center-block", progressBar: "progress-bar", + pageTitle: "", + row: "", + question: { root: "", title: "", comment: "form-control", indent: 20 }, + error: { root: "alert alert-danger", icon: "glyphicon glyphicon-exclamation-sign", item: "" }, + checkbox: { root: "form-inline", item: "checkbox", other: "" }, + comment: "form-control", + dropdown: { root: "", control: "form-control" }, + matrix: { root: "table" }, + matrixdropdown: { root: "table" }, + matrixdynamic: { root: "table", button: "button" }, + multipletext: { root: "table", itemTitle: "", itemValue: "form-control" }, + radiogroup: { root: "form-inline", item: "radio", label: "", other: "" }, + rating: { root: "btn-group", item: "btn btn-default" }, + text: "form-control", + window: { + root: "modal-content", body: "modal-body", + header: { + root: "modal-header panel-title", title: "pull-left", button: "glyphicon pull-right", + buttonExpanded: "glyphicon pull-right glyphicon-chevron-up", buttonCollapsed: "glyphicon pull-right glyphicon-chevron-down" + } + } +}; +__WEBPACK_IMPORTED_MODULE_0__cssstandard__["b" /* surveyCss */]["bootstrap"] = defaultBootstrapCss; + + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_czech__ = __webpack_require__(83); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localization_danish__ = __webpack_require__(84); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localization_dutch__ = __webpack_require__(85); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__localization_finnish__ = __webpack_require__(86); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_french__ = __webpack_require__(87); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localization_german__ = __webpack_require__(88); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localization_greek__ = __webpack_require__(89); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localization_polish__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localization_romanian__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localization_russian__ = __webpack_require__(92); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localization_swedish__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localization_turkish__ = __webpack_require__(94); + + + + + + + + + + + + + + +/***/ }), +/* 47 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__validator__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(4); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(10); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(5); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__ = __webpack_require__(18); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditions__ = __webpack_require__(15); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__conditionsParser__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_7__conditionsParser__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__ = __webpack_require__(19); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__error__ = __webpack_require__(8); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__jsonobject__ = __webpack_require__(1); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["i"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["j"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__ = __webpack_require__(38); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__ = __webpack_require__(39); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__question_matrix__ = __webpack_require__(37); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__question_multipletext__ = __webpack_require__(40); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__panel__ = __webpack_require__(21); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__page__ = __webpack_require__(20); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_17__page__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__question__ = __webpack_require__(9); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_18__question__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__questionbase__ = __webpack_require__(23); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_19__questionbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__question_baseselect__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__question_checkbox__ = __webpack_require__(32); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_21__question_checkbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__question_comment__ = __webpack_require__(33); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_22__question_comment__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__question_dropdown__ = __webpack_require__(34); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_23__question_dropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__questionfactory__ = __webpack_require__(2); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__question_file__ = __webpack_require__(35); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_25__question_file__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__question_html__ = __webpack_require__(36); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_26__question_html__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__ = __webpack_require__(41); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__question_rating__ = __webpack_require__(42); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_28__question_rating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__question_text__ = __webpack_require__(43); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_29__question_text__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__survey__ = __webpack_require__(24); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_30__survey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__trigger__ = __webpack_require__(95); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__surveyWindow__ = __webpack_require__(44); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__ = __webpack_require__(25); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__ = __webpack_require__(31); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__surveyStrings__ = __webpack_require__(3); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__ = __webpack_require__(22); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_23", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["a"]; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Version; }); +// styles + +var Version; +Version = "" + "0.12.8"; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//Uncomment to include the "date" question type. +//export {default as QuestionDateModel} from "../../plugins/question_date"; + + +/***/ }), +/* 48 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__surveyWindow__ = __webpack_require__(44); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__kosurvey__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindow; }); + + + + +var koTemplate = __webpack_require__(82); +var SurveyWindow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindow, _super); + function SurveyWindow(jsonObj) { + var _this = _super.call(this, jsonObj) || this; + _this.koExpanded = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); + _this.koExpandedCss = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.getButtonCss()); + var self = _this; + _this.doExpand = function () { self.changeExpanded(); }; + _this.survey.onComplete.add(function (sender) { self.onComplete(); self.koExpandedCss(self.getButtonCss()); }); + return _this; + } + SurveyWindow.prototype.createSurvey = function (jsonObj) { + return new __WEBPACK_IMPORTED_MODULE_3__kosurvey__["a" /* Survey */](jsonObj); + }; + SurveyWindow.prototype.expandcollapse = function (value) { + _super.prototype.expandcollapse.call(this, value); + this.koExpanded(this.isExpandedValue); + }; + Object.defineProperty(SurveyWindow.prototype, "template", { + get: function () { return this.templateValue ? this.templateValue : this.getDefaultTemplate(); }, + set: function (value) { this.templateValue = value; }, + enumerable: true, + configurable: true + }); + SurveyWindow.prototype.show = function () { + this.windowElement.innerHTML = this.template; + __WEBPACK_IMPORTED_MODULE_1_knockout__["cleanNode"](this.windowElement); + __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"](this, this.windowElement); + document.body.appendChild(this.windowElement); + this.survey.render(SurveyWindow.surveyElementName); + this.isShowingValue = true; + }; + SurveyWindow.prototype.getDefaultTemplate = function () { return koTemplate; }; + SurveyWindow.prototype.hide = function () { + document.body.removeChild(this.windowElement); + this.windowElement.innerHTML = ""; + this.isShowingValue = false; + }; + Object.defineProperty(SurveyWindow.prototype, "css", { + get: function () { return this.survey["css"]; }, + enumerable: true, + configurable: true + }); + SurveyWindow.prototype.changeExpanded = function () { + this.expandcollapse(!this.isExpanded); + }; + SurveyWindow.prototype.onComplete = function () { + this.hide(); + }; + SurveyWindow.prototype.getButtonCss = function () { + return this.koExpanded() ? this.css.window.header.buttonCollapsed : this.css.window.header.buttonExpanded; + }; + return SurveyWindow; +}(__WEBPACK_IMPORTED_MODULE_2__surveyWindow__["a" /* SurveyWindowModel */])); + + + +/***/ }), +/* 49 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__koquestion_baseselect__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__question_checkbox__ = __webpack_require__(32); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckbox; }); + + + + + + +var QuestionCheckboxImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxImplementor, _super); + function QuestionCheckboxImplementor(question) { + return _super.call(this, question) || this; + } + QuestionCheckboxImplementor.prototype.createkoValue = function () { + return this.question.value ? __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](this.question.value) : __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + }; + QuestionCheckboxImplementor.prototype.setkoValue = function (newValue) { + if (newValue) { + this.koValue([].concat(newValue)); + } + else { + this.koValue([]); + } + }; + return QuestionCheckboxImplementor; +}(__WEBPACK_IMPORTED_MODULE_2__koquestion_baseselect__["b" /* QuestionCheckboxBaseImplementor */])); +var QuestionCheckbox = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckbox, _super); + function QuestionCheckbox(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new QuestionCheckboxImplementor(_this); + return _this; + } + return QuestionCheckbox; +}(__WEBPACK_IMPORTED_MODULE_5__question_checkbox__["a" /* QuestionCheckboxModel */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("checkbox", function () { return new QuestionCheckbox(""); }); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("checkbox", function (name) { var q = new QuestionCheckbox(name); q.choices = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 50 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_comment__ = __webpack_require__(33); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__koquestion__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionComment; }); + + + + + +var QuestionComment = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionComment, _super); + function QuestionComment(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new __WEBPACK_IMPORTED_MODULE_4__koquestion__["a" /* QuestionImplementor */](_this); + return _this; + } + return QuestionComment; +}(__WEBPACK_IMPORTED_MODULE_3__question_comment__["a" /* QuestionCommentModel */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("comment", function () { return new QuestionComment(""); }); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("comment", function (name) { return new QuestionComment(name); }); + + +/***/ }), +/* 51 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_dropdown__ = __webpack_require__(34); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__koquestion_baseselect__ = __webpack_require__(11); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionDropdown; }); + + + + + +var QuestionDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionDropdown, _super); + function QuestionDropdown(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new __WEBPACK_IMPORTED_MODULE_4__koquestion_baseselect__["a" /* QuestionSelectBaseImplementor */](_this); + return _this; + } + return QuestionDropdown; +}(__WEBPACK_IMPORTED_MODULE_1__question_dropdown__["a" /* QuestionDropdownModel */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("dropdown", function () { return new QuestionDropdown(""); }); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("dropdown", function (name) { var q = new QuestionDropdown(name); q.choices = __WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 52 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__question_file__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__koquestion__ = __webpack_require__(7); +/* unused harmony export QuestionFileImplementor */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFile; }); + + + + + + +var QuestionFileImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFileImplementor, _super); + function QuestionFileImplementor(question) { + var _this = _super.call(this, question) || this; + var self = _this; + _this.koDataUpdater = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](0); + _this.koData = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.koDataUpdater(); return self.question.previewValue; }); + _this.koHasValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); + _this.question["koData"] = _this.koData; + _this.question["koHasValue"] = _this.koHasValue; + _this.question.previewValueLoadedCallback = function () { self.onLoadPreview(); }; + _this.question["dochange"] = function (data, event) { var src = event.target || event.srcElement; self.onChange(src); }; + return _this; + } + QuestionFileImplementor.prototype.onChange = function (src) { + if (!window["FileReader"]) + return; + if (!src || !src.files || src.files.length < 1) + return; + this.question.loadFile(src.files[0]); + }; + QuestionFileImplementor.prototype.onLoadPreview = function () { + this.koDataUpdater(this.koDataUpdater() + 1); + this.koHasValue(true); + }; + return QuestionFileImplementor; +}(__WEBPACK_IMPORTED_MODULE_5__koquestion__["a" /* QuestionImplementor */])); + +var QuestionFile = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFile, _super); + function QuestionFile(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new QuestionFileImplementor(_this); + return _this; + } + return QuestionFile; +}(__WEBPACK_IMPORTED_MODULE_4__question_file__["a" /* QuestionFileModel */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("file", function () { return new QuestionFile(""); }); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("file", function (name) { return new QuestionFile(name); }); + + +/***/ }), +/* 53 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__koquestionbase__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__question_html__ = __webpack_require__(36); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionHtml; }); + + + + + +var QuestionHtml = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionHtml, _super); + function QuestionHtml(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new __WEBPACK_IMPORTED_MODULE_3__koquestionbase__["a" /* QuestionImplementorBase */](_this); + return _this; + } + return QuestionHtml; +}(__WEBPACK_IMPORTED_MODULE_4__question_html__["a" /* QuestionHtmlModel */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("html", function () { return new QuestionHtml(""); }); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("html", function (name) { return new QuestionHtml(name); }); + + +/***/ }), +/* 54 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question_matrix__ = __webpack_require__(37); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__koquestion__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixRow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrix; }); + + + + + + +var MatrixRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixRow, _super); + function MatrixRow(name, text, fullName, data, value) { + var _this = _super.call(this, name, text, fullName, data, value) || this; + _this.name = name; + _this.text = text; + _this.fullName = fullName; + _this.isValueUpdating = false; + _this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.value); + var self = _this; + _this.koValue.subscribe(function (newValue) { + if (self.isValueUpdating) + true; + self.value = newValue; + }); + return _this; + } + MatrixRow.prototype.onValueChanged = function () { + this.isValueUpdating = true; + this.koValue(this.value); + this.isValueUpdating = false; + }; + return MatrixRow; +}(__WEBPACK_IMPORTED_MODULE_2__question_matrix__["a" /* MatrixRowModel */])); + +var QuestionMatrix = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrix, _super); + function QuestionMatrix(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new __WEBPACK_IMPORTED_MODULE_3__koquestion__["a" /* QuestionImplementor */](_this); + return _this; + } + QuestionMatrix.prototype.createMatrixRow = function (name, text, fullName, value) { + return new MatrixRow(name, text, fullName, this, value); + }; + return QuestionMatrix; +}(__WEBPACK_IMPORTED_MODULE_2__question_matrix__["b" /* QuestionMatrixModel */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("matrix", function () { return new QuestionMatrix(""); }); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrix", function (name) { var q = new QuestionMatrix(name); q.rows = __WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].DefaultRows; q.columns = __WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].DefaultColums; return q; }); + + +/***/ }), +/* 55 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdown__ = __webpack_require__(38); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question_matrixdropdownbase__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__koquestion__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionMatrixDropdown; }); + + + + + + +var QuestionMatrixDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdown, _super); + function QuestionMatrixDropdown(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new __WEBPACK_IMPORTED_MODULE_5__koquestion__["a" /* QuestionImplementor */](_this); + return _this; + } + return QuestionMatrixDropdown; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdown__["a" /* QuestionMatrixDropdownModel */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("matrixdropdown", function () { return new QuestionMatrixDropdown(""); }); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdropdown", function (name) { var q = new QuestionMatrixDropdown(name); q.choices = [1, 2, 3, 4, 5]; q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultRows; __WEBPACK_IMPORTED_MODULE_2__question_matrixdropdownbase__["a" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__koquestion__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__question_matrixdynamic__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__question_matrixdropdownbase__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionMatrixDynamicImplementor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDynamic; }); + + + + + + + +var QuestionMatrixDynamicImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamicImplementor, _super); + function QuestionMatrixDynamicImplementor(question) { + var _this = _super.call(this, question) || this; + _this.koRecalc = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](0); + _this.koRows = __WEBPACK_IMPORTED_MODULE_1_knockout__["pureComputed"](function () { + this.koRecalc(); + return this.question.visibleRows; + }, _this); + _this.koOverflowX = __WEBPACK_IMPORTED_MODULE_1_knockout__["pureComputed"](function () { + return this.question.horizontalScroll ? "scroll" : "none"; + }, _this); + _this.question["koRows"] = _this.koRows; + var self = _this; + _this.koAddRowClick = function () { self.addRow(); }; + _this.koRemoveRowClick = function (data) { self.removeRow(data); }; + _this.question["koAddRowClick"] = _this.koAddRowClick; + _this.question["koRemoveRowClick"] = _this.koRemoveRowClick; + _this.question["koOverflowX"] = _this.koOverflowX; + _this.question.rowCountChangedCallback = function () { self.onRowCountChanged(); }; + _this.question.columnsChangedCallback = function () { self.onColumnChanged(); }; + _this.question.updateCellsCallbak = function () { self.onUpdateCells(); }; + return _this; + } + QuestionMatrixDynamicImplementor.prototype.onUpdateCells = function () { + //Genereate rows again. + var rows = this.question["generatedVisibleRows"]; + var columns = this.question.columns; + if (rows && rows.length > 0 && columns && columns.length > 0) + this.onColumnChanged(); + }; + QuestionMatrixDynamicImplementor.prototype.onColumnChanged = function () { + var rows = this.question.visibleRows; + this.onRowCountChanged(); + }; + QuestionMatrixDynamicImplementor.prototype.onRowCountChanged = function () { + this.koRecalc(this.koRecalc() + 1); + }; + QuestionMatrixDynamicImplementor.prototype.addRow = function () { + this.question.addRow(); + }; + QuestionMatrixDynamicImplementor.prototype.removeRow = function (row) { + var rows = this.question.cachedVisibleRows; + var index = rows.indexOf(row); + if (index > -1) { + this.question.removeRow(index); + } + }; + return QuestionMatrixDynamicImplementor; +}(__WEBPACK_IMPORTED_MODULE_4__koquestion__["a" /* QuestionImplementor */])); + +var QuestionMatrixDynamic = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamic, _super); + function QuestionMatrixDynamic(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new QuestionMatrixDynamicImplementor(_this); + return _this; + } + return QuestionMatrixDynamic; +}(__WEBPACK_IMPORTED_MODULE_5__question_matrixdynamic__["a" /* QuestionMatrixDynamicModel */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("matrixdynamic", function () { return new QuestionMatrixDynamic(""); }); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdynamic", function (name) { var q = new QuestionMatrixDynamic(name); q.choices = [1, 2, 3, 4, 5]; q.rowCount = 2; __WEBPACK_IMPORTED_MODULE_6__question_matrixdropdownbase__["a" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question_multipletext__ = __webpack_require__(40); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__koquestion__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MultipleTextItem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMultipleTextImplementor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return QuestionMultipleText; }); + + + + + + +var MultipleTextItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleTextItem, _super); + function MultipleTextItem(name, title) { + if (name === void 0) { name = null; } + if (title === void 0) { title = null; } + var _this = _super.call(this, name, title) || this; + _this.name = name; + _this.isKOValueUpdating = false; + _this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.value); + var self = _this; + _this.koValue.subscribe(function (newValue) { + if (!self.isKOValueUpdating) { + self.value = newValue; + } + }); + return _this; + } + MultipleTextItem.prototype.onValueChanged = function (newValue) { + this.isKOValueUpdating = true; + this.koValue(newValue); + this.isKOValueUpdating = false; + }; + return MultipleTextItem; +}(__WEBPACK_IMPORTED_MODULE_2__question_multipletext__["a" /* MultipleTextItemModel */])); + +var QuestionMultipleTextImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleTextImplementor, _super); + function QuestionMultipleTextImplementor(question) { + var _this = _super.call(this, question) || this; + _this.koRows = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.question.getRows()); + _this.question["koRows"] = _this.koRows; + _this.onColCountChanged(); + var self = _this; + _this.question.colCountChangedCallback = function () { self.onColCountChanged(); }; + return _this; + } + QuestionMultipleTextImplementor.prototype.onColCountChanged = function () { + this.koRows(this.question.getRows()); + }; + return QuestionMultipleTextImplementor; +}(__WEBPACK_IMPORTED_MODULE_3__koquestion__["a" /* QuestionImplementor */])); + +var QuestionMultipleText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleText, _super); + function QuestionMultipleText(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new QuestionMultipleTextImplementor(_this); + return _this; + } + QuestionMultipleText.prototype.createTextItem = function (name, title) { + return new MultipleTextItem(name, title); + }; + return QuestionMultipleText; +}(__WEBPACK_IMPORTED_MODULE_2__question_multipletext__["b" /* QuestionMultipleTextModel */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("multipletextitem", function () { return new MultipleTextItem(""); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("multipletext", function () { return new QuestionMultipleText(""); }); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("multipletext", function (name) { var q = new QuestionMultipleText(name); q.addItem("text1"); q.addItem("text2"); return q; }); + + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_radiogroup__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__koquestion_baseselect__ = __webpack_require__(11); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRadiogroup; }); + + + + + +var QuestionRadiogroup = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRadiogroup, _super); + function QuestionRadiogroup(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new __WEBPACK_IMPORTED_MODULE_4__koquestion_baseselect__["b" /* QuestionCheckboxBaseImplementor */](_this); + return _this; + } + return QuestionRadiogroup; +}(__WEBPACK_IMPORTED_MODULE_1__question_radiogroup__["a" /* QuestionRadiogroupModel */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("radiogroup", function () { return new QuestionRadiogroup(""); }); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("radiogroup", function (name) { var q = new QuestionRadiogroup(name); q.choices = __WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__koquestion__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_rating__ = __webpack_require__(42); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRating; }); + + + + + + +var QuestionRatingImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRatingImplementor, _super); + function QuestionRatingImplementor(question) { + var _this = _super.call(this, question) || this; + _this.koVisibleRateValues = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.getValues()); + _this.question["koVisibleRateValues"] = _this.koVisibleRateValues; + var self = _this; + _this.koChange = function (val) { self.koValue(val.itemValue); }; + _this.question["koChange"] = _this.koChange; + _this.question.rateValuesChangedCallback = function () { self.onRateValuesChanged(); }; + _this.question["koGetCss"] = function (val) { + var css = self.question.itemCss; + return self.question["koValue"]() == val.value ? css + " active" : css; + }; + return _this; + } + QuestionRatingImplementor.prototype.onRateValuesChanged = function () { + this.koVisibleRateValues(this.getValues()); + }; + QuestionRatingImplementor.prototype.getValues = function () { return this.question.visibleRateValues; }; + return QuestionRatingImplementor; +}(__WEBPACK_IMPORTED_MODULE_2__koquestion__["a" /* QuestionImplementor */])); +var QuestionRating = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRating, _super); + function QuestionRating(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new QuestionRatingImplementor(_this); + return _this; + } + QuestionRating.prototype.onSetData = function () { + this.itemCss = this.data["css"].rating.item; + }; + return QuestionRating; +}(__WEBPACK_IMPORTED_MODULE_3__question_rating__["a" /* QuestionRatingModel */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("rating", function () { return new QuestionRating(""); }); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("rating", function (name) { return new QuestionRating(name); }); + + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_text__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__koquestion__ = __webpack_require__(7); +/* unused harmony export QuestionTextImplementor */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionText; }); + + + + + +var QuestionTextImplementor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionTextImplementor, _super); + function QuestionTextImplementor(question) { + var _this = _super.call(this, question) || this; + _this.question = question; + return _this; + } + QuestionTextImplementor.prototype.updateValue = function (newValue) { + _super.prototype.updateValue.call(this, newValue); + if (newValue !== this.question.value) { + this.koValue(this.question.value); + } + }; + return QuestionTextImplementor; +}(__WEBPACK_IMPORTED_MODULE_4__koquestion__["a" /* QuestionImplementor */])); + +var QuestionText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionText, _super); + function QuestionText(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + new QuestionTextImplementor(_this); + return _this; + } + return QuestionText; +}(__WEBPACK_IMPORTED_MODULE_1__question_text__["a" /* QuestionTextModel */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.overrideClassCreatore("text", function () { return new QuestionText(""); }); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("text", function (name) { return new QuestionText(name); }); + + +/***/ }), +/* 61 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 62 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n"; + +/***/ }), +/* 63 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 64 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 65 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 67 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 68 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 69 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 70 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 71 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 72 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 73 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 74 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 75 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 76 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 77 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 78 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 80 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = "" + __webpack_require__(62) + "\n" + __webpack_require__(61) + "\n" + __webpack_require__(63) + "\n" + __webpack_require__(64) + "\n" + __webpack_require__(80) + "\n" + __webpack_require__(65) + "\n" + __webpack_require__(79) + "\n" + __webpack_require__(66) + "\n" + __webpack_require__(67) + "\n" + __webpack_require__(68) + "\n" + __webpack_require__(69) + "\n" + __webpack_require__(70) + "\n" + __webpack_require__(71) + "\n" + __webpack_require__(72) + "\n" + __webpack_require__(73) + "\n" + __webpack_require__(74) + "\n" + __webpack_require__(75) + "\n" + __webpack_require__(76) + "\n" + __webpack_require__(77) + "\n" + __webpack_require__(78) + ""; + +/***/ }), +/* 82 */ +/***/ (function(module, exports) { + +module.exports = "
\n
\n \n \n \n \n
\n
\n
\n
\n
"; + +/***/ }), +/* 83 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export czechSurveyStrings */ + +var czechSurveyStrings = { + pagePrevText: "Předchozí", + pageNextText: "Další", + completeText: "Hotovo", + otherItemText: "Jiná odpověď (napište)", + progressText: "Strana {0} z {1}", + emptySurvey: "Průzkumu neobsahuje žádné otázky.", + completingSurvey: "Děkujeme za vyplnění průzkumu!", + loadingSurvey: "Probíhá načítání průzkumu...", + optionsCaption: "Vyber...", + requiredError: "Odpovězte prosím na otázku.", + requiredInAllRowsError: "Odpovězte prosím na všechny otázky.", + numericError: "V tomto poli lze zadat pouze čísla.", + textMinLength: "Zadejte prosím alespoň {0} znaků.", + textMaxLength: "Zadejte prosím méně než {0} znaků.", + textMinMaxLength: "Zadejte prosím více než {0} a méně než {1} znaků.", + minRowCountError: "Vyplňte prosím alespoň {0} řádků.", + minSelectError: "Vyberte prosím alespoň {0} varianty.", + maxSelectError: "Nevybírejte prosím více než {0} variant.", + numericMinMax: "Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}", + numericMin: "Odpověď '{0}' by mělo být větší nebo rovno {1}", + numericMax: "Odpověď '{0}' by mělo být menší nebo rovno {1}", + invalidEmail: "Zadejte prosím platnou e-mailovou adresu.", + urlRequestError: "Požadavek vrátil chybu '{0}'. {1}", + urlGetChoicesError: "Požadavek nevrátil data nebo cesta je neplatná", + exceedMaxSize: "Velikost souboru by neměla být větší než {0}.", + otherRequiredError: "Zadejte prosím jinou hodnotu.", + uploadingFile: "Váš soubor se nahrává. Zkuste to prosím za několik sekund.", + addRow: "Přidat řádek", + removeRow: "Odstranit" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["cz"] = czechSurveyStrings; + + +/***/ }), +/* 84 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export danishSurveyStrings */ + +var danishSurveyStrings = { + pagePrevText: "Tilbage", + pageNextText: "Videre", + completeText: "Færdig", + progressText: "Side {0} af {1}", + emptySurvey: "Der er ingen synlige spørgsmål.", + completingSurvey: "Mange tak for din besvarelse!", + loadingSurvey: "Spørgeskemaet hentes fra serveren...", + otherItemText: "Valgfrit svar...", + optionsCaption: "Vælg...", + requiredError: "Besvar venligst spørgsmålet.", + numericError: "Angiv et tal.", + textMinLength: "Angiv mindst {0} tegn.", + minSelectError: "Vælg venligst mindst {0} svarmulighed(er).", + maxSelectError: "Vælg venligst færre {0} svarmuligheder(er).", + numericMinMax: "'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}", + numericMin: "'{0}' skal være lig med eller større end {1}", + numericMax: "'{0}' skal være lig med eller mindre end {1}", + invalidEmail: "Angiv venligst en gyldig e-mail adresse.", + exceedMaxSize: "Filstørrelsen må ikke overstige {0}.", + otherRequiredError: "Angiv en værdi for dit valgfrie svar." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["da"] = danishSurveyStrings; + + +/***/ }), +/* 85 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export dutchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var dutchSurveyStrings = { + pagePrevText: "Vorige", + pageNextText: "Volgende", + completeText: "Afsluiten", + otherItemText: "Andere", + progressText: "Pagina {0} van {1}", + emptySurvey: "Er is geen zichtbare pagina of vraag in deze vragenlijst", + completingSurvey: "Bedankt om deze vragenlijst in te vullen", + loadingSurvey: "De vragenlijst is aan het laden...", + optionsCaption: "Kies...", + requiredError: "Gelieve een antwoord in te vullen", + numericError: "Het antwoord moet een getal zijn", + textMinLength: "Gelieve minsten {0} karakters in te vullen.", + minSelectError: "Gelieve minimum {0} antwoorden te selecteren.", + maxSelectError: "Gelieve niet meer dan {0} antwoorden te selecteren.", + numericMinMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}", + numericMin: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + numericMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + invalidEmail: "Gelieve een geldig e-mailadres in te vullen.", + exceedMaxSize: "De grootte van het bestand mag niet groter zijn dan {0}.", + otherRequiredError: "Gelieve het veld 'Andere' in te vullen" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["nl"] = dutchSurveyStrings; + + +/***/ }), +/* 86 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export finnishSurveyStrings */ + +var finnishSurveyStrings = { + pagePrevText: "Edellinen", + pageNextText: "Seuraava", + completeText: "Valmis", + otherItemText: "Muu (kuvaile)", + progressText: "Sivu {0}/{1}", + emptySurvey: "Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.", + completingSurvey: "Kiitos kyselyyn vastaamisesta!", + loadingSurvey: "Kyselyä ladataan palvelimelta...", + optionsCaption: "Valitse...", + requiredError: "Vastaa kysymykseen, kiitos.", + numericError: "Arvon tulee olla numeerinen.", + textMinLength: "Ole hyvä ja syötä vähintään {0} merkkiä.", + minSelectError: "Ole hyvä ja valitse vähintään {0} vaihtoehtoa.", + maxSelectError: "Ole hyvä ja valitse enintään {0} vaihtoehtoa.", + numericMinMax: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}", + numericMin: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}", + numericMax: "'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}", + invalidEmail: "Syötä validi sähköpostiosoite.", + otherRequiredError: "Ole hyvä ja syötä \"Muu (kuvaile)\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fi"] = finnishSurveyStrings; + + +/***/ }), +/* 87 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export frenchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var frenchSurveyStrings = { + pagePrevText: "Pr\u00e9c\u00e9dent", + pageNextText: "Suivant", + completeText: "Terminer", + otherItemText: "Autre (pr\u00e9ciser)", + progressText: "Page {0} sur {1}", + emptySurvey: "Il n'y a ni page visible ni question visible dans ce questionnaire", + completingSurvey: "Merci d'avoir r\u00e9pondu au questionnaire!", + loadingSurvey: "Le questionnaire est en cours de chargement...", + optionsCaption: "Choisissez...", + requiredError: "La r\u00e9ponse \u00e0 cette question est obligatoire.", + requiredInAllRowsError: "Toutes les lignes sont obligatoires", + numericError: "La r\u00e9ponse doit \u00eatre un nombre.", + textMinLength: "Merci d'entrer au moins {0} symboles.", + minSelectError: "Merci de s\u00e9lectionner au moins {0}r\u00e9ponses.", + maxSelectError: "Merci de s\u00e9lectionner au plus {0}r\u00e9ponses.", + numericMinMax: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1} et inf\u00e9rieure ou\u00e9gale \u00e0 {2}", + numericMin: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1}", + numericMax: "Votre r\u00e9ponse '{0}' doit \u00eatreinf\u00e9rieure ou \u00e9gale \u00e0 {1}", + invalidEmail: "Merci d'entrer une adresse mail valide.", + exceedMaxSize: "La taille du fichier ne doit pas exc\u00e9der {0}.", + otherRequiredError: "Merci de pr\u00e9ciser le champ 'Autre'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fr"] = frenchSurveyStrings; + + +/***/ }), +/* 88 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export germanSurveyStrings */ + +var germanSurveyStrings = { + pagePrevText: "Zurück", + pageNextText: "Weiter", + completeText: "Fertig", + progressText: "Seite {0} von {1}", + emptySurvey: "Es gibt keine sichtbare Frage.", + completingSurvey: "Vielen Dank für das Ausfüllen des Fragebogens!", + loadingSurvey: "Der Fragebogen wird vom Server geladen...", + otherItemText: "Benutzerdefinierte Antwort...", + optionsCaption: "Wählen...", + requiredError: "Bitte antworten Sie auf die Frage.", + numericError: "Der Wert sollte eine Zahl sein.", + textMinLength: "Bitte geben Sie mindestens {0} Symbole.", + minSelectError: "Bitte wählen Sie mindestens {0} Varianten.", + maxSelectError: "Bitte wählen Sie nicht mehr als {0} Varianten.", + numericMinMax: "'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}", + numericMin: "'{0}' sollte gleich oder größer sein als {1}", + numericMax: "'{0}' sollte gleich oder kleiner als {1}", + invalidEmail: "Bitte geben Sie eine gültige Email-Adresse ein.", + exceedMaxSize: "Die Dateigröße soll nicht mehr als {0}.", + otherRequiredError: "Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["de"] = germanSurveyStrings; + + +/***/ }), +/* 89 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export greekSurveyStrings */ +//Created by https://github.com/agelospanagiotakis + +var greekSurveyStrings = { + pagePrevText: "Προηγούμενο", + pageNextText: "Επόμενο", + completeText: "Ολοκλήρωση", + otherItemText: "Άλλο (παρακαλώ διευκρινίστε)", + progressText: "Σελίδα {0} από {1}", + emptySurvey: "Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.", + completingSurvey: "Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!", + loadingSurvey: "Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...", + optionsCaption: "Επιλέξτε...", + requiredError: "Παρακαλώ απαντήστε στην ερώτηση.", + requiredInAllRowsError: "Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.", + numericError: "Η τιμή πρέπει να είναι αριθμιτική.", + textMinLength: "Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.", + minRowCountError: "Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.", + minSelectError: "Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.", + maxSelectError: "Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.", + numericMinMax: "Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}", + numericMin: "Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}", + numericMax: "Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}", + invalidEmail: "Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.", + urlRequestError: "Η αίτηση επέστρεψε σφάλμα '{0}'. {1}", + urlGetChoicesError: "Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη", + exceedMaxSize: "Το μέγεθος δεν μπορεί να υπερβένει τα {0}.", + otherRequiredError: "Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.", + uploadingFile: "Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.", + addRow: "Προσθήκη γραμμής", + removeRow: "Αφαίρεση" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["gr"] = greekSurveyStrings; + + +/***/ }), +/* 90 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export polishSurveyStrings */ + +var polishSurveyStrings = { + pagePrevText: "Wstecz", + pageNextText: "Dalej", + completeText: "Gotowe", + otherItemText: "Inna odpowiedź (wpisz)", + progressText: "Strona {0} z {1}", + emptySurvey: "Nie ma widocznych pytań.", + completingSurvey: "Dziękujemy za wypełnienie ankiety!", + loadingSurvey: "Trwa wczytywanie ankiety...", + optionsCaption: "Wybierz...", + requiredError: "Proszę odpowiedzieć na to pytanie.", + requiredInAllRowsError: "Proszę odpowiedzieć na wszystkie pytania.", + numericError: "W tym polu można wpisać tylko liczby.", + textMinLength: "Proszę wpisać co najmniej {0} znaków.", + textMaxLength: "Proszę wpisać mniej niż {0} znaków.", + textMinMaxLength: "Proszę wpisać więcej niż {0} i mniej niż {1} znaków.", + minRowCountError: "Proszę uzupełnić przynajmniej {0} wierszy.", + minSelectError: "Proszę wybrać co najmniej {0} pozycji.", + maxSelectError: "Proszę wybrać nie więcej niż {0} pozycji.", + numericMinMax: "Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}", + numericMin: "Odpowiedź '{0}' powinna być większa lub równa {1}", + numericMax: "Odpowiedź '{0}' powinna być mniejsza lub równa {1}", + invalidEmail: "Proszę podać prawidłowy adres email.", + urlRequestError: "Żądanie zwróciło błąd '{0}'. {1}", + urlGetChoicesError: "Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa", + exceedMaxSize: "Rozmiar przesłanego pliku nie może przekraczać {0}.", + otherRequiredError: "Proszę podać inną odpowiedź.", + uploadingFile: "Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.", + addRow: "Dodaj wiersz", + removeRow: "Usuń" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["pl"] = polishSurveyStrings; + + +/***/ }), +/* 91 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export romanianSurveyStrings */ + +var romanianSurveyStrings = { + pagePrevText: "Precedent", + pageNextText: "Următor", + completeText: "Finalizare", + otherItemText: "Altul(precizaţi)", + progressText: "Pagina {0} din {1}", + emptySurvey: "Nu sunt întrebări pentru acest chestionar", + completingSurvey: "Vă mulţumim pentru timpul acordat!", + loadingSurvey: "Chestionarul se încarcă...", + optionsCaption: "Alegeţi...", + requiredError: "Răspunsul la această întrebare este obligatoriu.", + requiredInAllRowsError: "Toate răspunsurile sunt obligatorii", + numericError: "Răspunsul trebuie să fie numeric.", + textMinLength: "Trebuie să introduci minim {0} caractere.", + minSelectError: "Trebuie să selectezi minim {0} opţiuni.", + maxSelectError: "Trebuie să selectezi maxim {0} opţiuni.", + numericMinMax: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}", + numericMin: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}", + numericMax: "Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}", + invalidEmail: "Trebuie să introduceţi o adresa de email validă.", + exceedMaxSize: "Dimensiunea fişierului nu trebuie să depăşească {0}.", + otherRequiredError: "Trebuie să completezi câmpul 'Altul'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ro"] = romanianSurveyStrings; + + +/***/ }), +/* 92 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export russianSurveyStrings */ + +var russianSurveyStrings = { + pagePrevText: "Назад", + pageNextText: "Далее", + completeText: "Готово", + progressText: "Страница {0} из {1}", + emptySurvey: "Нет ни одного вопроса.", + completingSurvey: "Благодарим Вас за заполнение анкеты!", + loadingSurvey: "Загрузка с сервера...", + otherItemText: "Другое (пожалуйста, опишите)", + optionsCaption: "Выбрать...", + requiredError: "Пожалуйста, ответьте на вопрос.", + numericError: "Ответ должен быть числом.", + textMinLength: "Пожалуйста, введите хотя бы {0} символов.", + minSelectError: "Пожалуйста, выберите хотя бы {0} вариантов.", + maxSelectError: "Пожалуйста, выберите не более {0} вариантов.", + numericMinMax: "'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}", + numericMin: "'{0}' должно быть равным или больше, чем {1}", + numericMax: "'{0}' должно быть равным или меньше, чем {1}", + invalidEmail: "Пожалуйста, введите действительный адрес электронной почты.", + otherRequiredError: "Пожалуйста, введите данные в поле \"Другое\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ru"] = russianSurveyStrings; + + +/***/ }), +/* 93 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export swedishSurveyStrings */ +//Create by Mattias Asplund + +var swedishSurveyStrings = { + pagePrevText: "Föregående", + pageNextText: "Nästa", + completeText: "Färdig", + otherItemText: "Annat (beskriv)", + progressText: "Sida {0} av {1}", + emptySurvey: "Det finns ingen synlig sida eller fråga i enkäten.", + completingSurvey: "Tack för att du genomfört enkäten!!", + loadingSurvey: "Enkäten laddas...", + optionsCaption: "Välj...", + requiredError: "Var vänlig besvara frågan.", + requiredInAllRowsError: "Var vänlig besvara frågorna på alla rader.", + numericError: "Värdet ska vara numeriskt.", + textMinLength: "Var vänlig ange minst {0} tecken.", + minRowCountError: "Var vänlig fyll i minst {0} rader.", + minSelectError: "Var vänlig välj åtminstone {0} varianter.", + maxSelectError: "Var vänlig välj inte fler än {0} varianter.", + numericMinMax: "'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}", + numericMin: "'{0}' ska vara lika med eller mer än {1}", + numericMax: "'{0}' ska vara lika med eller mindre än {1}", + invalidEmail: "Var vänlig ange en korrekt e-postadress.", + urlRequestError: "Förfrågan returnerade felet '{0}'. {1}", + urlGetChoicesError: "Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt", + exceedMaxSize: "Filstorleken får ej överstiga {0}.", + otherRequiredError: "Var vänlig ange det andra värdet.", + uploadingFile: "Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.", + addRow: "Lägg till rad", + removeRow: "Ta bort" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["sv"] = swedishSurveyStrings; + + +/***/ }), +/* 94 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(3); +/* unused harmony export turkishSurveyStrings */ + +var turkishSurveyStrings = { + pagePrevText: "Geri", + pageNextText: "İleri", + completeText: "Anketi Tamamla", + otherItemText: "Diğer (açıklayınız)", + progressText: "Sayfa {0} / {1}", + emptySurvey: "Ankette görüntülenecek sayfa ya da soru mevcut değil.", + completingSurvey: "Anketimizi tamamladığınız için teşekkür ederiz.", + loadingSurvey: "Anket sunucudan yükleniyor ...", + optionsCaption: "Seçiniz ...", + requiredError: "Lütfen soruya cevap veriniz", + numericError: "Girilen değer numerik olmalıdır", + textMinLength: "En az {0} sembol giriniz.", + minRowCountError: "Lütfen en az {0} satırı doldurun.", + minSelectError: "Lütfen en az {0} seçeneği seçiniz.", + maxSelectError: "Lütfen {0} adetten fazla seçmeyiniz.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "'{0}' değeri {1} değerine eşit veya büyük olmalıdır", + numericMax: "'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.", + invalidEmail: "Lütfen geçerli bir eposta adresi giriniz.", + urlRequestError: "Talebi şu hatayı döndü '{0}'. {1}", + urlGetChoicesError: "Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.", + exceedMaxSize: "Dosya boyutu {0} değerini geçemez.", + otherRequiredError: "Lütfen diğer değerleri giriniz.", + uploadingFile: "Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.", + addRow: "Satır Ekle", + removeRow: "Kaldır" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["tr"] = turkishSurveyStrings; + + +/***/ }), +/* 95 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Trigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTrigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyTriggerVisible; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyTriggerComplete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyTriggerSetValue; }); + + + +var Trigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Trigger, _super); + function Trigger() { + var _this = _super.call(this) || this; + _this.opValue = "equal"; + return _this; + } + Object.defineProperty(Trigger, "operators", { + get: function () { + if (Trigger.operatorsValue != null) + return Trigger.operatorsValue; + Trigger.operatorsValue = { + empty: function (value, expectedValue) { return !value; }, + notempty: function (value, expectedValue) { return !(!value); }, + equal: function (value, expectedValue) { return value == expectedValue; }, + notequal: function (value, expectedValue) { return value != expectedValue; }, + contains: function (value, expectedValue) { return value && value["indexOf"] && value.indexOf(expectedValue) > -1; }, + notcontains: function (value, expectedValue) { return !value || !value["indexOf"] || value.indexOf(expectedValue) == -1; }, + greater: function (value, expectedValue) { return value > expectedValue; }, + less: function (value, expectedValue) { return value < expectedValue; }, + greaterorequal: function (value, expectedValue) { return value >= expectedValue; }, + lessorequal: function (value, expectedValue) { return value <= expectedValue; } + }; + return Trigger.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Trigger.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Trigger.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Trigger.prototype.check = function (value) { + if (Trigger.operators[this.operator](value, this.value)) { + this.onSuccess(); + } + else { + this.onFailure(); + } + }; + Trigger.prototype.onSuccess = function () { }; + Trigger.prototype.onFailure = function () { }; + return Trigger; +}(__WEBPACK_IMPORTED_MODULE_1__base__["a" /* Base */])); + +Trigger.operatorsValue = null; +var SurveyTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTrigger, _super); + function SurveyTrigger() { + var _this = _super.call(this) || this; + _this.owner = null; + return _this; + } + SurveyTrigger.prototype.setOwner = function (owner) { + this.owner = owner; + }; + Object.defineProperty(SurveyTrigger.prototype, "isOnNextPage", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + return SurveyTrigger; +}(Trigger)); + +var SurveyTriggerVisible = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerVisible, _super); + function SurveyTriggerVisible() { + var _this = _super.call(this) || this; + _this.pages = []; + _this.questions = []; + return _this; + } + SurveyTriggerVisible.prototype.getType = function () { return "visibletrigger"; }; + SurveyTriggerVisible.prototype.onSuccess = function () { this.onTrigger(this.onItemSuccess); }; + SurveyTriggerVisible.prototype.onFailure = function () { this.onTrigger(this.onItemFailure); }; + SurveyTriggerVisible.prototype.onTrigger = function (func) { + if (!this.owner) + return; + var objects = this.owner.getObjects(this.pages, this.questions); + for (var i = 0; i < objects.length; i++) { + func(objects[i]); + } + }; + SurveyTriggerVisible.prototype.onItemSuccess = function (item) { item.visible = true; }; + SurveyTriggerVisible.prototype.onItemFailure = function (item) { item.visible = false; }; + return SurveyTriggerVisible; +}(SurveyTrigger)); + +var SurveyTriggerComplete = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerComplete, _super); + function SurveyTriggerComplete() { + return _super.call(this) || this; + } + SurveyTriggerComplete.prototype.getType = function () { return "completetrigger"; }; + Object.defineProperty(SurveyTriggerComplete.prototype, "isOnNextPage", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + SurveyTriggerComplete.prototype.onSuccess = function () { if (this.owner) + this.owner.doComplete(); }; + return SurveyTriggerComplete; +}(SurveyTrigger)); + +var SurveyTriggerSetValue = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerSetValue, _super); + function SurveyTriggerSetValue() { + return _super.call(this) || this; + } + SurveyTriggerSetValue.prototype.getType = function () { return "setvaluetrigger"; }; + SurveyTriggerSetValue.prototype.onSuccess = function () { + if (!this.setToName || !this.owner) + return; + this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable); + }; + return SurveyTriggerSetValue; +}(SurveyTrigger)); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("trigger", ["operator", "!value"]); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("surveytrigger", ["!name"], null, "trigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("visibletrigger", ["pages", "questions"], function () { return new SurveyTriggerVisible(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("completetrigger", [], function () { return new SurveyTriggerComplete(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("setvaluetrigger", ["!setToName", "setValue", "isVariable:boolean"], function () { return new SurveyTriggerSetValue(); }, "surveytrigger"); + + +/***/ }), +/* 96 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__chunks_model__ = __webpack_require__(47); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "AnswerCountValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "EmailValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["c"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "NumericValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["d"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RegexValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["e"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["f"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["g"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorResult", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["h"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["i"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Base", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["j"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Event", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["k"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["l"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ItemValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["m"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "LocalizableString", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["n"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ChoicesRestfull", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["o"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Condition", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["p"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionNode", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["r"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionsParser", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["s"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ProcessValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["t"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["u"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ExceedSizeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["v"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RequreNumericError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["w"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["x"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonIncorrectTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadataClass", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["A"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["B"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeErrorBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["C"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObject", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["D"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["E"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonRequiredPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["F"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonUnknownPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["G"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownCell", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["H"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownColumn", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["I"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["J"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["K"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["L"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["M"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDynamicRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["N"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamicModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["O"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["P"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MultipleTextItemModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["R"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["S"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["T"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["U"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["V"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PageModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["W"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Question", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["X"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionSelectBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_0"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_1"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCommentModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_2"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_3"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_4"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ElementFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_5"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFileModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_6"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionHtmlModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_7"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRadiogroupModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_8"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRatingModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_9"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_10"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_11"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTrigger", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_12"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerComplete", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_13"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerSetValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_14"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerVisible", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_15"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Trigger", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_16"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_17"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextPreProcessor", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_18"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dxSurveyService", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_19"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyLocalization", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_20"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyStrings", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_21"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCustomWidget", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_22"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomWidgetCollection", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_23"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__chunks_localization__ = __webpack_require__(46); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__ = __webpack_require__(0); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(16); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStandardCss", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__ = __webpack_require__(45); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultBootstrapCss", function() { return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__main_scss__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__knockout_kosurvey__ = __webpack_require__(14); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Survey", function() { return __WEBPACK_IMPORTED_MODULE_6__knockout_kosurvey__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_6__knockout_kosurvey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__knockout_kopage__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionRow", function() { return __WEBPACK_IMPORTED_MODULE_7__knockout_kopage__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Page", function() { return __WEBPACK_IMPORTED_MODULE_7__knockout_kopage__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Panel", function() { return __WEBPACK_IMPORTED_MODULE_7__knockout_kopage__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__knockout_koquestionbase__ = __webpack_require__(17); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionImplementorBase", function() { return __WEBPACK_IMPORTED_MODULE_8__knockout_koquestionbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__knockout_koquestion__ = __webpack_require__(7); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionImplementor", function() { return __WEBPACK_IMPORTED_MODULE_9__knockout_koquestion__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__knockout_koquestion_baseselect__ = __webpack_require__(11); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionSelectBaseImplementor", function() { return __WEBPACK_IMPORTED_MODULE_10__knockout_koquestion_baseselect__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxBaseImplementor", function() { return __WEBPACK_IMPORTED_MODULE_10__knockout_koquestion_baseselect__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__knockout_koquestion_checkbox__ = __webpack_require__(49); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckbox", function() { return __WEBPACK_IMPORTED_MODULE_11__knockout_koquestion_checkbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__knockout_koquestion_comment__ = __webpack_require__(50); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionComment", function() { return __WEBPACK_IMPORTED_MODULE_12__knockout_koquestion_comment__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__knockout_koquestion_dropdown__ = __webpack_require__(51); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionDropdown", function() { return __WEBPACK_IMPORTED_MODULE_13__knockout_koquestion_dropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__knockout_koquestion_file__ = __webpack_require__(52); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionFile", function() { return __WEBPACK_IMPORTED_MODULE_14__knockout_koquestion_file__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__knockout_koquestion_html__ = __webpack_require__(53); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionHtml", function() { return __WEBPACK_IMPORTED_MODULE_15__knockout_koquestion_html__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__knockout_koquestion_matrix__ = __webpack_require__(54); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "MatrixRow", function() { return __WEBPACK_IMPORTED_MODULE_16__knockout_koquestion_matrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrix", function() { return __WEBPACK_IMPORTED_MODULE_16__knockout_koquestion_matrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__knockout_koquestion_matrixdropdown__ = __webpack_require__(55); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdown", function() { return __WEBPACK_IMPORTED_MODULE_17__knockout_koquestion_matrixdropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__knockout_koquestion_matrixdynamic__ = __webpack_require__(56); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamicImplementor", function() { return __WEBPACK_IMPORTED_MODULE_18__knockout_koquestion_matrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamic", function() { return __WEBPACK_IMPORTED_MODULE_18__knockout_koquestion_matrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__knockout_koquestion_multipletext__ = __webpack_require__(57); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "MultipleTextItem", function() { return __WEBPACK_IMPORTED_MODULE_19__knockout_koquestion_multipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleTextImplementor", function() { return __WEBPACK_IMPORTED_MODULE_19__knockout_koquestion_multipletext__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleText", function() { return __WEBPACK_IMPORTED_MODULE_19__knockout_koquestion_multipletext__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__knockout_koquestion_radiogroup__ = __webpack_require__(58); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionRadiogroup", function() { return __WEBPACK_IMPORTED_MODULE_20__knockout_koquestion_radiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__knockout_koquestion_rating__ = __webpack_require__(59); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionRating", function() { return __WEBPACK_IMPORTED_MODULE_21__knockout_koquestion_rating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__knockout_koquestion_text__ = __webpack_require__(60); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionText", function() { return __WEBPACK_IMPORTED_MODULE_22__knockout_koquestion_text__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__knockout_koSurveyWindow__ = __webpack_require__(48); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return __WEBPACK_IMPORTED_MODULE_23__knockout_koSurveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__knockout_templateText__ = __webpack_require__(29); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyTemplateText", function() { return __WEBPACK_IMPORTED_MODULE_24__knockout_templateText__["a"]; }); +// model + +// localization + +// helpers + +// css standard + +// css bootstrap + +// styles + +// knockout + // TODO need to remove someday + + + + + + + + + + + + + + + + + + + + +//Uncomment to include the "date" question type. +//export {QuestionDate} from "../plugins/knockout/koquestion_date"; + + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlZTZkYzc0MjliNDE0ODYzMDI3NiIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvanNvbm9iamVjdC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzIiwid2VicGFjazovLy8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwia29cIixcImNvbW1vbmpzMlwiOlwia25vY2tvdXRcIixcImNvbW1vbmpzXCI6XCJrbm9ja291dFwiLFwiYW1kXCI6XCJrbm9ja291dFwifSIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9pdGVtdmFsdWUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC9rb3N1cnZleS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9ucy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbmJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nob2ljZXNSZXN0ZnVsbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYW5lbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdmFsaWRhdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L2tvcGFnZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVUZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwid2VicGFjazovLy8uL3NyYy9keFN1cnZleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9kcm9wZG93bi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25faHRtbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHluYW1pYy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX3RleHQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleVdpbmRvdy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXAudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L2tvU3VydmV5V2luZG93LnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX2NvbW1lbnQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25fZmlsZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbl9odG1sLnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX21hdHJpeC50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX3JhdGluZy50cyIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQva29xdWVzdGlvbl90ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvY29tbWVudC5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvaW5kZXguaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3BhZ2UuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3BhbmVsLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9wcm9ncmVzcy5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tY2hlY2tib3guaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLWNvbW1lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLWRyb3Bkb3duLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1lcnJvcnMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLWZpbGUuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLWh0bWwuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLW1hdHJpeC5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tbWF0cml4ZHJvcGRvd24uaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLW1hdHJpeGR5bmFtaWMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLW11bHRpcGxldGV4dC5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tcmFkaW9ncm91cC5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tcmF0aW5nLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi10ZXh0Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcm93cy5odG1sIiwid2VicGFjazovLy8uL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvZW50cnkuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3dpbmRvdy93aW5kb3cuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZHV0Y2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9yb21hbmlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3J1c3NpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9zd2VkaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJpZ2dlci50cyIsIndl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O1FBQ3JCLEVBQUUsRUFBQyxDQUFDLFdBQVcsQ0FBQztZQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDbkMsRUFBRSxFQUFDLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDdEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsV0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsSUFBSSxZQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxTQUFNLEtBQUssRUFBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQztZQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxNQUFN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QUFDUjtBQUNKO0FBQ0Q7QUFDSTtBQUU1RCxnREFBZ0Q7QUFDaEQsbUVBQW1FIiwiZmlsZSI6Ii4vcGFja2FnZXMvc3VydmV5LWtub2Nrb3V0L3N1cnZleS5rbm9ja291dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5XCIsIFtcImtub2Nrb3V0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlcIl0gPSBmYWN0b3J5KHJvb3RbXCJrb1wiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzZfXykge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5Nik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZWU2ZGM3NDI5YjQxNDg2MzAyNzYiLCJleHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0W1wiYXNzaWduXCJdIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0YXJnZXRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcclxuICAgIGZvciAodmFyIHAgaW4gYmFzZUNsYXNzKSBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IHRoaXNDbGFzczsgfVxyXG4gICAgdGhpc0NsYXNzLnByb3RvdHlwZSA9IGJhc2VDbGFzcyA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKSA6IChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn07XHJcblxyXG5kZWNsYXJlIHZhciBSZWZsZWN0O1xyXG5cclxuZXhwb3J0IHZhciBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9oZWxwZXJzLnRzIiwiaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgIHByaXZhdGUgdHlwZVZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PGFueT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzZnVuYzogKCkgPT4gQXJyYXk8YW55PiA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjbGFzc05hbWVQYXJ0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnkgPSBudWxsO1xyXG4gICAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2NhbGl6YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBvbkdldFZhbHVlOiAob2JqOiBhbnkpID0+IGFueSA9IG51bGw7XHJcbiAgICBwdWJsaWMgb25TZXRWYWx1ZTogKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkgPT4gYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwic3RyaW5nXCI7IH1cclxuICAgIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMudHlwZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVG9Vc2VHZXRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMub25HZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTsgfVxyXG4gICAgcHVibGljIGlzRGVmYXVsdFZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGVmYXVsdFZhbHVlKSA/ICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSB2YWx1ZSkgOiAhKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRWYWx1ZShvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25HZXRWYWx1ZSkgcmV0dXJuIHRoaXMub25HZXRWYWx1ZShvYmopO1xyXG4gICAgICAgIGlmKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5KSByZXR1cm4gb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XS5nZXRKc29uKCk7XHJcbiAgICAgICAgcmV0dXJuIG9ialt0aGlzLm5hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb3BlcnR5VmFsdWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmKHRoaXMuaXNMb2NhbGl6YWJsZSkgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUb1VzZVNldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5vblNldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5OyB9XHJcbiAgICBwdWJsaWMgc2V0VmFsdWUob2JqOiBhbnksIHZhbHVlOiBhbnksIGpzb25Db252OiBKc29uT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25TZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2V0VmFsdWUob2JqLCB2YWx1ZSwganNvbkNvbnYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5KSBcclxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgIGVsc2Ugb2JqW3RoaXMubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0T2JqVHlwZShvYmpUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xhc3NOYW1lUGFydCkgcmV0dXJuIG9ialR5cGU7XHJcbiAgICAgICAgcmV0dXJuIG9ialR5cGUucmVwbGFjZSh0aGlzLmNsYXNzTmFtZVBhcnQsIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmNsYXNzTmFtZVBhcnQgJiYgY2xhc3NOYW1lLmluZGV4T2YodGhpcy5jbGFzc05hbWVQYXJ0KSA8IDApID8gY2xhc3NOYW1lICsgdGhpcy5jbGFzc05hbWVQYXJ0IDogY2xhc3NOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKSByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvaWNlc2Z1bmMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMoKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDaG9pY2VzKHZhbHVlOiBBcnJheTxhbnk+LCB2YWx1ZUZ1bmM6ICgpID0+IEFycmF5PGFueT4pIHtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YUNsYXNzIHtcclxuICAgIHN0YXRpYyByZXF1aXJlZFN5bWJvbCA9ICchJztcclxuICAgIHN0YXRpYyB0eXBlU3ltYm9sID0gJzonO1xyXG4gICAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XHJcbiAgICByZXF1aXJlZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHJvcGVydGllczogQXJyYXk8YW55PiwgcHVibGljIGNyZWF0b3I6ICgpID0+IGFueSA9IG51bGwsIHB1YmxpYyBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3AgPSB0aGlzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0pO1xyXG4gICAgICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2gocHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZmluZChuYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVQcm9wZXJ0eShwcm9wSW5mbzogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gdHlwZW9mIHByb3BJbmZvID09PSBcInN0cmluZ1wiID8gcHJvcEluZm8gOiBwcm9wSW5mby5uYW1lO1xyXG4gICAgICAgIGlmICghcHJvcGVydHlOYW1lKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHByb3BlcnR5VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIHR5cGVJbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKEpzb25NZXRhZGF0YUNsYXNzLnR5cGVTeW1ib2wpO1xyXG4gICAgICAgIGlmICh0eXBlSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHR5cGVJbmRleCArIDEpO1xyXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHR5cGVJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgdmFyIHByb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICBwcm9wLnR5cGUgPSBwcm9wZXJ0eVR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcEluZm8gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AudHlwZSA9IHByb3BJbmZvLnR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuZGVmYXVsdFZhbHVlID0gcHJvcEluZm8uZGVmYXVsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVByb3BlcnR5UmVxdWlyZWQocHJvcC5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8uY2hvaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNGdW5jID0gdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNWYWx1ZSA9IHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzICE9PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHByb3Auc2V0Q2hvaWNlcyhjaG9pY2VzVmFsdWUsIGNob2ljZXNGdW5jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8ub25HZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5vbkdldFZhbHVlID0gcHJvcEluZm8ub25HZXRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8ub25TZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlID0gcHJvcEluZm8ub25TZXRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ID0gcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgdmFyIHM6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LmluZGV4T2YoXCJsb2NcIikgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHRydWU7ICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHByb3BJbmZvLmlzTG9jYWxpemFibGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5jbGFzc05hbWUgPSBwcm9wSW5mby5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmJhc2VDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuYmFzZUNsYXNzTmFtZSA9IHByb3BJbmZvLmJhc2VDbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZVBhcnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuY2xhc3NOYW1lUGFydCA9IHByb3BJbmZvLmNsYXNzTmFtZVBhcnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8uYWx0ZXJuYXRpdmVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmFsdGVybmF0aXZlTmFtZSA9IHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lLmxlbmd0aCA9PSAwIHx8IHByb3BlcnR5TmFtZVswXSAhPSBKc29uTWV0YWRhdGFDbGFzcy5yZXF1aXJlZFN5bWJvbCkgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc2xpY2UoMSk7XHJcbiAgICAgICAgdGhpcy5tYWtlUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1ha2VQcm9wZXJ0eVJlcXVpcmVkKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkUHJvcGVydGllcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVxdWlyZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhIHtcclxuICAgIHByaXZhdGUgY2xhc3NlczogSGFzaFRhYmxlPEpzb25NZXRhZGF0YUNsYXNzPiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkNsYXNzZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4+ID0ge307XHJcbiAgICBwcml2YXRlIGNsYXNzUHJvcGVydGllczogSGFzaFRhYmxlPEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4+ID0ge307XHJcbiAgICBwcml2YXRlIGNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzOiBIYXNoVGFibGU8QXJyYXk8c3RyaW5nPj4gPSB7fTtcclxuICAgIHB1YmxpYyBhZGRDbGFzcyhuYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IEFycmF5PGFueT4sIGNyZWF0b3I6ICgpID0+IGFueSA9IG51bGwsIHBhcmVudE5hbWU6IHN0cmluZyA9IG51bGwpOiBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSBuZXcgSnNvbk1ldGFkYXRhQ2xhc3MobmFtZSwgcHJvcGVydGllcywgY3JlYXRvciwgcGFyZW50TmFtZSk7XHJcbiAgICAgICAgdGhpcy5jbGFzc2VzW25hbWVdID0gbWV0YURhdGFDbGFzcztcclxuICAgICAgICBpZiAocGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXS5wdXNoKG1ldGFEYXRhQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWV0YURhdGFDbGFzcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcmUobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcclxuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzKSB7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciA9IGNyZWF0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV07XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBwcm9wZXJ0aWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBmaW5kUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSA6IEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYocHJvcGVydGllc1tpXS5uYW1lID09IHByb3BlcnR5TmFtZSkgcmV0dXJuIHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZUNsYXNzKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbkNsYXNzZXMobmFtZTogc3RyaW5nLCBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhuYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSZXF1aXJlZFByb3BlcnRpZXMobmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzW25hbWVdO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzW25hbWVdID0gcHJvcGVydGllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5SW5mbzogYW55KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuY3JlYXRlUHJvcGVydHkocHJvcGVydHlJbmZvKTtcclxuICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eVRvQ2xhc3MobWV0YURhdGFDbGFzcywgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eVRvQ2xhc3MobWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5maW5kKHByb3BlcnR5Lm5hbWUpICE9IG51bGwpIHJldHVybjtcclxuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaW5kZXggPSBtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgbWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XHJcbiAgICAgICAgdmFyIGNoaWxkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKG1ldGFEYXRhQ2xhc3MubmFtZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbY2hpbGRDbGFzc2VzW2ldLm5hbWVdID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZTogc3RyaW5nLCBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4sIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+KSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbmFtZV07XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFjYW5CZUNyZWF0ZWQgfHwgY2hpbGRyZW5baV0uY3JlYXRvcikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZpbmRDbGFzcyhuYW1lOiBzdHJpbmcpOiBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3Nlc1tuYW1lXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZmlsbFByb3BlcnRpZXMobmFtZTogc3RyaW5nLCBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eUNvcmUobWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzW2ldLCBsaXN0LCBsaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eUNvcmUocHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSwgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiwgZW5kSW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kSW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtpXS5uYW1lID09IHByb3BlcnR5Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgbGlzdC5wdXNoKHByb3BlcnR5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxpc3RbaW5kZXhdID0gcHJvcGVydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZywgbGlzdDogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGxpc3QsIG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxSZXF1aXJlZFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25FcnJvciB7XHJcbiAgICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgYXQ6IE51bWJlciA9IC0xO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEZ1bGxEZXNjcmlwdGlvbigpIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlICsgKHRoaXMuZGVzY3JpcHRpb24gPyBcIlxcblwiICsgdGhpcy5kZXNjcmlwdGlvbiA6IFwiXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihcInVua25vd25wcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSAnXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIicgaW4gY2xhc3MgJ1wiICsgY2xhc3NOYW1lICsgXCInIGlzIHVua25vd24uXCIpO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlOiBcIjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBwcm9wZXJ0aWVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSAnLic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZywgcHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKHR5cGUsIG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGF2YWlsYWJsZTogXCI7XHJcbiAgICAgICAgdmFyIHR5cGVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiJ1wiICsgdHlwZXNbaV0ubmFtZSArIFwiJ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihiYXNlQ2xhc3NOYW1lLCBcIm1pc3Npbmd0eXBlcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBtaXNzaW5nIGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICsgcHJvcGVydHlOYW1lICsgXCInLlwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbkluY29ycmVjdFR5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihiYXNlQ2xhc3NOYW1lLCBcImluY29ycmVjdHR5cGVwcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIGluY29ycmVjdCBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihcInJlcXVpcmVkcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgJ1wiICsgcHJvcGVydHlOYW1lICsgXCInIGlzIHJlcXVpcmVkIGluIGNsYXNzICdcIiArIGNsYXNzTmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uT2JqZWN0IHtcclxuICAgIHByaXZhdGUgc3RhdGljIHR5cGVQcm9wZXJ0eU5hbWUgPSBcInR5cGVcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIHBvc2l0aW9uUHJvcGVydHlOYW1lID0gXCJwb3NcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIG1ldGFEYXRhVmFsdWUgPSBuZXcgSnNvbk1ldGFkYXRhKCk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBtZXRhRGF0YSgpIHsgcmV0dXJuIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZTsgfVxyXG4gICAgcHVibGljIGVycm9ycyA9IG5ldyBBcnJheTxKc29uRXJyb3I+KCk7XHJcbiAgICBwdWJsaWMgdG9Kc29uT2JqZWN0KG9iajogYW55KTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0pzb25PYmplY3RDb3JlKG9iaiwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9PYmplY3QoanNvbk9iajogYW55LCBvYmo6IGFueSkge1xyXG4gICAgICAgIGlmICghanNvbk9iaikgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcclxuICAgICAgICBpZiAob2JqLmdldFR5cGUpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGpzb25PYmopIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09IEpzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIG9ialtrZXldID0ganNvbk9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5maW5kUHJvcGVydHkocHJvcGVydGllcywga2V5KTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdFcnJvcihuZXcgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yKGtleS50b1N0cmluZygpLCBvYmouZ2V0VHlwZSgpKSwganNvbk9iaik7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9PYmooanNvbk9ialtrZXldLCBvYmosIGtleSwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB0b0pzb25PYmplY3RDb3JlKG9iajogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcclxuICAgICAgICBpZiAoIW9iai5nZXRUeXBlKSByZXR1cm4gb2JqO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiAoIXByb3BlcnR5LmNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0W0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eS5nZXRPYmpUeXBlKG9iai5nZXRUeXBlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9Kc29uKG9iaiwgcmVzdWx0LCBwcm9wZXJ0aWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvSnNvbihvYmo6IGFueSwgcmVzdWx0OiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdmFyIGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2godGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlW2ldLCBwcm9wZXJ0eSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbHVlID0gYXJyVmFsdWUubGVuZ3RoID4gMCA/IGFyclZhbHVlIDogbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZSwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb09iaih2YWx1ZTogYW55LCBvYmo6IGFueSwga2V5OiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5Lmhhc1RvVXNlU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgcHJvcGVydHkuc2V0VmFsdWUob2JqLCB2YWx1ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUFycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld09iaiA9IHRoaXMuY3JlYXRlTmV3T2JqKHZhbHVlLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKG5ld09iai5uZXdPYmopIHtcclxuICAgICAgICAgICAgdGhpcy50b09iamVjdCh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3T2JqLm5ld09iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFuZXdPYmouZXJyb3IpIHtcclxuICAgICAgICAgICAgb2JqW3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1ZhbHVlQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSk7IH1cclxuICAgIHByaXZhdGUgY3JlYXRlTmV3T2JqKHZhbHVlOiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7IG5ld09iajogbnVsbCwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdmFsdWVbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXTtcclxuICAgICAgICBpZiAoIWNsYXNzTmFtZSAmJiBwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5LmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5jbGFzc05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmdldENsYXNzTmFtZShjbGFzc05hbWUpO1xyXG4gICAgICAgIHJlc3VsdC5uZXdPYmogPSAoY2xhc3NOYW1lKSA/IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoY2xhc3NOYW1lKSA6IG51bGw7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jaGVja05ld09iamVjdE9uRXJyb3JzKHJlc3VsdC5uZXdPYmosIHZhbHVlLCBwcm9wZXJ0eSwgY2xhc3NOYW1lKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja05ld09iamVjdE9uRXJyb3JzKG5ld09iajogYW55LCB2YWx1ZTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LCBjbGFzc05hbWU6IHN0cmluZyk6IEpzb25FcnJvciB7XHJcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcclxuICAgICAgICBpZiAobmV3T2JqKSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICBpZiAocmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVbcmVxdWlyZWRQcm9wZXJ0aWVzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHJlcXVpcmVkUHJvcGVydGllc1tpXSwgY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmJhc2VDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbk1pc3NpbmdUeXBlRXJyb3IocHJvcGVydHkubmFtZSwgcHJvcGVydHkuYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEpzb25JbmNvcnJlY3RUeXBlRXJyb3IocHJvcGVydHkubmFtZSwgcHJvcGVydHkuYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGROZXdFcnJvcihlcnJvcjogSnNvbkVycm9yLCBqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAoanNvbk9iaiAmJiBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgIGVycm9yLmF0ID0ganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXS5zdGFydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHZhbHVlVG9BcnJheSh2YWx1ZTogQXJyYXk8YW55Piwgb2JqOiBhbnksIGtleTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYob2JqW2tleV0gJiYgdmFsdWUubGVuZ3RoID4gMCkgb2JqW2tleV0uc3BsaWNlKDAsIG9ialtrZXldLmxlbmd0aCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUubmV3T2JqKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpba2V5XS5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvT2JqZWN0KHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldLnB1c2godmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kUHJvcGVydHkocHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Piwga2V5OiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgaWYgKHByb3AubmFtZSA9PSBrZXkgfHwgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPT0ga2V5KSByZXR1cm4gcHJvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvanNvbm9iamVjdC50cyIsImltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tICcuL3F1ZXN0aW9uYmFzZSc7XHJcbmltcG9ydCB7SUVsZW1lbnQsIEhhc2hUYWJsZX0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuLy9UT0RPIHJlcGxhY2UgY29tcGxldGVseSB3aXRoIEVsZW1lbnRGYWN0b3J5XHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZhY3Rvcnkge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUXVlc3Rpb25GYWN0b3J5ID0gbmV3IFF1ZXN0aW9uRmFjdG9yeSgpO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdENob2ljZXMoKTogc3RyaW5nW10geyBcclxuICAgICAgICByZXR1cm4gW1wiMXxcIiArIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX2ZpcnN0SXRlbVwiKSwgXCIyfFwiICsgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfc2Vjb25kSXRlbVwiKSwgXCIzfFwiICsgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfdGhpcmRJdGVtXCIpXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRDb2x1bXMoKTogc3RyaW5nW10geyBcclxuICAgICAgICB2YXIgY29sTmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XHJcbiAgICAgICAgcmV0dXJuIFtjb2xOYW1lICsgXCIxXCIsIGNvbE5hbWUgKyBcIjJcIiwgY29sTmFtZSArIFwiM1wiXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRSb3dzKCk6IHN0cmluZ1tdIHsgXHJcbiAgICAgICAgdmFyIHJvd05hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKSArIFwiIFwiO1xyXG4gICAgICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uQmFzZT4gPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcXVlc3Rpb25DcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV0gPSBxdWVzdGlvbkNyZWF0b3I7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgIGZvcih2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uQmFzZSB7XHJcbiAgICAgICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbGVtZW50RmFjdG9yeSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBFbGVtZW50RmFjdG9yeSA9IG5ldyBFbGVtZW50RmFjdG9yeSgpO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50PiA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgZWxlbWVudENyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3JIYXNoID0ge307XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5nZXRBbGxUeXBlcygpO1xyXG4gICAgICAgIGZvcih2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcclxuICAgICAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcclxuICAgICAgICByZXR1cm4gY3JlYXRvcihuYW1lKTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMiLCJleHBvcnQgdmFyIHN1cnZleUxvY2FsaXphdGlvbiA9IHtcclxuICAgIGN1cnJlbnRMb2NhbGU6IFwiXCIsXHJcbiAgICBsb2NhbGVzOiB7fSxcclxuICAgIGdldFN0cmluZzogZnVuY3Rpb24gKHN0ck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhbGUgPyB0aGlzLmxvY2FsZXNbdGhpcy5jdXJyZW50TG9jYWxlXSA6IHN1cnZleVN0cmluZ3M7XHJcbiAgICAgICAgaWYgKCFsb2MgfHwgIWxvY1tzdHJOYW1lXSkgbG9jID0gc3VydmV5U3RyaW5ncztcclxuICAgICAgICByZXR1cm4gbG9jW3N0ck5hbWVdO1xyXG4gICAgfSxcclxuICAgIGdldExvY2FsZXM6IGZ1bmN0aW9uICgpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmVzID0gW107XHJcbiAgICAgICAgcmVzLnB1c2goXCJcIik7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubG9jYWxlcykge1xyXG4gICAgICAgICAgICByZXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMuc29ydCgpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgc3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJQcmV2aW91c1wiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIk5leHRcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJPdGhlciAoZGVzY3JpYmUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gb2YgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJUaGVyZSBpcyBubyB2aXNpYmxlIHBhZ2Ugb3IgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGhhbmsgeW91IGZvciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlN1cnZleSBpcyBsb2FkaW5nLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJDaG9vc2UuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGFuc3dlciB0aGUgcXVlc3Rpb24uXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBsZWFzZSBhbnN3ZXIgcXVlc3Rpb25zIGluIGFsbCByb3dzLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgYmUgbnVtZXJpYy5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBzeW1ib2xzLlwiLFxyXG4gICAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIHswfSBzeW1ib2xzLlwiLFxyXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbW9yZSB0aGFuIHswfSBhbmQgbGVzcyB0aGFuIHsxfSBzeW1ib2xzLlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJQbGVhc2UgZmlsbCBpbiBhdCBsZWFzdCB7MH0gcm93cy5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlBsZWFzZSBzZWxlY3QgYXQgbGVhc3QgezB9IHZhcmlhbnRzLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBubyBtb3JlIHRoYW4gezB9IHZhcmlhbnRzLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX0gYW5kIGVxdWFsIG9yIGxlc3MgdGhhbiB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBtb3JlIHRoYW4gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbGVzcyB0aGFuIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVycm9yICd7MH0nLiB7MX1cIixcclxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJUaGUgcmVxdWVzdCByZXR1cm5lZCBlbXB0eSBkYXRhIG9yIHRoZSAncGF0aCcgcHJvcGVydHkgaXMgaW5jb3JyZWN0XCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIlRoZSBmaWxlIHNpemUgc2hvdWxkIG5vdCBleGNlZWQgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBsZWFzZSBlbnRlciB0aGUgb3RoZXIgdmFsdWUuXCIsXHJcbiAgICB1cGxvYWRpbmdGaWxlOiBcIllvdXIgZmlsZSBpcyB1cGxvYWRpbmcuIFBsZWFzZSB3YWl0IHNldmVyYWwgc2Vjb25kcyBhbmQgdHJ5IGFnYWluLlwiLFxyXG4gICAgYWRkUm93OiBcIkFkZCByb3dcIixcclxuICAgIHJlbW92ZVJvdzogXCJSZW1vdmVcIixcclxuICAgIGNob2ljZXNfZmlyc3RJdGVtOiBcImZpcnN0IGl0ZW1cIixcclxuICAgIGNob2ljZXNfc2Vjb25kSXRlbTogXCJzZWNvbmQgaXRlbVwiLFxyXG4gICAgY2hvaWNlc190aGlyZEl0ZW06IFwidGhpcmQgaXRlbVwiLFxyXG4gICAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5cIixcclxuICAgIG1hdHJpeF9yb3c6IFwiUm93XCJcclxufTtcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlblwiXSA9IHN1cnZleVN0cmluZ3M7XHJcblxyXG5pZiAoIVN0cmluZy5wcm90b3R5cGVbXCJmb3JtYXRcIl0pIHtcclxuICAgIFN0cmluZy5wcm90b3R5cGVbXCJmb3JtYXRcIl0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmdzW251bWJlcl0gIT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgICAgICAgID8gYXJnc1tudW1iZXJdXHJcbiAgICAgICAgICAgICAgICA6IG1hdGNoXHJcbiAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleVN0cmluZ3MudHMiLCJleHBvcnQgaW50ZXJmYWNlIEhhc2hUYWJsZTxUPiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBUO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleURhdGEge1xyXG4gICAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xyXG4gICAgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTtcclxuICAgIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleSBleHRlbmRzIElTdXJ2ZXlEYXRhIHtcclxuICAgIGN1cnJlbnRQYWdlOiBJUGFnZTtcclxuICAgIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pO1xyXG4gICAgcXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYm9vbGVhbik7XHJcbiAgICBxdWVzdGlvbkFkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KTtcclxuICAgIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSk7XHJcbiAgICBxdWVzdGlvblJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbik7XHJcbiAgICBwYW5lbFJlbW92ZWQocGFuZWw6IElFbGVtZW50KTtcclxuICAgIHZhbGlkYXRlUXVlc3Rpb24obmFtZTogc3RyaW5nKTogU3VydmV5RXJyb3I7XHJcbiAgICBwcm9jZXNzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBpc0Rpc3BsYXlNb2RlOiBib29sZWFuO1xyXG4gICAgaXNEZXNpZ25Nb2RlOiBib29sZWFuO1xyXG4gICAgaXNMb2FkaW5nRnJvbUpzb246IGJvb2xlYW47XHJcbiAgICByZXF1aXJlZFRleHQ6IHN0cmluZztcclxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogc3RyaW5nO1xyXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogYm9vbGVhbjtcclxuICAgIHVwbG9hZEZpbGUobmFtZTogc3RyaW5nLCBmaWxlOiBGaWxlLCBzdG9yZURhdGFBc1RleHQ6IGJvb2xlYW4sIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcpID0+IGFueSk6IGJvb2xlYW47XHJcbiAgICBhZnRlclJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50KTtcclxuICAgIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudCk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJQ29uZGl0aW9uUnVubmVyIHtcclxuICAgIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50ICBleHRlbmRzIElDb25kaXRpb25SdW5uZXJ7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gICAgc2V0RGF0YShuZXdWYWx1ZTogSVN1cnZleURhdGEpO1xyXG4gICAgcm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByZW5kZXJXaWR0aDogc3RyaW5nO1xyXG4gICAgd2lkdGg6IHN0cmluZztcclxuICAgIHJpZ2h0SW5kZW50OiBudW1iZXI7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBib29sZWFuO1xyXG4gICAgaXNQYW5lbDogYm9vbGVhbjtcclxuICAgIG9uU3VydmV5TG9hZCgpO1xyXG4gICAgb25Mb2NhbGVDaGFuZ2VkKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXN0aW9uIGV4dGVuZHMgSUVsZW1lbnQge1xyXG4gICAgaGFzVGl0bGU6IGJvb2xlYW47XHJcbiAgICBzZXRWaXNpYmxlSW5kZXgodmFsdWU6IG51bWJlcik7XHJcbiAgICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KTtcclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCk6IGJvb2xlYW47XHJcbiAgICBjbGVhclVudXNlZFZhbHVlcygpO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhbmVsIGV4dGVuZHMgSUVsZW1lbnQge1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2UgZXh0ZW5kcyBJQ29uZGl0aW9uUnVubmVyIHtcclxuICAgIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICBvblN1cnZleUxvYWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2Uge1xyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGlzIGFic3RyYWN0Jyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaXNUd29WYWx1ZUVxdWFscyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh4ID09PSB5KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiB4KSB7XHJcbiAgICAgICAgICAgIGlmICgheC5oYXNPd25Qcm9wZXJ0eShwKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICgheS5oYXNPd25Qcm9wZXJ0eShwKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoeFtwXSA9PT0geVtwXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHhbcF0pICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHhbcF0sIHlbcF0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAocCBpbiB5KSB7XHJcbiAgICAgICAgICAgIGlmICh5Lmhhc093blByb3BlcnR5KHApICYmICF4Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBtZXRob2QgaXMgYWJzdHJhY3QnKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBTdXJ2ZXlQYWdlSWQ6IHN0cmluZztcclxuU3VydmV5UGFnZUlkID0gXCJzcV9wYWdlXCI7XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgU2Nyb2xsRWxlbWVudFRvVG9wKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50SWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xyXG4gICAgICAgIGlmICghZWwgfHwgIWVsLnNjcm9sbEludG9WaWV3KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGVsZW1Ub3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgaWYgKGVsZW1Ub3AgPCAwKSAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICByZXR1cm4gZWxlbVRvcCA8IDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIEdldEZpcnN0Tm9uVGV4dEVsZW1lbnQoZWxlbWVudHM6IGFueSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI3RleHRcIiAmJiBlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiNjb21tZW50XCIpIHJldHVybiBlbGVtZW50c1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIEZvY3VzRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZWxlbWVudElkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcclxuICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgZWwuZm9jdXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEV2ZW50PFQgZXh0ZW5kcyBGdW5jdGlvbiwgT3B0aW9ucz4gIHtcclxuICAgIHByaXZhdGUgY2FsbGJhY2tzOiBBcnJheTxUPjtcclxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY2FsbGJhY2tzID09IG51bGwgfHwgdGhpcy5jYWxsYmFja3MubGVuZ3RoID09IDA7IH1cclxuICAgIHB1YmxpYyBmaXJlKHNlbmRlcjogYW55LCBvcHRpb25zOiBPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB2YXIgY2FsbFJlc3VsdCA9IHRoaXMuY2FsbGJhY2tzW2ldKHNlbmRlciwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGQoZnVuYzogVCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzID0gbmV3IEFycmF5PFQ+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZnVuYyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlKGZ1bmM6IFQpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoZnVuYywgMCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9iYXNlLnRzIiwiZXhwb3J0IGludGVyZmFjZSBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBnZXRMb2NhbGUoKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcHVibGljIHN0YXRpYyAgZGVmYXVsdExvY2FsZTogc3RyaW5nID0gXCJkZWZhdWx0XCI7XHJcbiAgICBwcml2YXRlIHZhbHVlcyA9IHt9O1xyXG4gICAgY29uc3RydWN0b3IgKHB1YmxpYyBvd25lcjogSUxvY2FsaXphYmxlT3duZXIpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCkge3JldHVybiB0aGlzLm93bmVyID8gdGhpcy5vd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgdGV4dCgpIDogc3RyaW5nIHsgXHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xyXG4gICAgICAgIGlmKCFsb2MpIGxvYyA9IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgaWYoIXJlcyAmJiBsb2MgIT09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgcmVzID0gdGhpcy52YWx1ZXNbTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLnZhbHVlc1trZXlzWzBdXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KHRoaXMubG9jYWxlLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy52YWx1ZXNbbG9jXTtcclxuICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICBpZighdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYodGhpcy52YWx1ZXNbbG9jXSkgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlmKGxvYyAhPSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlICYmIHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChsb2MsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tsb2NdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobG9jID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMSAmJiBrZXlzWzBdID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHJldHVybiB0aGlzLnZhbHVlc1trZXlzWzBdXTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcclxuICAgICAgICBpZighdmFsdWUpIHJldHVybjtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQobnVsbCwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQoa2V5LCB2YWx1ZVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0KGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmKGtleXNbaV0gPT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudmFsdWVzW2tleXNbaV1dID09IGRlZmF1bHRWYWx1ZSkgZGVsZXRlIHRoaXMudmFsdWVzW2tleXNbaV1dO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfNl9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcImtvXCIsXCJjb21tb25qczJcIjpcImtub2Nrb3V0XCIsXCJjb21tb25qc1wiOlwia25vY2tvdXRcIixcImFtZFwiOlwia25vY2tvdXRcIn1cbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25JbXBsZW1lbnRvckJhc2V9IGZyb20gXCIuL2tvcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnR9IGZyb20gXCIuLi9iYXNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbXBsZW1lbnRvciBleHRlbmRzIFF1ZXN0aW9uSW1wbGVtZW50b3JCYXNlIHtcclxuICAgIHByaXZhdGUgaXNVcGRhdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBrb0R1bW15OiBhbnk7XHJcbiAgICBrb1ZhbHVlOiBhbnk7IGtvQ29tbWVudDogYW55OyBrb1RpdGxlOiBhbnk7IGtvSXNSZWFkT25seTogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHF1ZXN0aW9uOiBRdWVzdGlvbikge1xyXG4gICAgICAgIHN1cGVyKHF1ZXN0aW9uKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25WYWx1ZUNoYW5nZWQoKTsgfTtcclxuICAgICAgICBxdWVzdGlvbi5jb21tZW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLm9uQ29tbWVudENoYW5nZWQoKTsgfTtcclxuICAgICAgICBxdWVzdGlvbi5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25FcnJvcnNDaGFuZ2VkKCk7IH07XHJcbiAgICAgICAgcXVlc3Rpb24udGl0bGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25WaXNpYmxlSW5kZXhDaGFuZ2VkKCk7IH07XHJcbiAgICAgICAgcXVlc3Rpb24udmlzaWJsZUluZGV4Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLm9uVmlzaWJsZUluZGV4Q2hhbmdlZCgpOyB9O1xyXG4gICAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7c2VsZi5vblJlYWRPbmx5Q2hhbmdlZCgpO31cclxuICAgICAgICB0aGlzLmtvRHVtbXkgPSBrby5vYnNlcnZhYmxlKDApO1xyXG4gICAgICAgIHRoaXMua29WYWx1ZSA9IHRoaXMuY3JlYXRla29WYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMua29Db21tZW50ID0ga28ub2JzZXJ2YWJsZSh0aGlzLnF1ZXN0aW9uLmNvbW1lbnQpO1xyXG4gICAgICAgIHRoaXMua29UaXRsZSA9IGtvLnB1cmVDb21wdXRlZChmdW5jdGlvbiAoKSB7IHNlbGYua29EdW1teSgpOyByZXR1cm4gc2VsZi5xdWVzdGlvbi5mdWxsVGl0bGU7IH0pO1xyXG4gICAgICAgIHRoaXMua29FcnJvcnModGhpcy5xdWVzdGlvbi5lcnJvcnMpO1xyXG4gICAgICAgIHRoaXMua29Jc1JlYWRPbmx5ID0ga28ub2JzZXJ2YWJsZSh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkpO1xyXG4gICAgICAgIHRoaXMua29WYWx1ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHNlbGYudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMua29Db21tZW50LnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgc2VsZi51cGRhdGVDb21tZW50KG5ld1ZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29WYWx1ZVwiXSA9IHRoaXMua29WYWx1ZTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29Db21tZW50XCJdID0gdGhpcy5rb0NvbW1lbnQ7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbltcImtvVGl0bGVcIl0gPSB0aGlzLmtvVGl0bGU7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbltcImtvSXNSZWFkT25seVwiXSA9IHRoaXMua29Jc1JlYWRPbmx5O1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb1F1ZXN0aW9uQWZ0ZXJSZW5kZXJcIl0gPSBmdW5jdGlvbiAoZWwsIGNvbikgeyBzZWxmLmtvUXVlc3Rpb25BZnRlclJlbmRlcihlbCwgY29uKTsgfTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGRhdGVRdWVzdGlvbigpIHtcclxuICAgICAgICB0aGlzLmtvRHVtbXkodGhpcy5rb0R1bW15KCkgKyAxKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1VwZGF0aW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRrb1ZhbHVlKHRoaXMucXVlc3Rpb24udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ29tbWVudENoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVcGRhdGluZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMua29Db21tZW50KHRoaXMucXVlc3Rpb24uY29tbWVudCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlSW5kZXhDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29EdW1teSh0aGlzLmtvRHVtbXkoKSArIDEpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29Jc1JlYWRPbmx5KHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25FcnJvcnNDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29FcnJvcnModGhpcy5xdWVzdGlvbi5lcnJvcnMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZWtvVmFsdWUoKTogYW55IHsgcmV0dXJuIGtvLm9ic2VydmFibGUodGhpcy5xdWVzdGlvbi52YWx1ZSk7IH1cclxuICAgIHByb3RlY3RlZCBzZXRrb1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmtvVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGRhdGVDb21tZW50KG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29tbWVudCA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldE5vKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUluZGV4ID4gLTEgPyB0aGlzLnF1ZXN0aW9uLnZpc2libGVJbmRleCArIDEgKyBcIi4gXCIgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGtvUXVlc3Rpb25BZnRlclJlbmRlcihlbGVtZW50cywgY29uKSB7XHJcbiAgICAgICAgdmFyIGVsID0gU3VydmV5RWxlbWVudC5HZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzKTtcclxuICAgICAgICB2YXIgdEVsID0gZWxlbWVudHNbMF07XHJcbiAgICAgICAgaWYgKHRFbC5ub2RlTmFtZSA9PSBcIiN0ZXh0XCIpIHRFbC5kYXRhID0gXCJcIjtcclxuICAgICAgICB0RWwgPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAodEVsLm5vZGVOYW1lID09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xyXG4gICAgICAgIGlmIChlbCAmJiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldCkgdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbiwgZWwpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb24udHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSAnLi9zdXJ2ZXlTdHJpbmdzJztcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpICB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEVycm9yXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRXhjZWVkU2l6ZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xyXG4gICAgcHJpdmF0ZSBtYXhTaXplOiBudW1iZXI7XHJcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplOiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVtcImZvcm1hdFwiXSh0aGlzLmdldFRleHRTaXplKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcclxuICAgICAgICB2YXIgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICAgICAgdmFyIGZpeGVkID0gWzAsIDAsIDIsIDMsIDNdO1xyXG4gICAgICAgIGlmICh0aGlzLm1heFNpemUgPT0gMCkgcmV0dXJuICcwIEJ5dGUnO1xyXG4gICAgICAgIHZhciBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyh0aGlzLm1heFNpemUpIC8gTWF0aC5sb2coMTAyNCkpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMubWF4U2l6ZSAvIE1hdGgucG93KDEwMjQsIGkpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKGZpeGVkW2ldKSArICcgJyArIHNpemVzW2ldO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lcnJvci50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSAnLi9qc29ub2JqZWN0JztcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gJy4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvciwgU3VydmV5RWxlbWVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0Fuc3dlclJlcXVpcmVkRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7U3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lcn0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbiBleHRlbmRzIFF1ZXN0aW9uQmFzZSBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciB7XHJcbiAgICBwcml2YXRlIGxvY1RpdGxlVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NDb21tZW50VGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbkNvbW1lbnQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc0NvbW1lbnRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBoYXNPdGhlclZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcclxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+ID0gW107XHJcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+ID0gbmV3IEFycmF5PFN1cnZleVZhbGlkYXRvcj4oKTtcclxuICAgIHZhbHVlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29tbWVudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGVycm9yc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHRpdGxlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NDb21tZW50VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuaWQgKyBcImlcIjsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyBcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5sb2NUaXRsZS50ZXh0O1xyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLm5hbWU7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZS50ZXh0ID0gbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy50aXRsZUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTsgfSBcclxuICAgIHB1YmxpYyBnZXQgbG9jQ29tbWVudFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21tZW50VGV4dFZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHsgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5wcm9jZXNzVGV4dCh0aGlzLnRpdGxlKSA6IHRoaXMudGl0bGU7IH1cclxuICAgIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGV4dFByZVByb2Nlc3Nvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vbkhhc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5jYW5Qcm9jZXNzZWRUZXh0VmFsdWVzKG5hbWUudG9Mb3dlckNhc2UoKSk7IH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzKHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMucmVxdWlyZWRUZXh0O1xyXG4gICAgICAgIGlmIChyZXF1aXJlVGV4dCkgcmVxdWlyZVRleHQgKz0gXCIgXCI7XHJcbiAgICAgICAgdmFyIG5vID0gdGhpcy5ubztcclxuICAgICAgICBpZiAobm8pIG5vICs9IFwiLiBcIjtcclxuICAgICAgICByZXR1cm4gbm8gKyByZXF1aXJlVGV4dCArIHRoaXMucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AodGhpcy5pZCk7XHJcbiAgICAgICAgdmFyIGlkID0gIW9uRXJyb3IgPyB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKSA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XHJcbiAgICAgICAgaWYgKFN1cnZleUVsZW1lbnQuRm9jdXNFbGVtZW50KGlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmZvY3VzQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRJZDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY2FuUHJvY2Vzc2VkVGV4dFZhbHVlcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbmFtZSA9PSBcIm5vXCIgfHwgbmFtZSA9PSBcInRpdGxlXCIgfHwgbmFtZSA9PSBcInJlcXVpcmVcIjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAobmFtZSA9PSBcIm5vXCIpIHJldHVybiB0aGlzLm5vO1xyXG4gICAgICAgIGlmIChuYW1lID09IFwidGl0bGVcIikgcmV0dXJuIHRoaXMucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJyZXF1aXJlXCIpIHJldHVybiB0aGlzLnJlcXVpcmVkVGV4dDtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXF1aXJlZCA9PSB2YWwpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUmVxdWlyZWRWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnRpdGxlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzQ29tbWVudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGhhc0NvbW1lbnQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRDb21tZW50KCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhc0NvbW1lbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb21tZW50KSB0aGlzLmhhc090aGVyID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbW1lbnRUZXh0KCk6IHN0cmluZyB7IFxyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmxvY0NvbW1lbnRUZXh0LnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY29tbWVudFRleHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jQ29tbWVudFRleHQudGV4dCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzT3RoZXJWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBoYXNPdGhlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydE90aGVyKCkgfHwgdGhpcy5oYXNPdGhlciA9PSB2YWwpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhc090aGVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzT3RoZXIpIHRoaXMuaGFzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzT3RoZXJDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkgeyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLnJlYWRPbmx5IHx8ICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlKTt9XHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5yZWFkT25seVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMucmVhZE9ubHkgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlYWRPbmx5VmFsdWUgPSB2YWx1ZTsgXHJcbiAgICAgICAgdGhpcy5yZWFkT25seUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZWFkT25seUNoYW5nZWQoKSB7IFxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBubygpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGVJbmRleCA8IDApIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gMTtcclxuICAgICAgICB2YXIgaXNOdW1lcmljID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc3RyID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHRoaXMuc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleDtcclxuICAgICAgICAgICAgaWYgKHBhcnNlSW50KHN0cikpIHN0YXJ0SW5kZXggPSBwYXJzZUludChzdHIpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChzdHIubGVuZ3RoID09IDEpIGlzTnVtZXJpYyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOdW1lcmljKSByZXR1cm4gKHRoaXMudmlzaWJsZUluZGV4ICsgc3RhcnRJbmRleCkudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdCgwKSArIHRoaXMudmlzaWJsZUluZGV4KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblNldERhdGEoKSB7XHJcbiAgICAgICAgc3VwZXIub25TZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZyb21EYXRhKHRoaXMuZ2V0VmFsdWVDb3JlKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB0aGlzLmlzdmFsdWVDaGFuZ2VkQ2FsbGJhY2tGaXJpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29tbWVudCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDb21tZW50KCk7IH1cclxuICAgIHB1YmxpYyBzZXQgY29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCA9PSBuZXdWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRDb21tZW50KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgIT0gbnVsbCA/IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMubmFtZSkgOiB0aGlzLnF1ZXN0aW9uQ29tbWVudDsgfVxyXG4gICAgcHJvdGVjdGVkIHNldENvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmFsdWUgPT0gbnVsbDsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ZvckVycm9ycyhmaXJlQ2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgIT0gbnVsbCAmJiB0aGlzLmlzUmVxdWlyZWQgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiOyB9XHJcbiAgICBwdWJsaWMgYWRkRXJyb3IoZXJyb3I6IFN1cnZleUVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja0ZvckVycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgZXJyb3JMZW5ndGggPSB0aGlzLmVycm9ycyA/IHRoaXMuZXJyb3JzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tGb3JFcnJvcnModGhpcy5lcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPT0gMCAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMucnVuVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLmVycm9ycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLnN1cnZleS52YWxpZGF0ZVF1ZXN0aW9uKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayAmJiAoZXJyb3JMZW5ndGggIT0gdGhpcy5lcnJvcnMubGVuZ3RoIHx8IGVycm9yTGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVxdWlyZWRFcnJvcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc1JlcXVpcmVkRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmlzRW1wdHkoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBydW5WYWxpZGF0b3JzKCk6IFN1cnZleUVycm9yIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJ1bm5lcigpLnJ1bih0aGlzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5KSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZVRvRGF0YShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlQ29yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhICE9IG51bGwgPyB0aGlzLmRhdGEuZ2V0VmFsdWUodGhpcy5uYW1lKSA6IHRoaXMucXVlc3Rpb25WYWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKHRoaXMubmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHsgcmV0dXJuIHZhbDsgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHsgcmV0dXJuIHZhbDsgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KHRoaXMubmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy9JUXVlc3Rpb25cclxuICAgIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lWYWxpZGF0b3JPd25lclxyXG4gICAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIG51bGw7IH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicXVlc3Rpb25cIiwgW3sgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXHJcbiAgICB7IG5hbWU6IFwiY29tbWVudFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIgfSxcclxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsIFwicmVhZE9ubHk6Ym9vbGVhblwiLCB7IG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCJ9XSwgbnVsbCwgXCJxdWVzdGlvbmJhc2VcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uLnRzIiwiaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgU2VwYXJhdG9yID0gJ3wnO1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVBcnJheShsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICB2YXIgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0dXBBcnJheShpdGVtcywgbG9jT3duZXIpO1xyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0dXBBcnJheShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyKSB7XHJcbiAgICAgICAgaXRlbXMucHVzaCA9IGZ1bmN0aW9uKHZhbHVlKTogbnVtYmVyIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaXRlbXMuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IEl0ZW1WYWx1ZVtdKTogSXRlbVZhbHVlW10ge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IGxvY093bmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsdWVzOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgaXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgaXRlbS5zZXREYXRhKHZhbHVlKTtcclxuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmhhc1RleHQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgdmFsdWU6IGl0ZW0udmFsdWUsIHRleHQ6IGl0ZW0ubG9jVGV4dC5nZXRKc29uKCkgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRJdGVtQnlWYWx1ZShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsOiBhbnkpOiBJdGVtVmFsdWUge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtc1tpXS52YWx1ZSA9PSB2YWwpIHJldHVybiBpdGVtc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpdGVtVmFsdWVQcm9wID0gWyBcInRleHRcIiwgXCJ2YWx1ZVwiLCBcImhhc1RleHRcIiwgXCJsb2NPd25lclwiLCBcImxvY1RleHRcIl07XHJcbiAgICBwcml2YXRlIGl0ZW1WYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBsb2NUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IodmFsdWU6IGFueSwgdGV4dDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMubG9jVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKG51bGwpO1xyXG4gICAgICAgIGlmKHRleHQpIHRoaXMubG9jVGV4dC50ZXh0ID0gdGV4dDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJpdGVtdmFsdWVcIjsgfVxyXG4gICAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGV4dFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY093bmVyKCkgOiBJTG9jYWxpemFibGVPd25lciB7IHJldHVybiB0aGlzLmxvY1RleHQub3duZXI7IH1cclxuICAgIHB1YmxpYyBzZXQgbG9jT3duZXIodmFsdWU6IElMb2NhbGl6YWJsZU93bmVyKSB7IHRoaXMubG9jVGV4dC5vd25lciA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7IHJldHVybiB0aGlzLml0ZW1WYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuaXRlbVZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHN0cjogc3RyaW5nID0gdGhpcy5pdGVtVmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICB2YXIgaW5kZXggPSBzdHIuaW5kZXhPZihJdGVtVmFsdWUuU2VwYXJhdG9yKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1WYWx1ZSA9IHN0ci5zbGljZSgwLCBpbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHN0ci5zbGljZShpbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVGV4dCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubG9jVGV4dC50ZXh0ID8gdHJ1ZSA6IGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNUZXh0KSByZXR1cm4gdGhpcy5sb2NUZXh0LnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHJldHVybiB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHRleHQobmV3VGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NUZXh0LnRleHQgPSBuZXdUZXh0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHZhbHVlLnZhbHVlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT2JqSXRlbVZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUuaXRlbVZhbHVlID0gdmFsdWUuaXRlbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NUZXh0LnNldEpzb24odmFsdWUubG9jVGV4dC5nZXRKc29uKCkpO1xyXG4gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gSXRlbVZhbHVlLml0ZW1WYWx1ZVByb3A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5QXR0cmlidXRlcyh2YWx1ZSwgZXhjZXB0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSAgaXNPYmpJdGVtVmFsdWUob2JqOiBhbnkpIHsgcmV0dXJuIHR5cGVvZiAob2JqLmdldFR5cGUpICE9PSAndW5kZWZpbmVkJyAmJiBvYmouZ2V0VHlwZSgpID09ICdpdGVtdmFsdWUnfVxyXG4gICAgcHJpdmF0ZSBjb3B5QXR0cmlidXRlcyhzcmM6IGFueSwgZXhjZXB0b25zOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoKHR5cGVvZiBzcmNba2V5XSA9PSAnZnVuY3Rpb24nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChleGNlcHRvbnMgJiYgZXhjZXB0b25zLmluZGV4T2Yoa2V5KSA+IC0xKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYoa2V5ID09IFwidGV4dFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY1RleHQuc2V0SnNvbihzcmNba2V5XSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBzcmNba2V5XTsgICAgXHJcbiAgICAgICAgICAgIH0gIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaXRlbXZhbHVlLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25JbXBsZW1lbnRvcn0gZnJvbSBcIi4va29xdWVzdGlvblwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2UsIFF1ZXN0aW9uQ2hlY2tib3hCYXNlfSBmcm9tIFwiLi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uU2VsZWN0QmFzZUltcGxlbWVudG9yIGV4dGVuZHMgUXVlc3Rpb25JbXBsZW1lbnRvcntcclxuICAgIGtvT3RoZXJWaXNpYmxlOiBhbnk7IGtvVmlzaWJsZUNob2ljZXM6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xyXG4gICAgICAgIHN1cGVyKHF1ZXN0aW9uKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMua29PdGhlclZpc2libGUgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHNlbGYua29WYWx1ZSgpOyByZXR1cm4gc2VsZi5pc090aGVyU2VsZWN0ZWQ7IH0pO1xyXG4gICAgICAgIHRoaXMua29WaXNpYmxlQ2hvaWNlcyA9IGtvLm9ic2VydmFibGVBcnJheSgoPFF1ZXN0aW9uQ2hlY2tib3hCYXNlPnNlbGYucXVlc3Rpb24pLnZpc2libGVDaG9pY2VzKTtcclxuICAgICAgICAoPFF1ZXN0aW9uQ2hlY2tib3hCYXNlPnF1ZXN0aW9uKS5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmtvVmlzaWJsZUNob2ljZXMoKDxRdWVzdGlvbkNoZWNrYm94QmFzZT5zZWxmLnF1ZXN0aW9uKS52aXNpYmxlQ2hvaWNlcyk7IH07XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbltcImtvT3RoZXJWaXNpYmxlXCJdID0gdGhpcy5rb090aGVyVmlzaWJsZTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29WaXNpYmxlQ2hvaWNlc1wiXSA9IHRoaXMua29WaXNpYmxlQ2hvaWNlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgaXNPdGhlclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoPFF1ZXN0aW9uU2VsZWN0QmFzZT50aGlzLnF1ZXN0aW9uKS5pc090aGVyU2VsZWN0ZWQ7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlSW1wbGVtZW50b3IgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2VJbXBsZW1lbnRvciB7XHJcbiAgICBrb1dpZHRoOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbjogUXVlc3Rpb24pIHtcclxuICAgICAgICBzdXBlcihxdWVzdGlvbik7XHJcbiAgICAgICAgdGhpcy5rb1dpZHRoID0ga28ub2JzZXJ2YWJsZSh0aGlzLmNvbFdpZHRoKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29XaWR0aFwiXSA9IHRoaXMua29XaWR0aDtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29BZnRlclJlbmRlclwiXSA9IHRoaXMua29BZnRlclJlbmRlcjtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgKDxRdWVzdGlvbkNoZWNrYm94QmFzZT50aGlzLnF1ZXN0aW9uKS5jb2xDb3VudENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkNvbENvdW50Q2hhbmdlZCgpOyB9O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ29sQ291bnRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb1dpZHRoXCJdID0ga28ub2JzZXJ2YWJsZSh0aGlzLmNvbFdpZHRoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgY29sV2lkdGgoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgY29sQ291bnQgPSAoPFF1ZXN0aW9uQ2hlY2tib3hCYXNlPnRoaXMucXVlc3Rpb24pLmNvbENvdW50O1xyXG4gICAgICAgIHJldHVybiBjb2xDb3VudCA+IDAgPyAoMTAwIC8gY29sQ291bnQpICsgJyUnIDogXCJcIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUga29BZnRlclJlbmRlcihlbCwgY29uKSB7XHJcbiAgICAgICAgdmFyIHRFbCA9IGVsWzBdO1xyXG4gICAgICAgIGlmICh0RWwubm9kZU5hbWUgPT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XHJcbiAgICAgICAgdEVsID0gZWxbZWwubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKHRFbC5ub2RlTmFtZSA9PSBcIiN0ZXh0XCIpIHRFbC5kYXRhID0gXCJcIjtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX2Jhc2VzZWxlY3QudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7Q2hvaWNlc1Jlc3RmdWxsfSBmcm9tIFwiLi9jaG9pY2VzUmVzdGZ1bGxcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlbGVjdEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwcml2YXRlIHZpc2libGVDaG9pY2VzQ2FjaGU6IEFycmF5PEl0ZW1WYWx1ZT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb21tZW50VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgb3RoZXJJdGVtVmFsdWU6IEl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJvdGhlclwiLCBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKSk7XHJcbiAgICBwcml2YXRlIGxvY090aGVyVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jT3RoZXJFcnJvclRleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVkVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgY2hvaWNlc0Zyb21Vcmw6IEFycmF5PEl0ZW1WYWx1ZT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjYWNoZWRWYWx1ZUZvclVybFJlcXVlc3Rpb246IGFueSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZXM6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwdWJsaWMgY2hvaWNlc0J5VXJsOiBDaG9pY2VzUmVzdGZ1bGw7XHJcbiAgICBwdWJsaWMgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzT3JkZXJWYWx1ZTogc3RyaW5nID0gXCJub25lXCI7XHJcbiAgICBjaG9pY2VzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzVmFsdWVzID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsID0gdGhpcy5jcmVhdGVSZXN0ZnVsbCgpO1xyXG4gICAgICAgIHRoaXMubG9jT3RoZXJUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPdGhlckVycm9yVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybC5nZXRSZXN1bHRDYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtczogQXJyYXk8SXRlbVZhbHVlPikgeyBzZWxmLm9uTG9hZENob2ljZXNGcm9tVXJsKGl0ZW1zKSB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvdGhlckl0ZW0oKTogSXRlbVZhbHVlIHtcclxuICAgICAgICB0aGlzLm90aGVySXRlbVZhbHVlLnRleHQgPSB0aGlzLm90aGVyVGV4dCA/IHRoaXMub3RoZXJUZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc090aGVyU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSA/IHRoaXMuZ2V0SGFzT3RoZXIodGhpcy52YWx1ZSkgOiB0aGlzLmdldEhhc090aGVyKHRoaXMuY2FjaGVkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEhhc090aGVyKHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSZXN0ZnVsbCgpOiBDaG9pY2VzUmVzdGZ1bGwgeyByZXR1cm4gbmV3IENob2ljZXNSZXN0ZnVsbCgpOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q29tbWVudCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiBzdXBlci5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1NldHRpbmdDb21tZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgc2V0Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSlcclxuICAgICAgICAgICAgc3VwZXIuc2V0Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NldHRpbmdDb21tZW50ICYmIG5ld1ZhbHVlICE9IHRoaXMuY29tbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50VmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3RoZXJTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWVJbkRhdGEodGhpcy5jYWNoZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbiA9IG5ld1ZhbHVlOyAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiBzdXBlci52YWx1ZUZyb21EYXRhKHZhbCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZSA9IHRoaXMudmFsdWVGcm9tRGF0YUNvcmUodmFsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRWYWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHN1cGVyLnZhbHVlVG9EYXRhKHZhbCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZSA9IHZhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVRvRGF0YUNvcmUodmFsKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwpKSByZXR1cm4gdmFsO1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHJldHVybiB2YWw7XHJcbiAgICAgICAgdGhpcy5jb21tZW50ID0gdmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm90aGVySXRlbS52YWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUgJiYgdGhpcy5nZXRDb21tZW50KCkpIHtcclxuICAgICAgICAgICAgdmFsID0gdGhpcy5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzVW5rbm93blZhbHVlKHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmFjdGl2ZUNob2ljZXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNbaV0udmFsdWUgPT0gdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNob2ljZXNWYWx1ZXM7IH1cclxuICAgIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jaG9pY2VzVmFsdWVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2hvaWNlc09yZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNob2ljZXNPcmRlclZhbHVlOyB9XHJcbiAgICBzZXQgY2hvaWNlc09yZGVyKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT0gdGhpcy5jaG9pY2VzT3JkZXJWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc09yZGVyVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG90aGVyVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlclRleHQudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBvdGhlclRleHQodmFsdWU6IHN0cmluZykgeyBcclxuICAgICAgICB0aGlzLmxvY090aGVyVGV4dC50ZXh0ID0gdmFsdWU7IFxyXG4gICAgICAgIHRoaXMudXBkYXRlT3RoZXJJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG90aGVyRXJyb3JUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY090aGVyRXJyb3JUZXh0LnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgb3RoZXJFcnJvclRleHQodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY090aGVyRXJyb3JUZXh0LnRleHQgPSB2YWx1ZTsgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jT3RoZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJUZXh0VmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0IGxvY090aGVyRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJFcnJvclRleHRWYWx1ZTsgfSBcclxuICAgIFxyXG4gICAgZ2V0IHZpc2libGVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNPdGhlciAmJiB0aGlzLmNob2ljZXNPcmRlciA9PSBcIm5vbmVcIikgcmV0dXJuIHRoaXMuYWN0aXZlQ2hvaWNlcztcclxuICAgICAgICBpZighdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZSA9IHRoaXMuc29ydFZpc2libGVDaG9pY2VzKHRoaXMuYWN0aXZlQ2hvaWNlcy5zbGljZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3RoZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZS5wdXNoKHRoaXMub3RoZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgYWN0aXZlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc0Zyb21VcmwgPyB0aGlzLmNob2ljZXNGcm9tVXJsIDogdGhpcy5jaG9pY2VzOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCB0aGlzLmNvbW1lbnQpIHJldHVybjtcclxuICAgICAgICB2YXIgdGV4dCA9IHRoaXMub3RoZXJFcnJvclRleHQ7XHJcbiAgICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgICAgIHRleHQgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJSZXF1aXJlZEVycm9yXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3IodGV4dCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uTG9jYWxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBzdXBlci5vbkxvY2FsZUNoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU90aGVySXRlbSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVPdGhlckl0ZW0oKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLm90aGVySXRlbTsgLy8gc2V0IHRoZSBjb3JyZWN0IHRleHRcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNob2ljZXNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgeyByZXR1cm4gdGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCAmJiAodGhpcy5zdXJ2ZXkgIT0gbnVsbCA/IHRoaXMuc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IDogdHJ1ZSk7IH1cclxuICAgIG9uU3VydmV5TG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwpIHRoaXMuY2hvaWNlc0J5VXJsLnJ1bigpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkxvYWRDaG9pY2VzRnJvbVVybChhcnJheTogQXJyYXk8SXRlbVZhbHVlPikge1xyXG4gICAgICAgIHZhciBlcnJvckNvdW50ID0gdGhpcy5lcnJvcnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvaWNlc0J5VXJsICYmIHRoaXMuY2hvaWNlc0J5VXJsLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2godGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3JDb3VudCA+IDAgfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBuZXdDaG9pY2VzID0gbnVsbDtcclxuICAgICAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBuZXdDaG9pY2VzID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcclxuICAgICAgICAgICAgSXRlbVZhbHVlLnNldERhdGEobmV3Q2hvaWNlcywgYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNob2ljZXNGcm9tVXJsID0gbmV3Q2hvaWNlcztcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc29ydFZpc2libGVDaG9pY2VzKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAob3JkZXIgPT0gXCJhc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAxKTtcclxuICAgICAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgLTEpO1xyXG4gICAgICAgIGlmIChvcmRlciA9PSBcInJhbmRvbVwiKSByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzb3J0QXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4sIG11bHQ6IG51bWJlcik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgIGlmIChhLnRleHQgPCBiLnRleHQpIHJldHVybiAtMSAqIG11bHQ7XHJcbiAgICAgICAgICAgIGlmIChhLnRleHQgPiBiLnRleHQpIHJldHVybiAxICogbXVsdDtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJhbmRvbWl6ZUFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgYXJyYXlbaV0gPSBhcnJheVtqXTtcclxuICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9XHJcbiAgICBjbGVhclVudXNlZFZhbHVlcygpIHtcclxuICAgICAgICBzdXBlci5jbGVhclVudXNlZFZhbHVlcygpO1xyXG4gICAgICAgIGlmKCF0aGlzLmlzT3RoZXJTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIGV4dGVuZHMgUXVlc3Rpb25TZWxlY3RCYXNlIHtcclxuICAgIHByaXZhdGUgY29sQ291bnRWYWx1ZTogbnVtYmVyID0gMTtcclxuICAgIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gNCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY29sQ291bnRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzZWxlY3RiYXNlXCIsIFtcImhhc0NvbW1lbnQ6Ym9vbGVhblwiLCBcImhhc090aGVyOmJvb2xlYW5cIixcclxuICAgIHsgbmFtZTogXCJjaG9pY2VzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmouY2hvaWNlcyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmouY2hvaWNlcyA9IHZhbHVlOyB9fSxcclxuICAgIHsgbmFtZTogXCJjaG9pY2VzT3JkZXJcIiwgZGVmYXVsdDogXCJub25lXCIsIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJhc2NcIiwgXCJkZXNjXCIsIFwicmFuZG9tXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwiY2hvaWNlc0J5VXJsOnJlc3RmdWxsXCIsIGNsYXNzTmFtZTogXCJDaG9pY2VzUmVzdGZ1bGxcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBvYmouY2hvaWNlc0J5VXJsLmlzRW1wdHkgPyBudWxsIDogb2JqLmNob2ljZXNCeVVybDsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzQnlVcmwuc2V0RGF0YSh2YWx1ZSk7IH0gfSxcclxuICAgIHsgbmFtZTogXCJvdGhlclRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY090aGVyVGV4dFwiIH0sIHtuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlckVycm9yVGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWV9XSwgbnVsbCwgXCJxdWVzdGlvblwiKTtcclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjaGVja2JveGJhc2VcIiwgW3sgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMSwgY2hvaWNlczogWzAsIDEsIDIsIDMsIDRdIH1dLCBudWxsLCBcInNlbGVjdGJhc2VcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2Jhc2VzZWxlY3QudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtCYXNlLCBJU3VydmV5RGF0YSwgSGFzaFRhYmxlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkRyb3Bkb3duTW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9jaGVja2JveFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25UZXh0TW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5pbXBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxsXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgb25Sb3dDaGFuZ2VkKGNlbGw6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBuZXdSb3dWYWx1ZTogYW55KTtcclxuICAgIGNvbHVtbnM6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPjtcclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbjtcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93bkNvbHVtbiBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc090aGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWluV2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY2VsbFR5cGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG4gICAgcHVibGljIGlucHV0VHlwZTogc3RyaW5nID0gXCJ0ZXh0XCI7XHJcbiAgICBwdWJsaWMgY2hvaWNlc09yZGVyOiBzdHJpbmcgPSBcIm5vbmVcIjtcclxuICAgIHB1YmxpYyBjaG9pY2VzQnlVcmw6IENob2ljZXNSZXN0ZnVsbDtcclxuICAgIHB1YmxpYyBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybCA9IG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCkgeyByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiIH1cclxuICAgIFxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbih2YWx1ZTogc3RyaW5nKXsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAtMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlID0gZGF0YS5jcmVhdGVRdWVzdGlvbih0aGlzLnJvdywgdGhpcy5jb2x1bW4pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZS5zZXREYXRhKHJvdyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5xdWVzdGlvbi52YWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RGF0YSwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaWRDb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWQoKTogc3RyaW5nIHsgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrOyB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YTtcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSByb3dDb21tZW50czogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaWRWYWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5nZXRJZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRDZWxscygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm93VmFsdWVzID0ge307XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1ZhbHVlc1trZXldID0gdmFsdWVba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jZWxsc1tpXS5xdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLmdldFZhbHVlKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93VmFsdWVzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiKSBuZXdWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXNbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yb3dWYWx1ZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQodGhpcywgdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NvbW1lbnRzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDb21tZW50c1tuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCkge1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxuICAgIHByaXZhdGUgYnVpbGRDZWxscygpIHtcclxuICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZGF0YS5jb2x1bW5zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGV4dGVuZHMgUXVlc3Rpb24gaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgIGFkZERlZmF1bHRDb2x1bW5zKG1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSkge1xyXG4gICAgICAgIHZhciBjb2xOYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkgKyspXHJcbiAgICAgICAgICAgIG1hdHJpeC5hZGRDb2x1bW4oY29sTmFtZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNlbGxUeXBlVmFsdWU6IHN0cmluZyA9IFwiZHJvcGRvd25cIjtcclxuICAgIHByaXZhdGUgY29sdW1uQ29sQ291bnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb2x1bW5NaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29sdW1uc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHB1YmxpYyB1cGRhdGVDZWxsc0NhbGxiYWs6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29sdW1uc01ldGhvZHMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbHVtbnModmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPikge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vdmVycmlkZUNvbHVtbnNNZXRob2RzKCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVDb2x1bW5zTWV0aG9kcygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlLmxvY093bmVyID0gc2VsZjtcclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZS5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTWF0cml4RHJvcGRvd25Db2x1bW5bXSk6IE1hdHJpeERyb3Bkb3duQ29sdW1uW10ge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IHNlbGY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY2VsbFR5cGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjZWxsVHlwZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2VsbFR5cGUgPT0gbmV3VmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNlbGxUeXBlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnVwZGF0ZUNlbGxzQ2FsbGJhayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbHVtbkNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sdW1uQ29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Db2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy51cGRhdGVDZWxsc0NhbGxiYWspO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENvbHVtblRpdGxlKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5pc1JlcXVpcmVkICYmIHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dDtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVUZXh0KSByZXF1aXJlVGV4dCArPSBcIiBcIjtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVxdWlyZVRleHQgKyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5taW5XaWR0aCA/IGNvbHVtbi5taW5XaWR0aCA6IHRoaXMuY29sdW1uTWluV2lkdGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNob2ljZXNWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jaG9pY2VzVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIik7IH1cclxuICAgIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24obmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xyXG4gICAgICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlLnB1c2goY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3cobmFtZTogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoY3VyVmFsdWU6IGFueSk6IGFueSB7IHJldHVybiAhY3VyVmFsdWUgPyB7fSA6IGN1clZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgcXVlc3Rpb25WYWx1ZTogYW55LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7fTtcclxuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZighKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xyXG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgICAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiYgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBlcnJvc0luQ29sdW1ucyA9IHRoaXMuaGFzRXJyb3JJbkNvbHVtbnMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJbkNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Db2x1bW5zKGZpcmVDYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBjZWxscyAmJiBjZWxsc1tjb2xJbmRleF0gJiYgY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uICYmIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKSB8fCByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0Q2VsbFF1ZXN0aW9uKHRydWUpO1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uLmN1cnJlbnRFcnJvckNvdW50ID4gMCkgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RHJvcGRvd25EYXRhXHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uQ29yZShyb3csIGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24ubmFtZSA9IGNvbHVtbi5uYW1lO1xyXG4gICAgICAgIHF1ZXN0aW9uLmlzUmVxdWlyZWQgPSBjb2x1bW4uaXNSZXF1aXJlZDtcclxuICAgICAgICBxdWVzdGlvbi5oYXNPdGhlciA9IGNvbHVtbi5oYXNPdGhlcjtcclxuICAgICAgICBxdWVzdGlvbi5yZWFkT25seSA9IHRoaXMucmVhZE9ubHk7XHJcbiAgICAgICAgcXVlc3Rpb24uc2V0RGF0YSh0aGlzLnN1cnZleSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5oYXNPdGhlcikge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24gaW5zdGFuY2VvZiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcclxuICAgICAgICAgICAgICAgICg8UXVlc3Rpb25TZWxlY3RCYXNlPnF1ZXN0aW9uKS5zdG9yZU90aGVyc0FzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgY2VsbFR5cGUgPSBjb2x1bW4uY2VsbFR5cGUgPT0gXCJkZWZhdWx0XCIgPyB0aGlzLmNlbGxUeXBlIDogY29sdW1uLmNlbGxUeXBlO1xyXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRRdWVzdGlvbk5hbWUocm93LCBjb2x1bW4pO1xyXG4gICAgICAgIGlmIChjZWxsVHlwZSA9PSBcImNoZWNrYm94XCIpIHJldHVybiB0aGlzLmNyZWF0ZUNoZWNrYm94KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwicmFkaW9ncm91cFwiKSByZXR1cm4gdGhpcy5jcmVhdGVSYWRpb2dyb3VwKG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwidGV4dFwiKSByZXR1cm4gdGhpcy5jcmVhdGVUZXh0KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwiY29tbWVudFwiKSByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRHJvcGRvd24obmFtZSwgY29sdW1uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRRdWVzdGlvbk5hbWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7IHJldHVybiByb3cucm93TmFtZSArIFwiX1wiICsgY29sdW1uLm5hbWU7IH1cclxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBBcnJheTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLmNob2ljZXMgJiYgY29sdW1uLmNob2ljZXMubGVuZ3RoID4gMCA/IGNvbHVtbi5jaG9pY2VzIDogdGhpcy5jaG9pY2VzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW4ub3B0aW9uc0NhcHRpb24gPyBjb2x1bW4ub3B0aW9uc0NhcHRpb24gOiB0aGlzLm9wdGlvbnNDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURyb3Bkb3duKG5hbWU6IHN0cmluZywgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxLCBjb2x1bW4pO1xyXG4gICAgICAgIHEub3B0aW9uc0NhcHRpb24gPSB0aGlzLmdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2hlY2tib3gobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkNoZWNrYm94TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJjaGVja2JveFwiLCBuYW1lKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdEJhc2VQcm9wZXJ0aWVzKHEsIGNvbHVtbik7XHJcbiAgICAgICAgcS5jb2xDb3VudCA9IGNvbHVtbi5jb2xDb3VudCA+IC0gMSA/IGNvbHVtbi5jb2xDb3VudCA6IHRoaXMuY29sdW1uQ29sQ291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUmFkaW9ncm91cChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0QmFzZVByb3BlcnRpZXMocSwgY29sdW1uKTtcclxuICAgICAgICBxLmNvbENvdW50ID0gY29sdW1uLmNvbENvdW50ID4gLSAxID8gY29sdW1uLmNvbENvdW50IDogdGhpcy5jb2x1bW5Db2xDb3VudDtcclxuICAgICAgICByZXR1cm4gcTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc09yZGVyID0gY29sdW1uLmNob2ljZXNPcmRlcjtcclxuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5nZXRDb2x1bW5DaG9pY2VzKGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc0J5VXJsLnNldERhdGEoY29sdW1uLmNob2ljZXNCeVVybCk7XHJcbiAgICAgICAgaWYoIXF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblRleHRNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25UZXh0TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJ0ZXh0XCIsIG5hbWUpO1xyXG4gICAgICAgIHEuaW5wdXRUeXBlID0gY29sdW1uLmlucHV0VHlwZTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbW1lbnQobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25Db21tZW50TW9kZWwge1xyXG4gICAgICAgIHZhciBxID0gPFF1ZXN0aW9uQ29tbWVudE1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiY29tbWVudFwiLCBuYW1lKTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNlbGxRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIHJldHVybiA8UXVlc3Rpb24+UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUobmV3VmFsdWU6IGFueSwgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XHJcbiAgICAgICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25Sb3dDaGFuZ2VkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIG5ld1Jvd1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCBuZXdWYWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSBkZWxldGUgcm93VmFsdWVba2V5XTtcclxuICAgICAgICBpZiAobmV3Um93VmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuZXdSb3dWYWx1ZSkgcm93VmFsdWVba2V5XSA9IG5ld1Jvd1ZhbHVlW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKG5ld1ZhbHVlLCByb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIiwgW1wibmFtZVwiLCB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNob2ljZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICAgICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifSAsIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sQ291bnRcIiwgZGVmYXVsdDogLTEsIGNob2ljZXM6IFstMSwgMCwgMSwgMiwgMywgNF0gfSwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgXCJoYXNPdGhlcjpib29sZWFuXCIsIFwibWluV2lkdGhcIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc09yZGVyXCIsIGRlZmF1bHQ6IFwibm9uZVwiLCBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIiwgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIG9iai5jaG9pY2VzQnlVcmwuaXNFbXB0eSA/IG51bGwgOiBvYmouY2hvaWNlc0J5VXJsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTsgfSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJpbnB1dFR5cGVcIiwgZGVmYXVsdDogXCJ0ZXh0XCIsIGNob2ljZXM6IFtcImNvbG9yXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIiwgXCJlbWFpbFwiLCBcIm1vbnRoXCIsIFwibnVtYmVyXCIsIFwicGFzc3dvcmRcIiwgXCJyYW5nZVwiLCBcInRlbFwiLCBcInRleHRcIiwgXCJ0aW1lXCIsIFwidXJsXCIsIFwid2Vla1wiXSB9XSxcclxuICAgICAgICBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25iYXNlXCIsIFt7IG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIiwgY2xhc3NOYW1lOiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCJ9LFxyXG4gICAgICAgIFwiaG9yaXpvbnRhbFNjcm9sbDpib29sZWFuXCIsXHJcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jaG9pY2VzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzID0gdmFsdWU7IH19LFxyXG4gICAgICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRyb3Bkb3duXCIsIGNob2ljZXM6IFtcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sdW1uQ29sQ291bnRcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDMsIDRdIH0sIFwiY29sdW1uTWluV2lkdGhcIl0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuaW1wb3J0IHtJUGFnZSwgSVF1ZXN0aW9uLCBFdmVudCwgU3VydmV5RWxlbWVudH0gZnJvbSBcIi4uL2Jhc2VcIjtcclxuaW1wb3J0IHtQYWdlfSBmcm9tIFwiLi9rb3BhZ2VcIjtcclxuaW1wb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuLi9wYWdlXCI7XHJcbmltcG9ydCB7c3VydmV5Q3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xyXG5pbXBvcnQge2tvVGVtcGxhdGUsIFN1cnZleVRlbXBsYXRlVGV4dH0gZnJvbSBcIi4vdGVtcGxhdGVUZXh0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DdXN0b21XaWRnZXQsIEN1c3RvbVdpZGdldENvbGxlY3Rpb259IGZyb20gXCIuLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcclxuXHJcbkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2Uub25DdXN0b21XaWRnZXRBZGRlZC5hZGQoKGN1c3RvbVdpZGdldCkgPT4ge1xyXG4gICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcikgcmV0dXJuO1xyXG4gICAgaWYgKCFjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSBjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlID0gXCI8ZGl2PidodG1sVGVtcGxhdGUnIGF0dHJpYnV0ZSBpcyBtaXNzZWQuPC9kaXY+XCJcclxuICAgIG5ldyBTdXJ2ZXlUZW1wbGF0ZVRleHQoKS5yZXBsYWNlVGV4dChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlLCBcIndpZGdldFwiLCBjdXN0b21XaWRnZXQubmFtZSk7XHJcbn0pO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIFN1cnZleU1vZGVsIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGNzc1R5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBzZXQgY3NzVHlwZSh2YWx1ZTogc3RyaW5nKSB7IHN1cnZleUNzcy5jdXJyZW50VHlwZSA9IHZhbHVlOyB9XHJcbiAgICBwcml2YXRlIHJlbmRlcmVkRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICAvL1RPRE8gcmVtb3ZlIGl0LCBzaW5jZSB0aGVyZSBpcyBvbkFmdGVyUmVuZGVyU3VydmV5XHJcbiAgICBwdWJsaWMgb25SZW5kZXJlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwcml2YXRlIGlzRmlyc3RSZW5kZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGtvQ3VycmVudFBhZ2U6IGFueTsga29Jc0ZpcnN0UGFnZTogYW55OyBrb0lzTGFzdFBhZ2U6IGFueTsga29Jc05hdmlnYXRpb25CdXR0b25zU2hvd2luZzogYW55OyBkdW1teU9ic2VydmFibGU6IGFueTsga29TdGF0ZTogYW55O1xyXG4gICAga29Qcm9ncmVzczogYW55OyBrb1Byb2dyZXNzVGV4dDogYW55OyBrb0FmdGVyUmVuZGVyUGFnZTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwsIHJlbmRlcmVkRWxlbWVudDogYW55ID0gbnVsbCwgY3NzOiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoanNvbk9iaik7XHJcbiAgICAgICAgaWYgKGNzcykge1xyXG4gICAgICAgICAgICB0aGlzLmNzcyA9IGNzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbmRlcmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRWxlbWVudCA9IHJlbmRlcmVkRWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBrbyA9PT0gJ3VuZGVmaW5lZCcpIHRocm93IG5ldyBFcnJvcigna25vY2tvdXRqcyBsaWJyYXJ5IGlzIG5vdCBsb2FkZWQuJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIocmVuZGVyZWRFbGVtZW50KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbkNvbXBsZXRlKCkgeyByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sIHRoaXMuY3NzLm5hdmlnYXRpb24uY29tcGxldGUpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2KCkgeyByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sIHRoaXMuY3NzLm5hdmlnYXRpb24ucHJldik7IH1cclxuICAgIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbk5leHQoKSB7IHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3ModGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbiwgdGhpcy5jc3MubmF2aWdhdGlvbi5uZXh0KTsgfVxyXG4gICAgcHJpdmF0ZSBnZXROYXZpZ2F0aW9uQ3NzKG1haW46IHN0cmluZywgYnRuOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmVzID0gXCJcIjtcclxuICAgICAgICBpZiAobWFpbikgcmVzID0gbWFpbjtcclxuICAgICAgICBpZiAoYnRuKSByZXMgKz0gJyAnICsgYnRuO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkgeyByZXR1cm4gc3VydmV5Q3NzLmdldENzcygpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgdGhpcy5jc3MpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbmRlcihlbGVtZW50OiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDdXN0b21XaWRnZXRzKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50ID0gdGhpcy5yZW5kZXJlZEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XHJcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmdldFRlbXBsYXRlKCk7XHJcbiAgICAgICAgc2VsZi5hcHBseUJpbmRpbmcoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBrb0V2ZW50QWZ0ZXJSZW5kZXIoZWxlbWVudCwgc3VydmV5KSB7XHJcbiAgICAgICAgc3VydmV5Lm9uUmVuZGVyZWQuZmlyZShzZWxmLCB7fSk7XHJcbiAgICAgICAgc3VydmV5LmFmdGVyUmVuZGVyU3VydmV5KGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXlGcm9tU2VydmljZShzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbCwgcmVuZGVyZWRFbGVtZW50OiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlbmRlcmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRWxlbWVudCA9IHJlbmRlcmVkRWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIubG9hZFN1cnZleUZyb21TZXJ2aWNlKHN1cnZleUlkKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRDb21wbGV0ZWQoKSB7XHJcbiAgICAgICAgc3VwZXIuc2V0Q29tcGxldGVkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVLb0N1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFnZShuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIG5ldyBQYWdlKG5hbWUpOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHsgcmV0dXJuIGtvVGVtcGxhdGU7IH1cclxuICAgIHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0aW5nKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmR1bW15T2JzZXJ2YWJsZSA9IGtvLm9ic2VydmFibGUoMCk7XHJcbiAgICAgICAgdGhpcy5rb0N1cnJlbnRQYWdlID0ga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkgeyBzZWxmLmR1bW15T2JzZXJ2YWJsZSgpOyByZXR1cm4gc2VsZi5jdXJyZW50UGFnZTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb0lzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID0ga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkgeyBzZWxmLmR1bW15T2JzZXJ2YWJsZSgpOyByZXR1cm4gc2VsZi5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZzsgfSk7XHJcbiAgICAgICAgdGhpcy5rb0lzRmlyc3RQYWdlID0ga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkgeyBzZWxmLmR1bW15T2JzZXJ2YWJsZSgpOyByZXR1cm4gc2VsZi5pc0ZpcnN0UGFnZTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb0lzTGFzdFBhZ2UgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHNlbGYuZHVtbXlPYnNlcnZhYmxlKCk7IHJldHVybiBzZWxmLmlzTGFzdFBhZ2U7IH0pO1xyXG4gICAgICAgIHRoaXMua29Qcm9ncmVzc1RleHQgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHNlbGYuZHVtbXlPYnNlcnZhYmxlKCk7IHJldHVybiBzZWxmLnByb2dyZXNzVGV4dDsgfSk7XHJcbiAgICAgICAgdGhpcy5rb1Byb2dyZXNzID0ga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkgeyBzZWxmLmR1bW15T2JzZXJ2YWJsZSgpOyByZXR1cm4gc2VsZi5nZXRQcm9ncmVzcygpOyB9KTtcclxuICAgICAgICB0aGlzLmtvU3RhdGUgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHNlbGYuZHVtbXlPYnNlcnZhYmxlKCk7IHJldHVybiBzZWxmLnN0YXRlOyB9KTtcclxuICAgICAgICB0aGlzLmtvQWZ0ZXJSZW5kZXJQYWdlID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBjb24pIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gU3VydmV5RWxlbWVudC5HZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzKTtcclxuICAgICAgICAgICAgaWYgKGVsKSBzZWxmLmFmdGVyUmVuZGVyUGFnZShlbCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjdXJyZW50UGFnZUNoYW5nZWQobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlS29DdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIHN1cGVyLmN1cnJlbnRQYWdlQ2hhbmdlZChuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5mb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMpIHRoaXMuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBwYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZTogSVBhZ2UsIG5ld1ZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2UsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUtvQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFwcGx5QmluZGluZygpIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZWRFbGVtZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy51cGRhdGVLb0N1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAga28uY2xlYW5Ob2RlKHRoaXMucmVuZGVyZWRFbGVtZW50KTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdFJlbmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNGaXJzdFJlbmRlciA9IGZhbHNlO1xyXG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3ModGhpcywgdGhpcy5yZW5kZXJlZEVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVLb0N1cnJlbnRQYWdlKCkge1xyXG4gICAgICAgIHRoaXMuZHVtbXlPYnNlcnZhYmxlKHRoaXMuZHVtbXlPYnNlcnZhYmxlKCkgKyAxKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlQ3VycmVudFBhZ2VRdWVzdGlvbnMoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY3VycmVudFBhZ2UgPyB0aGlzLmN1cnJlbnRQYWdlLnF1ZXN0aW9ucyA6IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAocS52aXNpYmxlKSBxW1widXBkYXRlUXVlc3Rpb25cIl0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N1cnZleScsIHtcclxuICAgIHZpZXdNb2RlbDoge1xyXG4gICAgICAgIGNyZWF0ZVZpZXdNb2RlbDogZnVuY3Rpb24ocGFyYW1zLCBjb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgIHZhciBzdXJ2ZXk6IFN1cnZleSA9IGtvLnVud3JhcChwYXJhbXMuc3VydmV5KTtcclxuICAgICAgICAgICAgc3VydmV5LnJlbmRlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zLnN1cnZleTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgdGVtcGxhdGU6IGtvVGVtcGxhdGVcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tub2Nrb3V0L2tvc3VydmV5LnRzIiwiaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcbmltcG9ydCB7Q29uZGl0aW9uc1BhcnNlcn0gZnJvbSAnLi9jb25kaXRpb25zUGFyc2VyJztcclxuaW1wb3J0IHtQcm9jZXNzVmFsdWV9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbiB7XHJcbiAgICBzdGF0aWMgb3BlcmF0b3JzVmFsdWU6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSBudWxsO1xyXG4gICAgc3RhdGljIGdldCBvcGVyYXRvcnMoKSB7XHJcbiAgICAgICAgaWYgKENvbmRpdGlvbi5vcGVyYXRvcnNWYWx1ZSAhPSBudWxsKSByZXR1cm4gQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgICAgIENvbmRpdGlvbi5vcGVyYXRvcnNWYWx1ZSA9IHtcclxuICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gIWxlZnQ7IH0sXHJcbiAgICAgICAgICAgIG5vdGVtcHR5OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuICEoIWxlZnQpOyB9LFxyXG4gICAgICAgICAgICBlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ID09IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBub3RlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ICE9IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBjb250YWluczogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ICYmIGxlZnRbXCJpbmRleE9mXCJdICYmIGxlZnQuaW5kZXhPZihyaWdodCkgPiAtMTsgfSxcclxuICAgICAgICAgICAgbm90Y29udGFpbnM6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gIWxlZnQgfHwgIWxlZnRbXCJpbmRleE9mXCJdIHx8IGxlZnQuaW5kZXhPZihyaWdodCkgPT0gLTE7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXI6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA+IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBsZXNzOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPCByaWdodDsgfSxcclxuICAgICAgICAgICAgZ3JlYXRlcm9yZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA+PSByaWdodDsgfSxcclxuICAgICAgICAgICAgbGVzc29yZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA8PSByaWdodDsgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIENvbmRpdGlvbi5vcGVyYXRvcnNWYWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3BWYWx1ZTogc3RyaW5nID0gXCJlcXVhbFwiO1xyXG4gICAgcHVibGljIGxlZnQ6IGFueTtcclxuICAgIHB1YmxpYyByaWdodDogYW55O1xyXG4gICAgcHVibGljIGdldCBvcGVyYXRvcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5vcFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IG9wZXJhdG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghQ29uZGl0aW9uLm9wZXJhdG9yc1t2YWx1ZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLm9wVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBwZXJmb3JtKGxlZnQ6IGFueSA9IG51bGwsIHJpZ2h0OiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFsZWZ0KSBsZWZ0ID0gdGhpcy5sZWZ0O1xyXG4gICAgICAgIGlmICghcmlnaHQpIHJpZ2h0ID0gdGhpcy5yaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIENvbmRpdGlvbi5vcGVyYXRvcnNbdGhpcy5vcGVyYXRvcl0odGhpcy5nZXRQdXJlVmFsdWUobGVmdCksIHRoaXMuZ2V0UHVyZVZhbHVlKHJpZ2h0KSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFB1cmVWYWx1ZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF2YWwgfHwgKHR5cGVvZiB2YWwgIT0gXCJzdHJpbmdcIikpIHJldHVybiB2YWw7XHJcbiAgICAgICAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPiAwICYmICh2YWxbMF0gPT0gXCInXCIgfHwgdmFsWzBdID09ICdcIicpKSAgdmFsID0gdmFsLnN1YnN0cigxKTtcclxuICAgICAgICB2YXIgbGVuID0gdmFsLmxlbmd0aDtcclxuICAgICAgICBpZiAobGVuID4gMCAmJiAodmFsW2xlbiAtIDFdID09IFwiJ1wiIHx8IHZhbFtsZW4gLSAxXSA9PSAnXCInKSkgIHZhbCA9IHZhbC5zdWJzdHIoMCwgbGVuIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uTm9kZSB7XHJcbiAgICBwcml2YXRlIGNvbm5lY3RpdmVWYWx1ZTogc3RyaW5nID0gXCJhbmRcIjtcclxuICAgIHB1YmxpYyBjaGlsZHJlbjogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbm5lY3RpdmUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29ubmVjdGl2ZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbm5lY3RpdmUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiJlwiIHx8IHZhbHVlID09IFwiJiZcIikgdmFsdWUgPSBcImFuZFwiO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcInxcIiB8fCB2YWx1ZSA9PSBcInx8XCIpIHZhbHVlID0gXCJvclwiO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBcImFuZFwiICYmIHZhbHVlICE9IFwib3JcIikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGl2ZVZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKSB7IHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PSAwOyB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGl2ZSA9IFwiYW5kXCI7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblJ1bm5lciB7XHJcbiAgICBwcml2YXRlIGV4cHJlc3Npb25WYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBwcm9jZXNzVmFsdWU6IFByb2Nlc3NWYWx1ZTtcclxuICAgIHByaXZhdGUgcm9vdDogQ29uZGl0aW9uTm9kZTtcclxuICAgIHByaXZhdGUgdmFsdWVzOiBIYXNoVGFibGU8YW55PjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgQ29uZGl0aW9uTm9kZSgpO1xyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzVmFsdWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb24gPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25WYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIG5ldyBDb25kaXRpb25zUGFyc2VyKCkucGFyc2UodGhpcy5leHByZXNzaW9uVmFsdWUsIHRoaXMucm9vdCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcnVuKHZhbHVlczogSGFzaFRhYmxlPGFueT4pOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ob2RlKHRoaXMucm9vdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bk5vZGUobm9kZTogQ29uZGl0aW9uTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBvbkZpcnN0RmFpbCA9IG5vZGUuY29ubmVjdGl2ZSA9PSBcImFuZFwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVzID0gdGhpcy5ydW5Ob2RlQ29uZGl0aW9uKG5vZGUuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICBpZiAoIXJlcyAmJiBvbkZpcnN0RmFpbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAocmVzICYmICFvbkZpcnN0RmFpbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvbkZpcnN0RmFpbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcnVuTm9kZUNvbmRpdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh2YWx1ZVtcImNoaWxkcmVuXCJdKSByZXR1cm4gdGhpcy5ydW5Ob2RlKHZhbHVlKTtcclxuICAgICAgICBpZiAodmFsdWVbXCJsZWZ0XCJdKSByZXR1cm4gdGhpcy5ydW5Db25kaXRpb24odmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcnVuQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGxlZnQgPSBjb25kaXRpb24ubGVmdDtcclxuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKGxlZnQpO1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9jZXNzVmFsdWUuaGFzVmFsdWUobmFtZSwgdGhpcy52YWx1ZXMpKSByZXR1cm4gY29uZGl0aW9uLm9wZXJhdG9yID09PSBcImVtcHR5XCI7XHJcbiAgICAgICAgICAgIGxlZnQgPSB0aGlzLnByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByaWdodCA9IGNvbmRpdGlvbi5yaWdodDtcclxuICAgICAgICBuYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUocmlnaHQpO1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9jZXNzVmFsdWUuaGFzVmFsdWUobmFtZSwgdGhpcy52YWx1ZXMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wcm9jZXNzVmFsdWUuZ2V0VmFsdWUobmFtZSwgdGhpcy52YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uZGl0aW9uLnBlcmZvcm0obGVmdCwgcmlnaHQpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZU5hbWUobm9kZVZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIW5vZGVWYWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlVmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAobm9kZVZhbHVlLmxlbmd0aCA8IDMgfHwgbm9kZVZhbHVlWzBdICE9ICd7JyB8fCBub2RlVmFsdWVbbm9kZVZhbHVlLmxlbmd0aCAtIDFdICE9ICd9JykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVWYWx1ZS5zdWJzdHIoMSwgbm9kZVZhbHVlLmxlbmd0aCAtIDIpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbmRpdGlvbnMudHMiLCJleHBvcnQgdmFyIHN1cnZleUNzcyA9IHtcclxuICAgIGN1cnJlbnRUeXBlOiBcIlwiLFxyXG4gICAgZ2V0Q3NzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudFR5cGUgPyB0aGlzW3RoaXMuY3VycmVudFR5cGVdIDogZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4gICAgICAgIGlmICghbG9jKSBsb2MgPSBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICAgICAgcmV0dXJuIGxvYztcclxuICAgIH0sXHJcbn07XHJcblxyXG5leHBvcnQgdmFyIGRlZmF1bHRTdGFuZGFyZENzcyA9IHtcclxuICAgIHJvb3Q6IFwic3ZfbWFpblwiLFxyXG4gICAgaGVhZGVyOiBcIlwiLFxyXG4gICAgYm9keTogXCJzdl9ib2R5XCIsXHJcbiAgICBmb290ZXI6IFwic3ZfbmF2XCIsXHJcbiAgICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLCBuYXZpZ2F0aW9uOiB7IGNvbXBsZXRlOiBcIlwiLCBwcmV2OlwiXCIsIG5leHQ6IFwiXCJ9LFxyXG4gICAgcHJvZ3Jlc3M6IFwic3ZfcHJvZ3Jlc3NcIiwgcHJvZ3Jlc3NCYXI6IFwiXCIsXHJcbiAgICBwYWdlVGl0bGU6IFwic3ZfcF90aXRsZVwiLFxyXG4gICAgcm93OiBcInN2X3Jvd1wiLFxyXG4gICAgcXVlc3Rpb246IHsgcm9vdDogXCJzdl9xXCIsIHRpdGxlOiBcInN2X3FfdGl0bGVcIiwgY29tbWVudDogXCJcIiwgaW5kZW50OiAyMCB9LFxyXG4gICAgZXJyb3I6IHsgcm9vdDogXCJzdl9xX2VyYm94XCIsIGljb246IFwiXCIsIGl0ZW06IFwiXCIgfSxcclxuXHJcbiAgICBjaGVja2JveDogeyByb290OiBcInN2X3FjYmNcIiwgaXRlbTogXCJzdl9xX2NoZWNrYm94XCIsIG90aGVyOiBcInN2X3Ffb3RoZXJcIiB9LFxyXG4gICAgY29tbWVudDogXCJcIixcclxuICAgIGRyb3Bkb3duOiB7IHJvb3Q6IFwiXCIsIGNvbnRyb2w6IFwiXCIgfSxcclxuICAgIG1hdHJpeDogeyByb290OiBcInN2X3FfbWF0cml4XCIgfSxcclxuICAgIG1hdHJpeGRyb3Bkb3duOiB7IHJvb3Q6IFwic3ZfcV9tYXRyaXhcIiB9LFxyXG4gICAgbWF0cml4ZHluYW1pYzogeyByb290OiBcInRhYmxlXCIsIGJ1dHRvbjogXCJcIiB9LFxyXG4gICAgbXVsdGlwbGV0ZXh0OiB7IHJvb3Q6IFwiXCIsIGl0ZW1UaXRsZTogXCJcIiwgaXRlbVZhbHVlOiBcIlwiIH0sXHJcbiAgICByYWRpb2dyb3VwOiB7IHJvb3Q6IFwic3ZfcWNiY1wiLCBpdGVtOiBcInN2X3FfcmFkaW9ncm91cFwiLCBsYWJlbDogXCJcIiwgb3RoZXI6IFwic3ZfcV9vdGhlclwiIH0sXHJcbiAgICByYXRpbmc6IHsgcm9vdDogXCJzdl9xX3JhdGluZ1wiLCBpdGVtOiBcInN2X3FfcmF0aW5nX2l0ZW1cIiB9LFxyXG4gICAgdGV4dDogXCJcIixcclxuICAgIHdpbmRvdzoge1xyXG4gICAgICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcclxuICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIiwgdGl0bGU6IFwiXCIsIGJ1dHRvbjogXCJcIiwgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsIGJ1dHRvbkNvbGxhcHNlZDogXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbnN1cnZleUNzc1tcInN0YW5kYXJkXCJdID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi4vcXVlc3Rpb25iYXNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbXBsZW1lbnRvckJhc2Uge1xyXG4gICAga29WaXNpYmxlOiBhbnk7IGtvRXJyb3JzOiBhbnk7IGtvTWFyZ2luTGVmdDogYW55OyBrb1BhZGRpbmdSaWdodDogYW55OyBrb1JlbmRlcldpZHRoOiBhbnk7IGtvVGVtcGxhdGVOYW1lOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcXVlc3Rpb246IFF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBxdWVzdGlvbi52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLm9uVmlzaWJpbGl0eUNoYW5nZWQoKTsgfTtcclxuICAgICAgICBxdWVzdGlvbi5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vblJlbmRlcldpZHRoQ2hhbmdlZCgpOyB9O1xyXG4gICAgICAgIHRoaXMua29UZW1wbGF0ZU5hbWUgPSBrby5wdXJlQ29tcHV0ZWQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5nZXRUZW1wbGF0ZU5hbWUoKTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb1Zpc2libGUgPSBrby5vYnNlcnZhYmxlKHRoaXMucXVlc3Rpb24uaXNWaXNpYmxlKTtcclxuICAgICAgICB0aGlzLmtvUmVuZGVyV2lkdGggPSBrby5vYnNlcnZhYmxlKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpO1xyXG4gICAgICAgIHRoaXMua29FcnJvcnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcclxuICAgICAgICB0aGlzLmtvTWFyZ2luTGVmdCA9IGtvLnB1cmVDb21wdXRlZChmdW5jdGlvbiAoKSB7IHNlbGYua29SZW5kZXJXaWR0aCgpOyByZXR1cm4gc2VsZi5nZXRJbmRlbnRTaXplKHNlbGYucXVlc3Rpb24uaW5kZW50KTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb1BhZGRpbmdSaWdodCA9IGtvLm9ic2VydmFibGUoc2VsZi5nZXRJbmRlbnRTaXplKHNlbGYucXVlc3Rpb24ucmlnaHRJbmRlbnQpKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29UZW1wbGF0ZU5hbWVcIl0gPSB0aGlzLmtvVGVtcGxhdGVOYW1lO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb1Zpc2libGVcIl0gPSB0aGlzLmtvVmlzaWJsZTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29SZW5kZXJXaWR0aFwiXSA9IHRoaXMua29SZW5kZXJXaWR0aDtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29FcnJvcnNcIl0gPSB0aGlzLmtvRXJyb3JzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb01hcmdpbkxlZnRcIl0gPSB0aGlzLmtvTWFyZ2luTGVmdDtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29QYWRkaW5nUmlnaHRcIl0gPSB0aGlzLmtvUGFkZGluZ1JpZ2h0O1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJ1cGRhdGVRdWVzdGlvblwiXSA9IGZ1bmN0aW9uICgpIHsgc2VsZi51cGRhdGVRdWVzdGlvbigpOyB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlUXVlc3Rpb24oKSB7ICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmlsaXR5Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLmtvVmlzaWJsZSh0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25SZW5kZXJXaWR0aENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5rb1JlbmRlcldpZHRoKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpO1xyXG4gICAgICAgIHRoaXMua29QYWRkaW5nUmlnaHQodGhpcy5nZXRJbmRlbnRTaXplKHRoaXMucXVlc3Rpb24ucmlnaHRJbmRlbnQpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0SW5kZW50U2l6ZShpbmRlbnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGluZGVudCA8IDEpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbltcImRhdGFcIl0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBjc3MgPSB0aGlzLnF1ZXN0aW9uW1wiZGF0YVwiXVtcImNzc1wiXTtcclxuICAgICAgICBpZiAoIWNzcykgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGluZGVudCAqIGNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFRlbXBsYXRlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldCAmJiAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIpXHJcbiAgICAgICAgICAgIHJldHVybiBcInN1cnZleS13aWRnZXQtXCIgKyB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lO1xyXG4gICAgICAgIHJldHVybiBcInN1cnZleS1xdWVzdGlvbi1cIiArIHRoaXMucXVlc3Rpb24uZ2V0VHlwZSgpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25iYXNlLnRzIiwiaW1wb3J0IHtCYXNlLCBTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENob2ljZXNSZXN0ZnVsbCBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHVibGljIHVybDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHZhbHVlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyB0aXRsZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0Q2FsbGJhY2s6IChpdGVtczogQXJyYXk8SXRlbVZhbHVlPikgPT4gdm9pZDtcclxuICAgIHB1YmxpYyBlcnJvcjogU3VydmV5RXJyb3IgPSBudWxsO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW4oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVybCB8fCAhdGhpcy5nZXRSZXN1bHRDYWxsYmFjaykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkxvYWQoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGYub25FcnJvcih4aHIuc3RhdHVzVGV4dCwgeGhyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJjaG9pY2VzQnlVcmxcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy51cmwgJiYgIXRoaXMucGF0aCAmJiAhdGhpcy52YWx1ZU5hbWUgJiYgIXRoaXMudGl0bGVOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldERhdGEoanNvbjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIGlmIChqc29uLnVybCkgdGhpcy51cmwgPSBqc29uLnVybDtcclxuICAgICAgICBpZiAoanNvbi5wYXRoKSB0aGlzLnBhdGggPSBqc29uLnBhdGg7XHJcbiAgICAgICAgaWYgKGpzb24udmFsdWVOYW1lKSB0aGlzLnZhbHVlTmFtZSA9IGpzb24udmFsdWVOYW1lO1xyXG4gICAgICAgIGlmIChqc29uLnRpdGxlTmFtZSkgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLnVybCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5wYXRoID0gXCJcIjtcclxuICAgICAgICB0aGlzLnZhbHVlTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy50aXRsZU5hbWUgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZChyZXN1bHQ6IGFueSkge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHRbXCJsZW5ndGhcIl0pIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtVmFsdWUgPSByZXN1bHRbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1WYWx1ZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGl0ZW1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKG5ldyBJdGVtVmFsdWUodmFsdWUsIHRpdGxlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEN1c3RvbUVycm9yKHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cmxHZXRDaG9pY2VzRXJyb3JcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb25FcnJvcihzdGF0dXM6IHN0cmluZywgcmVzcG9uc2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVybFJlcXVlc3RFcnJvclwiKVtcImZvcm1hdFwiXShzdGF0dXMsIHJlc3BvbnNlKSk7XHJcbiAgICAgICAgdGhpcy5nZXRSZXN1bHRDYWxsYmFjayhbXSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFJlc3VsdEFmdGVyUGF0aChyZXN1bHQ6IGFueSkge1xyXG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGlmICghdGhpcy5wYXRoKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHZhciBwYXRoZXMgPSB0aGlzLmdldFBhdGhlcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoZXNbaV1dO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFBhdGhlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcGF0aGVzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pbmRleE9mKCc7JykgPiAtMSkge1xyXG4gICAgICAgICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoJzsnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoJywnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhdGhlcy5sZW5ndGggPT0gMCkgcGF0aGVzLnB1c2godGhpcy5wYXRoKTtcclxuICAgICAgICByZXR1cm4gcGF0aGVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIGl0ZW1bdGhpcy52YWx1ZU5hbWVdO1xyXG4gICAgICAgIHZhciBsZW4gPSBPYmplY3Qua2V5cyhpdGVtKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxlbiA8IDEpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBpdGVtW09iamVjdC5rZXlzKGl0ZW0pWzBdXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VGl0bGUoaXRlbTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMudGl0bGVOYW1lKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLnRpdGxlTmFtZV07XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNob2ljZXNCeVVybFwiLCBbXCJ1cmxcIiwgXCJwYXRoXCIsIFwidmFsdWVOYW1lXCIsIFwidGl0bGVOYW1lXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ2hvaWNlc1Jlc3RmdWxsKCk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jaG9pY2VzUmVzdGZ1bGwudHMiLCJpbXBvcnQge0hhc2hUYWJsZX0gZnJvbSAnLi9iYXNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9jZXNzVmFsdWUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuICAgIHB1YmxpYyBnZXRGaXJzdE5hbWUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIHZhciByZXMgPSBcIlwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2ggPSB0ZXh0W2ldO1xyXG4gICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdbJykgYnJlYWs7XHJcbiAgICAgICAgICAgIHJlcyArPSBjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNWYWx1ZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogSGFzaFRhYmxlPGFueT4pOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcclxuICAgICAgICByZXR1cm4gcmVzLmhhc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XHJcbiAgICAgICAgcmV0dXJuIHJlcy52YWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVDb3JlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXMgPSB7IGhhc1ZhbHVlOiBmYWxzZSwgdmFsdWU6IG51bGwgfTtcclxuICAgICAgICB2YXIgY3VyVmFsdWUgPSB2YWx1ZXM7XHJcbiAgICAgICAgaWYgKCFjdXJWYWx1ZSkgcmV0dXJuIHJlcztcclxuICAgICAgICB2YXIgaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgd2hpbGUgKHRleHQgJiYgdGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0FycmF5ID0gIWlzRmlyc3QgJiYgdGV4dFswXSA9PSAnWyc7XHJcbiAgICAgICAgICAgIGlmICghaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KSB0ZXh0ID0gdGV4dC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3ROYW1lKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJOYW1lKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJWYWx1ZVtjdXJOYW1lXSkgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIGN1clZhbHVlID0gY3VyVmFsdWVbY3VyTmFtZV1cclxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VyVmFsdWUpKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGggJiYgdGV4dFtpbmRleF0gIT0gJ10nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IHRleHRbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gaW5kZXggPCB0ZXh0Lmxlbmd0aCA/IHRleHQuc3Vic3RyKGluZGV4ICsgMSkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldEludFZhbHVlKHN0cik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGN1clZhbHVlLmxlbmd0aCkgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIGN1clZhbHVlID0gY3VyVmFsdWVbaW5kZXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzLnZhbHVlID0gY3VyVmFsdWU7XHJcbiAgICAgICAgcmVzLmhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRJbnRWYWx1ZShzdHI6IGFueSkge1xyXG4gICAgICAgIGlmIChzdHIgPT0gXCIwXCIgfHwgKChzdHIgfCAwKSA+IDAgJiYgc3RyICUgMSA9PSAwKSlcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzdHIpO1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtCYXNlLCBJUGFnZSwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleSwgSUVsZW1lbnQsIElRdWVzdGlvbiwgSGFzaFRhYmxlLCBTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlQYWdlSWR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWx9IGZyb20gXCIuL3BhbmVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFnZU1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJUGFnZSB7XHJcbiAgICBwcml2YXRlIG51bVZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IHN0cmluZyA9IFwiaW5oZXJpdFwiO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInBhZ2VcIjsgfVxyXG4gICAgcHVibGljIGdldCBudW0oKSB7IHJldHVybiB0aGlzLm51bVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IG51bSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubnVtVmFsdWUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLm51bVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbk51bUNoYW5nZWQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLmhhc0lucHV0KSBjb250aW51ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNbaV0uZm9jdXMoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzRmlyc3RFcnJvclF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uc1tpXS52aXNpYmxlIHx8IHRoaXMucXVlc3Rpb25zW2ldLmN1cnJlbnRFcnJvckNvdW50ID09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpXS5mb2N1cyh0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHNjcm9sbFRvVG9wKCkge1xyXG4gICAgICAgIFN1cnZleUVsZW1lbnQuU2Nyb2xsRWxlbWVudFRvVG9wKFN1cnZleVBhZ2VJZCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25OdW1DaGFuZ2VkKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHN1cGVyLm9uVmlzaWJsZUNoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLnZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJwYWdlXCIsIFt7IG5hbWU6IFwibmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5XCIsIGRlZmF1bHQ6IFwiaW5oZXJpdFwiLCBjaG9pY2VzOiBbXCJpaGVyaXRcIiwgXCJzaG93XCIsIFwiaGlkZVwiXSB9XSwgXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUGFnZU1vZGVsKCk7IH0sIFwicGFuZWxcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BhZ2UudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtCYXNlLCBJUGFnZSwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleSwgSVN1cnZleURhdGEsIElFbGVtZW50LCBJUXVlc3Rpb24sIEhhc2hUYWJsZSwgU3VydmV5RWxlbWVudCwgU3VydmV5UGFnZUlkfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtDb25kaXRpb25SdW5uZXJ9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJvd01vZGVsIHtcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuO1xyXG4gICAgdmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYW5lbDogUGFuZWxNb2RlbEJhc2UpIHtcclxuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHBhbmVsLmRhdGEgJiYgcGFuZWwuZGF0YS5pc0Rlc2lnbk1vZGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZWxlbWVudHM6IEFycmF5PElFbGVtZW50PiA9IFtdO1xyXG4gICAgLy9UT0RPIHJlbW92ZSBhZnRlciB1cGRhdGluZyByZWFjdCBhbmQgdnVlXHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxJRWxlbWVudD4geyByZXR1cm4gdGhpcy5lbGVtZW50czt9IFxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHVwZGF0ZVZpc2libGUoKSB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5jYWxjVmlzaWJsZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRFbGVtZW50KHE6IElFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKHEpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaykgdGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldFdpZHRoKCkge1xyXG4gICAgICAgIHZhciB2aXNDb3VudCA9IHRoaXMuZ2V0VmlzaWJsZUNvdW50KCk7XHJcbiAgICAgICAgaWYgKHZpc0NvdW50ID09IDApIHJldHVybjtcclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBxID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHEucmVuZGVyV2lkdGggPSBxLndpZHRoID8gcS53aWR0aCA6IE1hdGguZmxvb3IoMTAwIC8gdmlzQ291bnQpICsgJyUnO1xyXG4gICAgICAgICAgICAgICAgcS5yaWdodEluZGVudCA9IGNvdW50ZXIgPCB2aXNDb3VudCAtIDEgPyAxIDogMDtcclxuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWaXNpYmxlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICB2YXIgcmVzID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKSByZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2FsY1Zpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmdldFZpc2libGVDb3VudCgpID4gMDsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGFuZWxNb2RlbEJhc2UgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSUNvbmRpdGlvblJ1bm5lciwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcGFuZWxDb3VudGVyID0gMTAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFuZWxJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcInNwX1wiICsgUGFuZWxNb2RlbEJhc2UucGFuZWxDb3VudGVyKys7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkYXRhVmFsdWU6IElTdXJ2ZXkgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJvd1ZhbHVlczogQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XHJcbiAgICBwcml2YXRlIGVsZW1lbnRzVmFsdWU6IEFycmF5PElFbGVtZW50PiA9IG5ldyBBcnJheTxJRWxlbWVudD4oKTtcclxuICAgIHByaXZhdGUgaXNRdWVzdGlvbnNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbnNWYWx1ZTogQXJyYXk8UXVlc3Rpb25CYXNlPiA9IG5ldyBBcnJheTxRdWVzdGlvbkJhc2U+KCk7XHJcbiAgICBwdWJsaWMgcGFyZW50OiBQYW5lbE1vZGVsQmFzZSA9IG51bGw7XHJcbiAgICBwdWJsaWMgdmlzaWJsZUlmOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcm93c0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwdWJsaWMgdmlzaWJsZUluZGV4OiBudW1iZXIgPSAtMTtcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkKCk7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmVsZW1lbnRzVmFsdWUucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSk6IG51bWJlciB7IHJldHVybiBzZWxmLmRvT25QdXNoRWxlbWVudCh0aGlzLCB2YWx1ZSk7IH07XHJcbiAgICAgICAgdGhpcy5lbGVtZW50c1ZhbHVlLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBRdWVzdGlvbkJhc2VbXSk6IFF1ZXN0aW9uQmFzZVtdIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZG9TcGxpY2VFbGVtZW50cyh0aGlzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IElTdXJ2ZXkgeyByZXR1cm4gdGhpcy5kYXRhVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogSVN1cnZleSkge1xyXG4gICAgICAgIGlmKHRoaXMuZGF0YVZhbHVlID09PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0uc2V0RGF0YSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlLnRleHQgPSBuZXdWYWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPyAoPElMb2NhbGl6YWJsZU93bmVyPjxhbnk+dGhpcy5kYXRhKS5nZXRMb2NhbGUoKSA6IFwiXCI7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBxdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb25CYXNlPiB7IFxyXG4gICAgICAgIGlmKCF0aGlzLmlzUXVlc3Rpb25zUmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZihlbC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHFzID0gKDxQYW5lbE1vZGVsPmVsKS5xdWVzdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IHFzLmxlbmd0aDsgaiArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlLnB1c2gocXNbal0pOyAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaCg8UXVlc3Rpb25CYXNlPmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIH0gXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtYXJrUXVlc3Rpb25MaXN0RGlydHkoKSB7XHJcbiAgICAgICAgdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50Lm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4geyByZXR1cm4gdGhpcy5lbGVtZW50c1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgY29udGFpbnNFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbDogYW55ID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgaWYoZWwgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGlmKGVsLmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmKCg8UGFuZWxNb2RlbEJhc2U+ZWwpLmNvbnRhaW5zRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCBmb2N1c2VPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgZmlyc3RFcnJvclF1ZXN0aW9uID0gbnVsbDtcclxuICAgICAgICB2YXIgdmlzaWJsZVF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkUXVlc3Rpb25zVG9MaXN0KHZpc2libGVRdWVzdGlvbnMsIHRydWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB2aXNpYmxlUXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZihxdWVzdGlvbi5pc1JlYWRPbmx5KSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlT25GaXJzdEVycm9yICYmIGZpcnN0RXJyb3JRdWVzdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaXJzdEVycm9yUXVlc3Rpb24pIGZpcnN0RXJyb3JRdWVzdGlvbi5mb2N1cyh0cnVlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFF1ZXN0aW9uc1RvTGlzdChsaXN0OiBBcnJheTxJUXVlc3Rpb24+LCB2aXNpYmxlT25seTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHZpc2libGVPbmx5ICYmICF0aGlzLnZpc2libGUpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgaWYgKHZpc2libGVPbmx5ICYmICFlbC52aXNpYmxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5hZGRRdWVzdGlvbnNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgeyBcclxuICAgICAgICAgICAgICAgIGxpc3QucHVzaCg8SVF1ZXN0aW9uPmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XHJcbiAgICAgICAgaWYoIXRoaXMucm93VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93VmFsdWVzID0gdGhpcy5idWlsZFJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93VmFsdWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0FjdGl2ZSgpIHsgcmV0dXJuICghdGhpcy5kYXRhKSB8fCB0aGlzLmRhdGEuY3VycmVudFBhZ2UgPT0gdGhpcy5yb290OyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHJvb3QoKTogUGFuZWxNb2RlbEJhc2Uge1xyXG4gICAgICAgIHZhciByZXMgPSA8UGFuZWxNb2RlbEJhc2U+dGhpcztcclxuICAgICAgICB3aGlsZShyZXMucGFyZW50KSByZXMgPSByZXMucGFyZW50O1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUm93TW9kZWwodGhpcyk7IH1cclxuICAgIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25TdXJ2ZXlMb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucm93c0NoYW5nZWRDYWxsYmFjaykgdGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGlzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pc0xvYWRpbmdGcm9tSnNvbjsgfVxyXG4gICAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZXMgPSBudWxsO1xyXG4gICAgICAgIGlmKHRoaXMucm93c0NoYW5nZWRDYWxsYmFjayAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgdGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBpc0Rlc2lnbk1vZGUoKSB7IHJldHVybiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzRGVzaWduTW9kZTsgfVxyXG4gICAgcHJpdmF0ZSBkb09uUHVzaEVsZW1lbnQobGlzdDogQXJyYXk8SUVsZW1lbnQ+LCB2YWx1ZTogSUVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChsaXN0LCB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcclxuICAgICAgICB0aGlzLm9uQWRkRWxlbWVudCh2YWx1ZSwgbGlzdC5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvU3BsaWNlRWxlbWVudHMobGlzdDogQXJyYXk8SUVsZW1lbnQ+LCBzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBJRWxlbWVudFtdKSB7XHJcbiAgICAgICAgaWYoIXN0YXJ0KSBzdGFydCA9IDA7XHJcbiAgICAgICAgaWYoIWRlbGV0ZUNvdW50KSBkZWxldGVDb3VudCA9IDA7XHJcbiAgICAgICAgdmFyIGRlbGV0ZWRRdWVzdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGVsZXRlQ291bnQ7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYoaSArIHN0YXJ0ID49IGxpc3QubGVuZ3RoKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZGVsZXRlZFF1ZXN0aW9ucy5wdXNoKGxpc3RbaSArIHN0YXJ0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwobGlzdCwgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi4gaXRlbXMpO1xyXG4gICAgICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XHJcbiAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkZWxldGVkUXVlc3Rpb25zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlRWxlbWVudChkZWxldGVkUXVlc3Rpb25zW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25BZGRFbGVtZW50KGl0ZW1zW2ldLCBzdGFydCArIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZihlbGVtZW50LmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgdmFyIHAgPSA8UGFuZWxNb2RlbD5lbGVtZW50O1xyXG4gICAgICAgICAgICBwLmRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgICAgIHAucGFyZW50ID0gdGhpcztcclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucGFuZWxBZGRlZChwLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25CYXNlPmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBxLnNldERhdGEodGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5xdWVzdGlvbkFkZGVkKHEsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBlbGVtZW50LnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudCk7IH1cclxuICAgICAgICBlbGVtZW50LnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25FbGVtZW50U3RhcnRXaXRoTmV3TGluZUNoYW5nZWQoZWxlbWVudCk7IH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgb25SZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XHJcbiAgICAgICAgaWYoIWVsZW1lbnQuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHRoaXMuZGF0YS5xdWVzdGlvblJlbW92ZWQoPFF1ZXN0aW9uQmFzZT5lbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHRoaXMuZGF0YS5wYW5lbFJlbW92ZWQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yb3dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlUm93c1Zpc2liaWxpdHkoZWxlbWVudDogYW55KSAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMucm93VmFsdWVzW2ldO1xyXG4gICAgICAgICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBidWlsZFJvd3MoKTogQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4oKTtcclxuICAgICAgICB2YXIgbGFzdFJvd1Zpc2libGVJbmRleCA9IC0xO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgdmFyIGlzTmV3Um93ID0gaSA9PSAwIHx8IGVsLnN0YXJ0V2l0aE5ld0xpbmU7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSBpc05ld1JvdyA/IHRoaXMuY3JlYXRlUm93KCkgOiByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBpZihpc05ld1JvdykgcmVzdWx0LnB1c2gocm93KTtcclxuICAgICAgICAgICAgcm93LmFkZEVsZW1lbnQoZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHRbaV0udXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHsgXHJcbiAgICAgICAgdmFyIHN0ciA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgaWYoIXN0ciAmJiB0aGlzLmlzUGFuZWwgJiYgdGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBcIltcIiArIHRoaXMubmFtZSArIFwiXVwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgIT0gbnVsbCA/IHRoaXMuZGF0YS5wcm9jZXNzVGV4dChzdHIpIDogc3RyOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHsgIHJldHVybiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pc0Rlc2lnbk1vZGUpIHx8IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTsgfVxyXG4gICAgcHVibGljIGdldElzUGFnZVZpc2libGUoZXhjZXB0aW9uUXVlc3Rpb246IElRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNbaV0gPT0gZXhjZXB0aW9uUXVlc3Rpb24pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNbaV0udmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb25CYXNlLCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZEVsZW1lbnQocXVlc3Rpb24sIGluZGV4KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRQYW5lbChwYW5lbDogUGFuZWxNb2RlbCwgaW5kZXg6IG51bWJlciA9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFbGVtZW50KHBhbmVsLCBpbmRleCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkTmV3UXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uQmFzZSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5hZGRRdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZE5ld1BhbmVsKG5hbWU6IHN0cmluZyk6IFBhbmVsTW9kZWwge1xyXG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3UGFuZWwobmFtZSk7XHJcbiAgICAgICAgdGhpcy5hZGRQYW5lbChwYW5lbCk7XHJcbiAgICAgICAgcmV0dXJuIHBhbmVsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKG5hbWU6IHN0cmluZyk6IFBhbmVsTW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbChuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCAmJiAoPFBhbmVsTW9kZWxCYXNlPig8YW55PmVsKSkucmVtb3ZlRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5ydW5Db25kaXRpb24odmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGVJZikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25SdW5uZXIpIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uTG9jYWxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5vbkxvY2FsZUNoYW5nZWQoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy9leHBvcnQgY2xhc3MgXHJcbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJRWxlbWVudCB7XHJcbiAgICBwcml2YXRlIHJlbmRlcldpZHRoVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmlnaHRJbmRlbnRWYWx1ZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGlubmVySW5kZW50VmFsdWU6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICByZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInBhbmVsXCI7IH1cclxuICAgIHB1YmxpYyBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSkgeyBcclxuICAgICAgICB0aGlzLmRhdGEgPSA8SVN1cnZleT5uZXdWYWx1ZTsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlubmVySW5kZW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmlubmVySW5kZW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgaW5uZXJJbmRlbnQodmFsOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMuaW5uZXJJbmRlbnRWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW5uZXJJbmRlbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnJlbmRlcldpZHRoVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMucmVuZGVyV2lkdGgpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlbmRlcldpZHRoVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYodGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaykgdGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzdGFydFdpdGhOZXdMaW5lKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGFydFdpdGhOZXdMaW5lVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc3RhcnRXaXRoTmV3TGluZSh2YWx1ZTogYm9vbGVhbikgeyBcclxuICAgICAgICBpZih0aGlzLnN0YXJ0V2l0aE5ld0xpbmUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjaykgdGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnJpZ2h0SW5kZW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMucmlnaHRJbmRlbnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJpZ2h0SW5kZW50VmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYodGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaykgdGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYodGhpcy5yb3dWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKSB0aGlzLnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInBhbmVsXCIsIFtcIm5hbWVcIiwgIHsgbmFtZTogXCJlbGVtZW50c1wiLCBhbHRlcm5hdGl2ZU5hbWU6IFwicXVlc3Rpb25zXCIsIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcclxuICAgIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcInZpc2libGVJZjpleHByZXNzaW9uXCIsIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXHJcbiAgICB7bmFtZTogXCJpbm5lckluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdfV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKCk7IH0pO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGFuZWwudHMiLCJpbXBvcnQge0Jhc2UsIElRdWVzdGlvbiwgRXZlbnR9IGZyb20gXCIuL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XHJcbiAgICBwdWJsaWMgaHRtbFRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgd2lkZ2V0SnNvbjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5odG1sVGVtcGxhdGUgPSB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA/IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZnRlclJlbmRlcihxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcikgdGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKHF1ZXN0aW9uLCBlbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgd2lsbFVubW91bnQocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQpIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRml0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmlzRml0KSByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRml0KHF1ZXN0aW9uKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IEN1c3RvbVdpZGdldENvbGxlY3Rpb24gPSBuZXcgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbigpO1xyXG4gICAgcHJpdmF0ZSB3aWRnZXRzVmFsdWVzOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgb25DdXN0b21XaWRnZXRBZGRlZDogRXZlbnQ8KGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICAgICAgXHJcbiAgICBwdWJsaWMgZ2V0IHdpZGdldHMoKTogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+IHsgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlczsgfVxyXG4gICAgcHVibGljIGFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmFtZSA9IHdpZGdldEpzb24ubmFtZTtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgbmFtZSA9IFwid2lkZ2V0X1wiICsgdGhpcy53aWRnZXRzLmxlbmd0aCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXN0b21XaWRnZXQgPSBuZXcgUXVlc3Rpb25DdXN0b21XaWRnZXQobmFtZSwgd2lkZ2V0SnNvbik7XHJcbiAgICAgICAgdGhpcy53aWRnZXRzVmFsdWVzLnB1c2goY3VzdG9tV2lkZ2V0KTtcclxuICAgICAgICB0aGlzLm9uQ3VzdG9tV2lkZ2V0QWRkZWQuZmlyZShjdXN0b21XaWRnZXQsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkgeyB0aGlzLndpZGdldHNWYWx1ZXMgPSBbXTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXN0b21XaWRnZXQocXVlc3Rpb246IElRdWVzdGlvbik6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMud2lkZ2V0c1ZhbHVlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0c1ZhbHVlc1tpXS5pc0ZpdChxdWVzdGlvbikpIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsImltcG9ydCB7QmFzZSwgSVF1ZXN0aW9uLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5RGF0YSwgSVN1cnZleSwgSGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5pbXBvcnQge1F1ZXN0aW9uQ3VzdG9tV2lkZ2V0fSBmcm9tICcuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cyc7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSAnLi9qc29ub2JqZWN0JztcclxuaW1wb3J0IHtDb25kaXRpb25SdW5uZXJ9IGZyb20gJy4vY29uZGl0aW9ucyc7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXJ9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25CYXNlIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElRdWVzdGlvbiwgSUNvbmRpdGlvblJ1bm5lciwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcXVlc3Rpb25Db3VudGVyID0gMTAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UXVlc3Rpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcInNxX1wiICsgUXVlc3Rpb25CYXNlLnF1ZXN0aW9uQ291bnRlcisrO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGRhdGE6IElTdXJ2ZXlEYXRhO1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXlWYWx1ZTogSVN1cnZleTtcclxuICAgIHByaXZhdGUgY29uZGl0aW9uUnVubmVyOiBDb25kaXRpb25SdW5uZXIgPSBudWxsO1xyXG4gICAgcHVibGljIGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQ7XHJcbiAgICBwdWJsaWMgdmlzaWJsZUlmOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHZpc2libGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIHN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIHZpc2libGVJbmRleFZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIHB1YmxpYyB3aWR0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgcmVuZGVyV2lkdGhWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgcmlnaHRJbmRlbnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBpbmRlbnQ6IG51bWJlciA9IDA7XHJcbiAgICBmb2N1c0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByb3dWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICB2aXNpYmxlSW5kZXhDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByZWFkT25seUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDsgICAgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25CYXNlLmdldFF1ZXN0aW9uSWQoKTtcclxuICAgICAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5xdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKDxJUXVlc3Rpb24+dGhpcywgdGhpcy52aXNpYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZSB8fCAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKTsgfVxyXG4gICAgcHVibGljIGdldCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudmlzaWJsZUluZGV4VmFsdWU7IH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudEVycm9yQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIDA7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0NvbW1lbnQoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHN0YXJ0V2l0aE5ld0xpbmUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzdGFydFdpdGhOZXdMaW5lKHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmVuZGVyV2lkdGgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVuZGVyV2lkdGhWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yZW5kZXJXaWR0aCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVuZGVyV2lkdGhWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmlnaHRJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMucmlnaHRJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByaWdodEluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yaWdodEluZGVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmlnaHRJbmRlbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHsgfVxyXG4gICAgc2V0RGF0YShuZXdWYWx1ZTogSVN1cnZleURhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZihuZXdWYWx1ZSAmJiBuZXdWYWx1ZVtcInF1ZXN0aW9uQWRkZWRcIl0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IDxJU3VydmV5Pm5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uU2V0RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7IHJldHVybiB0aGlzLnN1cnZleVZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgZmlyZUNhbGxiYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uU2V0RGF0YSgpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ3JlYXRpbmcoKSB7IH1cclxuICAgIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55Pikge1xyXG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uUnVubmVyKSB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xyXG4gICAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnZpc2libGVJZjtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzKTtcclxuICAgIH1cclxuICAgIC8vSVF1ZXN0aW9uXHJcbiAgICBwdWJsaWMgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRWaXNpYmxlSW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGVJbmRleFZhbHVlID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlSW5kZXhWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmlzaWJsZUluZGV4Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7fVxyXG4gICAgcHVibGljIG9uTG9jYWxlQ2hhbmdlZCgpIHt9XHJcbiAgICAvL0lMb2NhbGl6YWJsZU93bmVyXHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/ICg8SUxvY2FsaXphYmxlT3duZXI+PGFueT50aGlzLmRhdGEpLmdldExvY2FsZSgpIDogXCJcIjsgXHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInF1ZXN0aW9uYmFzZVwiLCBbXCIhbmFtZVwiLCB7IG5hbWU6IFwidmlzaWJsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgXCJ2aXNpYmxlSWY6ZXhwcmVzc2lvblwiLFxyXG4gICAgeyBuYW1lOiBcIndpZHRoXCIgfSwgeyBuYW1lOiBcInN0YXJ0V2l0aE5ld0xpbmU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlfSwge25hbWU6IFwiaW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM119XSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uYmFzZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElTdXJ2ZXksIEhhc2hUYWJsZSwgSVF1ZXN0aW9uLCBJRWxlbWVudCwgSUNvbmRpdGlvblJ1bm5lciwgSVBhZ2UsIFN1cnZleUVycm9yLCBFdmVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0lTdXJ2ZXlUcmlnZ2VyT3duZXIsIFN1cnZleVRyaWdnZXJ9IGZyb20gXCIuL3RyaWdnZXJcIjtcclxuaW1wb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuL3BhZ2VcIjtcclxuaW1wb3J0IHtUZXh0UHJlUHJvY2Vzc29yfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XHJcbmltcG9ydCB7UHJvY2Vzc1ZhbHVlfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcclxuaW1wb3J0IHtkeFN1cnZleVNlcnZpY2V9IGZyb20gXCIuL2R4U3VydmV5U2VydmljZVwiO1xyXG5pbXBvcnQge0pzb25FcnJvcn0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7Q3VzdG9tV2lkZ2V0Q29sbGVjdGlvbn0gZnJvbSAnLi9xdWVzdGlvbkN1c3RvbVdpZGdldHMnO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNb2RlbCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJU3VydmV5LCBJU3VydmV5VHJpZ2dlck93bmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwdWJsaWMgc3VydmV5SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgc3VydmV5UG9zdElkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGNsaWVudElkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGNvb2tpZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgY29tbWVudFByZWZpeDogc3RyaW5nID0gXCItQ29tbWVudFwiO1xyXG4gICAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd05hdmlnYXRpb25CdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93VGl0bGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dQYWdlVGl0bGVzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93Q29tcGxldGVkUGFnZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgcmVxdWlyZWRUZXh0OiBzdHJpbmcgPSBcIipcIjtcclxuICAgIHB1YmxpYyBxdWVzdGlvblN0YXJ0SW5kZXg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgc2hvd1Byb2dyZXNzQmFyOiBzdHJpbmcgPSBcIm9mZlwiO1xyXG4gICAgcHVibGljIHN0b3JlT3RoZXJzQXNDb21tZW50OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBnb05leHRQYWdlQXV0b21hdGljOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcGFnZXM6IEFycmF5PFBhZ2VNb2RlbD4gPSBuZXcgQXJyYXk8UGFnZU1vZGVsPigpO1xyXG4gICAgcHVibGljIHRyaWdnZXJzOiBBcnJheTxTdXJ2ZXlUcmlnZ2VyPiA9IG5ldyBBcnJheTxTdXJ2ZXlUcmlnZ2VyPigpO1xyXG4gICAgcHVibGljIGNsZWFySW52aXNpYmxlVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY0NvbXBsZXRlZEh0bWxWYWx1ZSA6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQYWdlUHJldlRleHRWYWx1ZSA6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQYWdlTmV4dFRleHRWYWx1ZSA6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NDb21wbGV0ZVRleHRWYWx1ZSA6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50UGFnZVZhbHVlOiBQYWdlTW9kZWwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSB2YWx1ZXNIYXNoOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSB2YXJpYWJsZXNIYXNoOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBwYWdlUHJldlRleHRWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBwYWdlTmV4dFRleHRWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjb21wbGV0ZVRleHRWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBzaG93UGFnZU51bWJlcnNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzaG93UXVlc3Rpb25OdW1iZXJzVmFsdWU6IHN0cmluZyA9IFwib25cIjtcclxuICAgIHByaXZhdGUgcXVlc3Rpb25UaXRsZUxvY2F0aW9uVmFsdWU6IHN0cmluZyA9IFwidG9wXCI7XHJcbiAgICBwcml2YXRlIGxvY2FsZVZhbHVlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBpc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcHJvY2Vzc2VkVGV4dFZhbHVlczogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcclxuICAgIHByaXZhdGUgaXNWYWxpZGF0aW5nT25TZXJ2ZXJWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBtb2RlVmFsdWU6IHN0cmluZyA9IFwiZWRpdFwiO1xyXG4gICAgcHJpdmF0ZSBpc0Rlc2lnbk1vZGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBvbkNvbXBsZXRlOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblBhcnRpYWxTZW5kOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkN1cnJlbnRQYWdlQ2hhbmdlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25WaXNpYmxlQ2hhbmdlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFnZVZpc2libGVDaGFuZ2VkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25RdWVzdGlvbkFkZGVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25RdWVzdGlvblJlbW92ZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblBhbmVsQWRkZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblBhbmVsUmVtb3ZlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uVmFsaWRhdGVRdWVzdGlvbjogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnM6IChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueTtcclxuICAgIHB1YmxpYyBvblByb2Nlc3NIdG1sOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25TZW5kUmVzdWx0OiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25HZXRSZXN1bHQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblVwbG9hZEZpbGU6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkFmdGVyUmVuZGVyU3VydmV5OiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclBhZ2U6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkFmdGVyUmVuZGVyUXVlc3Rpb246IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFuZWw6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBqc29uRXJyb3JzOiBBcnJheTxKc29uRXJyb3I+ID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NDb21wbGV0ZWRIdG1sVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NQYWdlUHJldlRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1BhZ2VOZXh0VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jQ29tcGxldGVUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NRdWVzdGlvblRpdGxlVGVtcGxhdGVWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcclxuICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25IYXNWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIHNlbGYuaGFzUHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWUpOyB9O1xyXG4gICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vblByb2Nlc3MgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7IHJldHVybiBzZWxmLmdldFByb2Nlc3NlZFRleHRWYWx1ZShuYW1lKTsgfTtcclxuICAgICAgICB0aGlzLnBhZ2VzLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUuZGF0YSA9IHNlbGY7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudHJpZ2dlcnMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXRPd25lcihzZWxmKTtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9jZXNzZWRUZXh0VmFsdWVzKCk7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNyZWF0aW5nKCk7XHJcbiAgICAgICAgaWYgKGpzb25PYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRKc29uT2JqZWN0KGpzb25PYmopO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdXJ2ZXlJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkU3VydmV5RnJvbVNlcnZpY2UodGhpcy5zdXJ2ZXlJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkNyZWF0aW5nKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJzdXJ2ZXlcIjsgfVxyXG4gICAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jYWxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmxvY2FsZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGUgPSB2YWx1ZTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5vbkxvY2FsZUNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL0lMb2NhbGl6YWJsZU93bmVyXHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCkgeyByZXR1cm4gdGhpcy5sb2NhbGU7IH1cclxuICAgIHB1YmxpYyBnZXRMb2NTdHJpbmcoc3RyOiBzdHJpbmcpIHsgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoc3RyKTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZW1wdHlTdXJ2ZXlUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcImVtcHR5U3VydmV5XCIpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1RpdGxlLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgY29tcGxldGVkSHRtbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21wbGV0ZWRIdG1sLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBjb21wbGV0ZWRIdG1sKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NDb21wbGV0ZWRIdG1sLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0NvbXBsZXRlZEh0bWwoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21wbGV0ZWRIdG1sVmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBwYWdlUHJldlRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZVByZXZUZXh0LnRleHQgPyB0aGlzLmxvY1BhZ2VQcmV2VGV4dC50ZXh0IDogdGhpcy5nZXRMb2NTdHJpbmcoXCJwYWdlUHJldlRleHRcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgcGFnZVByZXZUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQYWdlUHJldlRleHQudGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BhZ2VQcmV2VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BhZ2VQcmV2VGV4dFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgcGFnZU5leHRUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BhZ2VOZXh0VGV4dC50ZXh0ID8gdGhpcy5sb2NQYWdlTmV4dFRleHQudGV4dCA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGFnZU5leHRUZXh0XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IHBhZ2VOZXh0VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGFnZU5leHRUZXh0LnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQYWdlTmV4dFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlTmV4dFRleHRWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbXBsZXRlVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21wbGV0ZVRleHQudGV4dCA/IHRoaXMubG9jQ29tcGxldGVUZXh0LnRleHQgOiB0aGlzLmdldExvY1N0cmluZyhcImNvbXBsZXRlVGV4dFwiKTsgfVxyXG4gICAgcHVibGljIHNldCBjb21wbGV0ZVRleHQobmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0NvbXBsZXRlVGV4dC50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jQ29tcGxldGVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVUZXh0VmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBxdWVzdGlvblRpdGxlVGVtcGxhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlVGVtcGxhdGUodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZS50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NRdWVzdGlvblRpdGxlVGVtcGxhdGVWYWx1ZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd1BhZ2VOdW1iZXJzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zaG93UGFnZU51bWJlcnNWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93UGFnZU51bWJlcnModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1BhZ2VOdW1iZXJzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zaG93UGFnZU51bWJlcnNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hvd1F1ZXN0aW9uTnVtYmVycygpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzVmFsdWU7IH07XHJcbiAgICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9O1xyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHsgcmV0dXJuIHRoaXMucHJvY2Vzc1RleHQodGhpcy50aXRsZSk7IH1cclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlOyB9O1xyXG4gICAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uVmFsdWUgPSB2YWx1ZTtcclxuICAgIH07XHJcbiAgICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubW9kZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IG1vZGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLm1vZGUpIHJldHVybjtcclxuICAgICAgICBpZiAodmFsdWUgIT0gXCJlZGl0XCIgJiYgdmFsdWUgIT0gXCJkaXNwbGF5XCIpIHJldHVybjtcclxuICAgICAgICB0aGlzLm1vZGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlc0hhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnZhbHVlc0hhc2hba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0RGF0YVZhbHVlKGRhdGE6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc0hhc2hba2V5XSA9IGRhdGFba2V5XTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc0hhc2ggPSB7fTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YVZhbHVlKGRhdGEsIGtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHJpZ2dlcnMoa2V5LCBkYXRhW2tleV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2tleS50b0xvd2VyQ2FzZSgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1trZXkudG9Mb3dlckNhc2UoKV0gPSBcInZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb21tZW50cygpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLmNvbW1lbnRQcmVmaXgpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnZhbHVlc0hhc2hba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHZpc2libGVQYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0aGlzLnBhZ2VzO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8UGFnZU1vZGVsPigpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucGFnZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnBhZ2VzLmxlbmd0aCA9PSAwOyB9XHJcbiAgICBwdWJsaWMgZ2V0IFBhZ2VDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRQYWdlKCk6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZVZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPT0gbnVsbCAmJiB2UGFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZVZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjdXJyZW50UGFnZSh2YWx1ZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZQYWdlcy5pbmRleE9mKHZhbHVlKSA8IDApIHJldHVybjtcclxuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5jdXJyZW50UGFnZVZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jdXJyZW50UGFnZVZhbHVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ3VzdG9tV2lkZ2V0cyh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUNoYW5nZWQodmFsdWUsIG9sZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFBhZ2VObygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjdXJyZW50UGFnZU5vKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSB0aGlzLnZpc2libGVQYWdlcy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbdmFsdWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VWYWx1ZS5zY3JvbGxUb1RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzdGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZykgcmV0dXJuIFwibG9hZGluZ1wiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGxldGVkKSByZXR1cm4gXCJjb21wbGV0ZWRcIjtcclxuICAgICAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UpID8gXCJydW5uaW5nXCIgOiBcImVtcHR5XCJcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcihjbGVhckRhdGE6IGJvb2xlYW4gPSB0cnVlLCBnb3RvRmlyc3RQYWdlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChjbGVhckRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNIYXNoID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZ290b0ZpcnN0UGFnZSAmJiB0aGlzLnZpc2libGVQYWdlQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgbWVyZ2VWYWx1ZXMoc3JjOiBhbnksIGRlc3Q6IGFueSkge1xyXG4gICAgICAgIGlmICghZGVzdCB8fCAhc3JjKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBzcmNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZGVzdFtrZXldKSBkZXN0W2tleV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VWYWx1ZXModmFsdWUsIGRlc3Rba2V5XSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGRhdGVDdXN0b21XaWRnZXRzKHBhZ2U6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIGlmICghcGFnZSkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcGFnZS5xdWVzdGlvbnNbaV0uY3VzdG9tV2lkZ2V0ID0gQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXN0b21XaWRnZXQocGFnZS5xdWVzdGlvbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjdXJyZW50UGFnZUNoYW5nZWQobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIHRoaXMub25DdXJyZW50UGFnZUNoYW5nZWQuZmlyZSh0aGlzLCB7ICdvbGRDdXJyZW50UGFnZSc6IG9sZFZhbHVlLCAnbmV3Q3VycmVudFBhZ2UnOiBuZXdWYWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9ncmVzcygpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiAwO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgKyAxO1xyXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoKGluZGV4ICogMTAwIC8gdGhpcy52aXNpYmxlUGFnZUNvdW50KSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gcGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgPT0gXCJzaG93XCIgfHxcclxuICAgICAgICAgICAgKHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ICE9IFwiaGlkZVwiICYmIHRoaXMuc2hvd05hdmlnYXRpb25CdXR0b25zKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNFZGl0TW9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubW9kZSA9PSBcImVkaXRcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5tb2RlID09IFwiZGlzcGxheVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRGVzaWduTW9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNEZXNpZ25Nb2RlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXREZXNpZ25Nb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pc0Rlc2lnbk1vZGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNDb29raWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZTtcclxuICAgICAgICByZXR1cm4gY29va2llcyAmJiBjb29raWVzLmluZGV4T2YodGhpcy5jb29raWVOYW1lICsgXCI9dHJ1ZVwiKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvb2tpZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPXRydWU7IGV4cGlyZXM9RnJpLCAzMSBEZWMgOTk5OSAwOjA6MCBHTVRcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkZWxldGVDb29raWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHJldHVybjtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSB0aGlzLmNvb2tpZU5hbWUgKyBcIj07XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbmV4dFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNMYXN0UGFnZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUgJiYgdGhpcy5pc0N1cnJlbnRQYWdlSGFzRXJyb3JzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9TZXJ2ZXJWYWxpZGF0aW9uKCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmRvTmV4dFBhZ2UoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGdldCBpc0N1cnJlbnRQYWdlSGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlLmhhc0Vycm9ycyh0cnVlLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBwcmV2UGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4IC0gMV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY29tcGxldGVMYXN0UGFnZSgpIDogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLmlzQ3VycmVudFBhZ2VIYXNFcnJvcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24oKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGFnZSgpOiBib29sZWFuIHsgXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgPT0gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgcmV0dXJuIHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IHZQYWdlcy5sZW5ndGggLSAxO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRvQ29tcGxldGUoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhclVudXNlZFZhbHVlcygpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29va2llKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb21wbGV0ZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ29tcGxldGUuZmlyZSh0aGlzLCBudWxsKTtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXlQb3N0SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kUmVzdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc1ZhbGlkYXRpbmdPblNlcnZlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXJWYWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBzZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5vbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXNWYWxpZGF0aW5nT25TZXJ2ZXJDaGFuZ2VkKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgZG9TZXJ2ZXJWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBvcHRpb25zID0geyBkYXRhOiB7fSwgZXJyb3JzOiB7fSwgc3VydmV5OiB0aGlzLCBjb21wbGV0ZSA6IGZ1bmN0aW9uICgpIHsgc2VsZi5jb21wbGV0ZVNlcnZlclZhbGlkYXRpb24ob3B0aW9ucyk7IH0gfTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudFBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuY3VycmVudFBhZ2UucXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIG9wdGlvbnMuZGF0YVtxdWVzdGlvbi5uYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKHRydWUpO1xyXG4gICAgICAgIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29tcGxldGVTZXJ2ZXJWYWxpZGF0aW9uKG9wdGlvbnM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIoZmFsc2UpO1xyXG4gICAgICAgIGlmICghb3B0aW9ucyAmJiAhb3B0aW9ucy5zdXJ2ZXkpIHJldHVybjtcclxuICAgICAgICB2YXIgc2VsZiA9IG9wdGlvbnMuc3VydmV5O1xyXG4gICAgICAgIHZhciBoYXNFcnJvcnMgPSBmYWxzZTtcclxuICAgICAgICBpZiAob3B0aW9ucy5lcnJvcnMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvcHRpb25zLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gc2VsZi5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbiAmJiBxdWVzdGlvbltcImVycm9yc1wiXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bXCJhZGRFcnJvclwiXShuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvcnNbbmFtZV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5pc0xhc3RQYWdlKSBzZWxmLmRvQ29tcGxldGUoKTtcclxuICAgICAgICAgICAgZWxzZSBzZWxmLmRvTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZG9OZXh0UGFnZSgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrT25QYWdlVHJpZ2dlcnMoKTtcclxuICAgICAgICBpZiAodGhpcy5zZW5kUmVzdWx0T25QYWdlTmV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRSZXN1bHQodGhpcy5zdXJ2ZXlQb3N0SWQsIHRoaXMuY2xpZW50SWQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCArIDFdO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldENvbXBsZXRlZCgpIHtcclxuICAgICAgICB0aGlzLmlzQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkQ29tcGxldGVkSHRtbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsZXRlZEh0bWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0h0bWwodGhpcy5jb21wbGV0ZWRIdG1sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0aW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRMb2FkaW5nSHRtbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwibG9hZGluZ1N1cnZleVwiKSArIFwiPC9oMz5cIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJwcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oaW5kZXgsIHZQYWdlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGFmdGVyUmVuZGVyU3VydmV5KGh0bWxFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyU3VydmV5LmZpcmUodGhpcywgeyBzdXJ2ZXk6IHRoaXMsIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuICAgIGFmdGVyUmVuZGVyUGFnZShodG1sRWxlbWVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJQYWdlLmlzRW1wdHkpIHJldHVybjtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYWdlLmZpcmUodGhpcywgeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgICBhZnRlclJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24uZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50IH0pO1xyXG4gICAgfVxyXG4gICAgYWZ0ZXJSZW5kZXJQYW5lbChwYW5lbDogSUVsZW1lbnQsIGh0bWxFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFuZWwuZmlyZSh0aGlzLCB7IHBhbmVsOiBwYW5lbCwgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGxvYWRGaWxlKG5hbWU6IHN0cmluZywgZmlsZTogRmlsZSwgc3RvcmVEYXRhQXNUZXh0OiBib29sZWFuLCB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nKT0+YW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGFjY2VwdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vblVwbG9hZEZpbGUuZmlyZSh0aGlzLCB7IG5hbWU6IG5hbWUsIGZpbGU6IGZpbGUsIGFjY2VwdDogYWNjZXB0IH0pO1xyXG4gICAgICAgIGlmICghYWNjZXB0KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFzdG9yZURhdGFBc1RleHQgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29yZShuYW1lLCBmaWxlLCB1cGxvYWRpbmdDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHVwbG9hZEZpbGVDb3JlKG5hbWU6IHN0cmluZywgZmlsZTogRmlsZSwgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZykgPT4gYW55KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaykgdXBsb2FkaW5nQ2FsbGJhY2soXCJ1cGxvYWRpbmdcIik7XHJcbiAgICAgICAgbmV3IGR4U3VydmV5U2VydmljZSgpLnNlbmRGaWxlKHRoaXMuc3VydmV5UG9zdElkLCBmaWxlLCBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBpZiAodXBsb2FkaW5nQ2FsbGJhY2spIHVwbG9hZGluZ0NhbGxiYWNrKHN1Y2Nlc3MgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFZhbHVlKG5hbWUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0UGFnZShpbmRleDogbnVtYmVyKTogUGFnZU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICBhZGRQYWdlKHBhZ2U6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIGlmIChwYWdlID09IG51bGwpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhZ2VzLnB1c2gocGFnZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfVxyXG4gICAgYWRkTmV3UGFnZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuY3JlYXRlTmV3UGFnZShuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFBhZ2UocGFnZSk7XHJcbiAgICAgICAgcmV0dXJuIHBhZ2U7XHJcbiAgICB9XHJcbiAgICByZW1vdmVQYWdlKHBhZ2U6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZihwYWdlKTtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPT0gcGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlcy5sZW5ndGggPiAwID8gdGhpcy5wYWdlc1swXSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRRdWVzdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uTmFtZSA9IHF1ZXN0aW9uc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSBxdWVzdGlvbk5hbWUgPSBxdWVzdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYocXVlc3Rpb25OYW1lID09IG5hbWUpIHJldHVybiBxdWVzdGlvbnNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZXMobmFtZXM6IHN0cmluZ1tdLCBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElRdWVzdGlvbltdIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKCFuYW1lcykgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFuYW1lc1tpXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZXNbaV0sIGNhc2VJbnNlbnNpdGl2ZSk7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbikgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VCeUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcclxuICAgICAgICAgICAgaWYocGFnZS5jb250YWluc0VsZW1lbnQoZWxlbWVudCkpIHJldHVybiBwYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlQnlRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uKTogUGFnZU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlFbGVtZW50KHF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlQnlOYW1lKG5hbWU6IHN0cmluZyk6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5wYWdlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZXNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSk6IFBhZ2VNb2RlbFtde1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoIW5hbWVzKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmdldFBhZ2VCeU5hbWUobmFtZXNbaV0pO1xyXG4gICAgICAgICAgICBpZiAocGFnZSkgcmVzdWx0LnB1c2gocGFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0QWxsUXVlc3Rpb25zKHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UpOiBBcnJheTxJUXVlc3Rpb24+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PElRdWVzdGlvbj4oKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLmFkZFF1ZXN0aW9uc1RvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVOZXdQYWdlKG5hbWU6IHN0cmluZykgeyByZXR1cm4gbmV3IFBhZ2VNb2RlbChuYW1lKTsgfVxyXG4gICAgcHJpdmF0ZSBub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIHZhciBxdWVzdGlvbiA9IG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zW2ldLm5hbWUgIT0gbmFtZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLmRvU3VydmV5VmFsdWVDaGFuZ2VkKHF1ZXN0aW9uLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7ICduYW1lJzogbmFtZSwgJ3F1ZXN0aW9uJzogcXVlc3Rpb24sICd2YWx1ZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TdXJ2ZXlWYWx1ZUNoYW5nZWQocXVlc3Rpb25zW2ldLCB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uc1tpXS5uYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGRvU3VydmV5VmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrT25QYWdlVHJpZ2dlcnMoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocXVlc3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhxdWVzdGlvbi5uYW1lLCB2YWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZVF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbkJhc2U+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xyXG4gICAgICAgIGlmICghcGFnZSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHBhZ2UucXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLm5hbWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChxdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrVHJpZ2dlcnMobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55LCBpc09uTmV4dFBhZ2U6IGJvb2xlYW4pIHtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy50cmlnZ2Vycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcnNbaV07XHJcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyLm5hbWUgPT0gbmFtZSAmJiB0cmlnZ2VyLmlzT25OZXh0UGFnZSA9PSBpc09uTmV4dFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRyaWdnZXIuY2hlY2sobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBkb0VsZW1lbnRzT25Mb2FkKCkge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLm9uU3VydmV5TG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcclxuICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLnBhZ2VzO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgcGFnZXNbaV0ucnVuQ29uZGl0aW9uKHRoaXMudmFsdWVzSGFzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHNlbmRSZXN1bHQocG9zdElkOiBzdHJpbmcgPSBudWxsLCBjbGllbnRJZDogc3RyaW5nID0gbnVsbCwgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQgJiYgdGhpcy5vblBhcnRpYWxTZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25QYXJ0aWFsU2VuZC5maXJlKHRoaXMsIG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwb3N0SWQgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcclxuICAgICAgICAgICAgcG9zdElkID0gdGhpcy5zdXJ2ZXlQb3N0SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcG9zdElkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGNsaWVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCAmJiAhdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCkuc2VuZFJlc3VsdChwb3N0SWQsIHRoaXMuZGF0YSwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgICAgc2VsZi5vblNlbmRSZXN1bHQuZmlyZShzZWxmLCB7IHN1Y2Nlc3M6IHN1Y2Nlc3MsIHJlc3BvbnNlOiByZXNwb25zZX0pO1xyXG4gICAgICAgIH0sIHRoaXMuY2xpZW50SWQsIGlzUGFydGlhbENvbXBsZXRlZCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCkuZ2V0UmVzdWx0KHJlc3VsdElkLCBuYW1lLCBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgZGF0YTogYW55LCBkYXRhTGlzdDogYW55W10sIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgICAgc2VsZi5vbkdldFJlc3VsdC5maXJlKHNlbGYsIHsgc3VjY2Vzczogc3VjY2VzcywgZGF0YTogZGF0YSwgZGF0YUxpc3Q6IGRhdGFMaXN0LCByZXNwb25zZTogcmVzcG9uc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbG9hZFN1cnZleUZyb21TZXJ2aWNlKHN1cnZleUlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHN1cnZleUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5SWQgPSBzdXJ2ZXlJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCk7XHJcbiAgICAgICAgbmV3IGR4U3VydmV5U2VydmljZSgpLmxvYWRTdXJ2ZXkodGhpcy5zdXJ2ZXlJZCwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIHNlbGYuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRKc29uT2JqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLm5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLm9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tQYWdlVmlzaWJpbGl0eShxdWVzdGlvbjogSVF1ZXN0aW9uLCBvbGRRdWVzdGlvblZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb24pO1xyXG4gICAgICAgIGlmICghcGFnZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHBhZ2UuaXNWaXNpYmxlO1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPSBwYWdlLmdldElzUGFnZVZpc2libGUocXVlc3Rpb24pIHx8IG9sZFF1ZXN0aW9uVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlSW5kZXhlcygpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyh0aGlzLnNob3dQYWdlTnVtYmVycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uUGFnZVwiKSB7XHJcbiAgICAgICAgICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1BhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uVmlzaWJsZUluZGV4ZXModmlzUGFnZXNbaV0ucXVlc3Rpb25zLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25WaXNpYmxlSW5kZXhlcyh0aGlzLmdldEFsbFF1ZXN0aW9ucyhmYWxzZSksIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlUGFnZVZpc2libGVJbmRleGVzKHNob3dJbmRleDogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0udmlzaWJsZUluZGV4ID0gdGhpcy5wYWdlc1tpXS52aXNpYmxlID8gKGluZGV4KyspIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ubnVtID0gc2hvd0luZGV4ICYmIHRoaXMucGFnZXNbaV0udmlzaWJsZSA/IHRoaXMucGFnZXNbaV0udmlzaWJsZUluZGV4ICsgMSA6IC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlUXVlc3Rpb25WaXNpYmxlSW5kZXhlcyhxdWVzdGlvbnM6IElRdWVzdGlvbltdLCBzaG93SW5kZXg6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5zZXRWaXNpYmxlSW5kZXgoc2hvd0luZGV4ICYmIHF1ZXN0aW9uc1tpXS52aXNpYmxlICYmIHF1ZXN0aW9uc1tpXS5oYXNUaXRsZSA/IChpbmRleCsrKSA6IC0xKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnZXQgaXNMb2FkaW5nRnJvbUpzb24oKSB7IHJldHVybiB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWU7IH1cclxuICAgIHByaXZhdGUgc2V0SnNvbk9iamVjdChqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWpzb25PYmopIHJldHVybjtcclxuICAgICAgICB0aGlzLmpzb25FcnJvcnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGpzb25Db252ZXJ0ZXIgPSBuZXcgSnNvbk9iamVjdCgpO1xyXG4gICAgICAgIGpzb25Db252ZXJ0ZXIudG9PYmplY3QoanNvbk9iaiwgdGhpcyk7XHJcbiAgICAgICAgaWYgKGpzb25Db252ZXJ0ZXIuZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5qc29uRXJyb3JzID0ganNvbkNvbnZlcnRlci5lcnJvcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvY2Vzc2VkVGV4dFZhbHVlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0Nvb2tpZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRvQ29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kb0VsZW1lbnRzT25Mb2FkKCk7XHJcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlQ3JlYXRpbmcoKSB7IH1cclxuICAgIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkgeyB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVByb2Nlc3NlZFRleHRWYWx1ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tcInBhZ2Vub1wiXSA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBzZWxmLmN1cnJlbnRQYWdlICE9IG51bGwgPyBzZWxmLnZpc2libGVQYWdlcy5pbmRleE9mKHNlbGYuY3VycmVudFBhZ2UpICsgMSA6IDA7IH1cclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbXCJwYWdlY291bnRcIl0gPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gc2VsZi52aXNpYmxlUGFnZUNvdW50OyB9XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRRdWVzdGlvblRvUHJvY2Vzc2VkVGV4dFZhbHVlcyhxdWVzdGlvbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkUXVlc3Rpb25Ub1Byb2Nlc3NlZFRleHRWYWx1ZXMocXVlc3Rpb246IElRdWVzdGlvbikge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1txdWVzdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCldID0gXCJxdWVzdGlvblwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBoYXNQcm9jZXNzZWRUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRGaXJzdE5hbWUobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tmaXJzdE5hbWUudG9Mb3dlckNhc2UoKV07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFByb2Nlc3NlZFRleHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKG5hbWUpO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodmFsID09IFwidmFyaWFibGVcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShuYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsID09IFwicXVlc3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKGZpcnN0TmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBuYW1lID0gcXVlc3Rpb24ubmFtZSArIG5hbWUuc3Vic3RyKGZpcnN0TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzSGFzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWwgPT0gXCJ2YWx1ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUobmFtZSwgdGhpcy52YWx1ZXNIYXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbChuYW1lKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0uY2xlYXJVbnVzZWRWYWx1ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckludmlzaWJsZVF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjbGVhckludmlzaWJsZVF1ZXN0aW9uVmFsdWVzKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS52aXNpYmxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclZhbHVlKHF1ZXN0aW9uc1tpXS5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhcmlhYmxlc0hhc2hbbmFtZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0VmFyaWFibGUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW25hbWUudG9Mb3dlckNhc2UoKV0gPSBcInZhcmlhYmxlXCI7XHJcbiAgICB9XHJcbiAgICAvL0lTdXJ2ZXkgZGF0YVxyXG4gICAgcHJvdGVjdGVkIGdldFVuYmluZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICAvL2RvIG5vdCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IGluc3RhbmNlISEhXHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlc0hhc2hbbmFtZV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVFcXVhbChuYW1lLCBuZXdWYWx1ZSkpIHJldHVybjtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzSGFzaFtuYW1lXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc0hhc2hbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW25hbWUudG9Mb3dlckNhc2UoKV0gPSBcInZhbHVlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm90aWZ5UXVlc3Rpb25PblZhbHVlQ2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jaGVja1RyaWdnZXJzKG5hbWUsIG5ld1ZhbHVlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XHJcbiAgICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1ZhbHVlRXF1YWwobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09IFwiXCIpIG5ld1ZhbHVlID0gbnVsbDtcclxuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gbnVsbCkgcmV0dXJuIG5ld1ZhbHVlID09PSBvbGRWYWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZ29OZXh0UGFnZUF1dG9tYXRpYyB8fCAhdGhpcy5jdXJyZW50UGFnZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24uc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSkpIHJldHVybjtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV0uaGFzSW5wdXQgJiYgIXRoaXMuZ2V0VmFsdWUocXVlc3Rpb25zW2ldLm5hbWUpKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UGFnZS5oYXNFcnJvcnModHJ1ZSwgZmFsc2UpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWdlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvQ29tcGxldGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZGF0YVtuYW1lICsgdGhpcy5jb21tZW50UHJlZml4XTtcclxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIG5hbWUgPSBuYW1lICsgdGhpcy5jb21tZW50UHJlZml4O1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJcIiB8fCBuZXdWYWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNIYXNoW25hbWVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyVmFsdWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuYW1lLCBudWxsKTtcclxuICAgICAgICB0aGlzLnNldENvbW1lbnQobmFtZSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBxdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ3F1ZXN0aW9uJzogcXVlc3Rpb24sICduYW1lJzogcXVlc3Rpb24ubmFtZSwgJ3Zpc2libGUnOiBuZXdWYWx1ZSB9KTtcclxuICAgICAgICB0aGlzLmNoZWNrUGFnZVZpc2liaWxpdHkocXVlc3Rpb24sICFuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZTogSVBhZ2UsIG5ld1ZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25QYWdlVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7ICdwYWdlJzogcGFnZSwgJ3Zpc2libGUnOiBuZXdWYWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHF1ZXN0aW9uQWRkZWQocXVlc3Rpb246IElRdWVzdGlvbiwgaW5kZXg6IG51bWJlciwgcGFyZW50UGFuZWw6IGFueSwgcm9vdFBhbmVsOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5hZGRRdWVzdGlvblRvUHJvY2Vzc2VkVGV4dFZhbHVlcyhxdWVzdGlvbik7XHJcbiAgICAgICAgdGhpcy5vblF1ZXN0aW9uQWRkZWQuZmlyZSh0aGlzLCB7ICdxdWVzdGlvbic6IHF1ZXN0aW9uLCAnbmFtZSc6IHF1ZXN0aW9uLm5hbWUsICdpbmRleCc6IGluZGV4LCAncGFyZW50UGFuZWwnOiBwYXJlbnRQYW5lbCwgJ3Jvb3RQYW5lbCc6IHJvb3RQYW5lbCB9KTtcclxuICAgIH1cclxuICAgIHF1ZXN0aW9uUmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25RdWVzdGlvblJlbW92ZWQuZmlyZSh0aGlzLCB7ICdxdWVzdGlvbic6IHF1ZXN0aW9uLCAnbmFtZSc6IHF1ZXN0aW9uLm5hbWUgfSk7XHJcbiAgICB9XHJcbiAgICBwYW5lbEFkZGVkKHBhbmVsOiBJRWxlbWVudCwgaW5kZXg6IG51bWJlciwgcGFyZW50UGFuZWw6IGFueSwgcm9vdFBhbmVsOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblBhbmVsQWRkZWQuZmlyZSh0aGlzLCB7ICdwYW5lbCc6IHBhbmVsLCAnbmFtZSc6IHBhbmVsLm5hbWUsICdpbmRleCc6IGluZGV4LCAncGFyZW50UGFuZWwnOiBwYXJlbnRQYW5lbCwgJ3Jvb3RQYW5lbCc6IHJvb3RQYW5lbCB9KTtcclxuICAgIH1cclxuICAgIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblBhbmVsUmVtb3ZlZC5maXJlKHRoaXMsIHsgJ3BhbmVsJzogcGFuZWwsICduYW1lJzogcGFuZWwubmFtZSB9KTtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlUXVlc3Rpb24obmFtZTogc3RyaW5nKTogU3VydmV5RXJyb3Ige1xyXG4gICAgICAgIGlmICh0aGlzLm9uVmFsaWRhdGVRdWVzdGlvbi5pc0VtcHR5KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgbmFtZTogbmFtZSwgdmFsdWU6IHRoaXMuZ2V0VmFsdWUobmFtZSksIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgdGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uZmlyZSh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5lcnJvciA/IG5ldyBDdXN0b21FcnJvcihvcHRpb25zLmVycm9yKSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm9jZXNzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBvcHRpb25zID0geyBodG1sOiBodG1sIH07XHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NIdG1sLmZpcmUodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1RleHQob3B0aW9ucy5odG1sKTtcclxuICAgIH1cclxuICAgIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzKHRleHQpO1xyXG4gICAgfVxyXG4gICAgLy9JU3VydmV5VHJpZ2dlck93bmVyXHJcbiAgICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtde1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UGFnZXNCeU5hbWVzKHBhZ2VzKSk7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocmVzdWx0LCB0aGlzLmdldFF1ZXN0aW9uc0J5TmFtZXMocXVlc3Rpb25zKSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICBpZiAoaXNWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhcmlhYmxlKG5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vTWFrZSBsb2NhbGl6YWJsZTogY29tcGxldGVkSHRtbCwgcGFnZVByZXZUZXh0LCBwYWdlTmV4dFRleHQsIGNvbXBsZXRlVGV4dFxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInN1cnZleVwiLCBbeyBuYW1lOiBcImxvY2FsZVwiLCBjaG9pY2VzOiAoKSA9PiB7IHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0TG9jYWxlcygpIH0gfSxcclxuICAgIHtuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwifSwgeyBuYW1lOiBcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWV9LCBcclxuICAgIHtuYW1lOiBcImNvbXBsZXRlZEh0bWw6aHRtbFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tcGxldGVkSHRtbFwifSwgeyBuYW1lOiBcInBhZ2VzXCIsIGNsYXNzTmFtZTogXCJwYWdlXCIsIHZpc2libGU6IGZhbHNlIH0sXHJcbiAgICB7IG5hbWU6IFwicXVlc3Rpb25zXCIsIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIiwgdmlzaWJsZTogZmFsc2UsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG51bGw7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmosIHZhbHVlLCBqc29uQ29udmVydGVyKSB7IHZhciBwYWdlID0gb2JqLmFkZE5ld1BhZ2UoXCJcIik7IGpzb25Db252ZXJ0ZXIudG9PYmplY3QoeyBxdWVzdGlvbnM6IHZhbHVlIH0sIHBhZ2UpOyB9IH0sXHJcbiAgICB7IG5hbWU6IFwidHJpZ2dlcnM6dHJpZ2dlcnNcIiwgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl0cmlnZ2VyXCIsIGNsYXNzTmFtZVBhcnQ6IFwidHJpZ2dlclwiIH0sXHJcbiAgICBcInN1cnZleUlkXCIsIFwic3VydmV5UG9zdElkXCIsIFwiY29va2llTmFtZVwiLCBcInNlbmRSZXN1bHRPblBhZ2VOZXh0OmJvb2xlYW5cIixcclxuICAgIHsgbmFtZTogXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIHsgbmFtZTogXCJzaG93VGl0bGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIFxyXG4gICAgeyBuYW1lOiBcInNob3dQYWdlVGl0bGVzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCB7IG5hbWU6IFwic2hvd0NvbXBsZXRlZFBhZ2U6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXHJcbiAgICBcInNob3dQYWdlTnVtYmVyczpib29sZWFuXCIsIHsgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIGRlZmF1bHQ6IFwib25cIiwgY2hvaWNlczogW1wib25cIiwgXCJvblBhZ2VcIiwgXCJvZmZcIl0gfSxcclxuICAgIHsgbmFtZTogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIiwgZGVmYXVsdDogXCJ0b3BcIiwgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwic2hvd1Byb2dyZXNzQmFyXCIsIGRlZmF1bHQ6IFwib2ZmXCIsIGNob2ljZXM6IFtcIm9mZlwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSB9LFxyXG4gICAgeyBuYW1lOiBcIm1vZGVcIiwgZGVmYXVsdDogXCJlZGl0XCIsIGNob2ljZXM6IFtcImVkaXRcIiwgXCJkaXNwbGF5XCJdIH0sXHJcbiAgICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIFwiZ29OZXh0UGFnZUF1dG9tYXRpYzpib29sZWFuXCIsIFwiY2xlYXJJbnZpc2libGVWYWx1ZXM6Ym9vbGVhblwiLFxyXG4gICAgeyBuYW1lOiBcInBhZ2VQcmV2VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFnZVByZXZUZXh0XCJ9LFxyXG4gICAgeyBuYW1lOiBcInBhZ2VOZXh0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFnZU5leHRUZXh0XCJ9LFxyXG4gICAgeyBuYW1lOiBcImNvbXBsZXRlVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tcGxldGVUZXh0XCJ9LFxyXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkVGV4dFwiLCBkZWZhdWx0OiBcIipcIiB9LCBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCB7bmFtZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwifV0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXkudHMiLCJleHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3Nvckl0ZW0ge1xyXG4gICAgcHVibGljIHN0YXJ0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZW5kOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0UHJlUHJvY2Vzc29yIHtcclxuICAgIHB1YmxpYyBvblByb2Nlc3M6IChuYW1lOiBzdHJpbmcpID0+IGFueTtcclxuICAgIHB1YmxpYyBvbkhhc1ZhbHVlOiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuICAgIHB1YmxpYyBwcm9jZXNzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcclxuICAgICAgICBpZiAoIXRoaXMub25Qcm9jZXNzKSByZXR1cm4gdGV4dDtcclxuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKHRleHQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZSh0ZXh0LnN1YnN0cmluZyhpdGVtLnN0YXJ0ICsgMSwgaXRlbS5lbmQpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhblByb2Nlc3NOYW1lKG5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25IYXNWYWx1ZSAmJiAhdGhpcy5vbkhhc1ZhbHVlKG5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5vblByb2Nlc3MobmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cigwLCBpdGVtLnN0YXJ0KSArIHZhbHVlICsgdGV4dC5zdWJzdHIoaXRlbS5lbmQgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEl0ZW1zKHRleHQ6IHN0cmluZyk6IEFycmF5PFRleHRQcmVQcm9jZXNzb3JJdGVtPiB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIHZhciBzdGFydCA9IC0xO1xyXG4gICAgICAgIHZhciBjaCA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY2ggPSB0ZXh0W2ldO1xyXG4gICAgICAgICAgICBpZiAoY2ggPT0gJ3snKSBzdGFydCA9IGk7XHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAnfScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgVGV4dFByZVByb2Nlc3Nvckl0ZW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0YXJ0ID0gc3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5lbmQgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIHJldHVybiBuYW1lLnRyaW0oKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2FuUHJvY2Vzc05hbWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaCA9IG5hbWVbaV07XHJcbiAgICAgICAgICAgIC8vVE9ET1xyXG4gICAgICAgICAgICBpZiAoY2ggPT0gJyAnIHx8IGNoID09ICctJyB8fCBjaCA9PSAnJicpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50cyIsImltcG9ydCB7QmFzZSwgU3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gJy4vanNvbm9iamVjdCc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogYW55LCBwdWJsaWMgZXJyb3I6IFN1cnZleUVycm9yID0gbnVsbCkge1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VmFsaWRhdG9yIGV4dGVuZHMgQmFzZSB7XHJcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nID0gXCJcIjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykgOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnRleHQpIHJldHVybiB0aGlzLnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdG9yT3duZXIge1xyXG4gICAgdmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPjtcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBnZXRWYWxpZGF0b3JUaXRsZSgpOiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJ1bm5lciB7XHJcbiAgICBwdWJsaWMgcnVuKG93bmVyOiBJVmFsaWRhdG9yT3duZXIpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvd25lci52YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JSZXN1bHQgPSBvd25lci52YWxpZGF0b3JzW2ldLnZhbGlkYXRlKG93bmVyLnZhbHVlLCBvd25lci5nZXRWYWxpZGF0b3JUaXRsZSgpKTtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRvclJlc3VsdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yUmVzdWx0LmVycm9yKSByZXR1cm4gdmFsaWRhdG9yUmVzdWx0LmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvclJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG93bmVyLnZhbHVlID0gdmFsaWRhdG9yUmVzdWx0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTnVtZXJpY1ZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbWluVmFsdWU6IG51bWJlciA9IG51bGwsIHB1YmxpYyBtYXhWYWx1ZTogbnVtYmVyID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJudW1lcmljdmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAoIXZhbHVlIHx8ICF0aGlzLmlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgUmVxdXJlTnVtZXJpY0Vycm9yKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFZhbGlkYXRvclJlc3VsdChwYXJzZUZsb2F0KHZhbHVlKSk7XHJcbiAgICAgICAgaWYgKHRoaXMubWluVmFsdWUgJiYgdGhpcy5taW5WYWx1ZSA+IHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXhWYWx1ZSAmJiB0aGlzLm1heFZhbHVlIDwgcmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvciA9IG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgPyBudWxsIDogcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHZOYW1lID0gbmFtZSA/IG5hbWUgOiBcInZhbHVlXCI7XHJcbiAgICAgICAgaWYgKHRoaXMubWluVmFsdWUgJiYgdGhpcy5tYXhWYWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNNaW5NYXhcIilbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pblZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNNaW5cIilbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWluVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY01heFwiKVtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5tYXhWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc051bWJlcih2YWx1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1pbkxlbmd0aDogbnVtYmVyID0gMCwgcHVibGljIG1heExlbmd0aDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJ0ZXh0dmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXhMZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdGhpcy5tYXhMZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRleHRNaW5NYXhMZW5ndGhcIilbXCJmb3JtYXRcIl0odGhpcy5taW5MZW5ndGgsIHRoaXMubWF4TGVuZ3RoKTtcclxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwKSByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRleHRNaW5MZW5ndGhcIilbXCJmb3JtYXRcIl0odGhpcy5taW5MZW5ndGgpO1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidGV4dE1heExlbmd0aFwiKVtcImZvcm1hdFwiXSh0aGlzLm1heExlbmd0aCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBbnN3ZXJDb3VudFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbWluQ291bnQ6IG51bWJlciA9IG51bGwsIHB1YmxpYyBtYXhDb3VudDogbnVtYmVyID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJhbnN3ZXJjb3VudHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuY29uc3RydWN0b3IgIT0gQXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBjb3VudCA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5taW5Db3VudCAmJiBjb3VudCA8IHRoaXMubWluQ291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtaW5TZWxlY3RFcnJvclwiKVtcImZvcm1hdFwiXSh0aGlzLm1pbkNvdW50KSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4Q291bnQgJiYgY291bnQgPiB0aGlzLm1heENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF4U2VsZWN0RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5tYXhDb3VudCkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWdleFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVnZXg6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicmVnZXh2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWdleCB8fCAhdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAodGhpcy5yZWdleCk7XHJcbiAgICAgICAgaWYgKHJlLnRlc3QodmFsdWUpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdCh2YWx1ZSwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEVtYWlsVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIHByaXZhdGUgcmUgPSAvXigoW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClcXFtcXF1cXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdK1xcLikrW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImVtYWlsdmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5yZS50ZXN0KHZhbHVlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSkpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJpbnZhbGlkRW1haWxcIik7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzdXJ2ZXl2YWxpZGF0b3JcIiwgW1widGV4dFwiXSk7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJudW1lcmljdmFsaWRhdG9yXCIsIFtcIm1pblZhbHVlOm51bWJlclwiLCBcIm1heFZhbHVlOm51bWJlclwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE51bWVyaWNWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJ0ZXh0dmFsaWRhdG9yXCIsIFtcIm1pbkxlbmd0aDpudW1iZXJcIiwgXCJtYXhMZW5ndGg6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVGV4dFZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImFuc3dlcmNvdW50dmFsaWRhdG9yXCIsIFtcIm1pbkNvdW50Om51bWJlclwiLCBcIm1heENvdW50Om51bWJlclwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEFuc3dlckNvdW50VmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicmVnZXh2YWxpZGF0b3JcIiwgW1wicmVnZXhcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBSZWdleFZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImVtYWlsdmFsaWRhdG9yXCIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRW1haWxWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3ZhbGlkYXRvci50cyIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWFpbi5zY3NzXG4vLyBtb2R1bGUgaWQgPSAyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuLi9wYWdlXCI7XHJcbmltcG9ydCB7UGFuZWxNb2RlbEJhc2UsIFBhbmVsTW9kZWwsIFF1ZXN0aW9uUm93TW9kZWx9IGZyb20gXCIuLi9wYW5lbFwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7U3VydmV5RWxlbWVudCwgSUVsZW1lbnR9IGZyb20gXCIuLi9iYXNlXCI7XHJcbmltcG9ydCB7RWxlbWVudEZhY3Rvcnl9IGZyb20gXCIuLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJvdyBleHRlbmRzIFF1ZXN0aW9uUm93TW9kZWwge1xyXG4gICAga29WaXNpYmxlOiBhbnk7IGtvRWxlbWVudHM6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYW5lbDogUGFuZWxNb2RlbEJhc2UpIHtcclxuICAgICAgICBzdXBlcihwYW5lbCk7XHJcbiAgICAgICAgdGhpcy5rb1Zpc2libGUgPSBrby5vYnNlcnZhYmxlKHRoaXMudmlzaWJsZSk7XHJcbiAgICAgICAgdGhpcy5rb0VsZW1lbnRzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkRWxlbWVudChxOiBJRWxlbWVudCkge1xyXG4gICAgICAgIHN1cGVyLmFkZEVsZW1lbnQocSk7XHJcbiAgICAgICAgdGhpcy5rb0VsZW1lbnRzKHRoaXMuZWxlbWVudHMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5rb1Zpc2libGUodGhpcy52aXNpYmxlKTtcclxuICAgICAgICBzdXBlci5vblZpc2libGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMga29BZnRlclJlbmRlcihlbCwgY29uKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdEVsID0gZWxbaV07XHJcbiAgICAgICAgICAgIHZhciBuTmFtZSA9IHRFbC5ub2RlTmFtZTtcclxuICAgICAgICAgICAgaWYgKG5OYW1lID09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhbmVsSW1wbGVtZW50b3JCYXNlIHtcclxuICAgIGtvUm93czogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmtvUm93cyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xyXG4gICAgICAgIHRoaXMucGFuZWwucm93c0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uKCkge3NlbGYua29Sb3dzKHNlbGYucGFuZWwucm93cyk7IH07XHJcbiAgICAgICAgdGhpcy5wYW5lbFtcImtvUXVlc3Rpb25BZnRlclJlbmRlclwiXSA9IGZ1bmN0aW9uIChlbCwgY29uKSB7IHNlbGYua29RdWVzdGlvbkFmdGVyUmVuZGVyKGVsLCBjb24pOyB9O1xyXG4gICAgICAgIHRoaXMucGFuZWxbXCJrb1BhbmVsQWZ0ZXJSZW5kZXJcIl0gPSBmdW5jdGlvbiAoZWwsIGNvbikgeyBzZWxmLmtvUGFuZWxBZnRlclJlbmRlcihlbCwgY29uKTsgfTtcclxuICAgICAgICB0aGlzLnBhbmVsW1wia29Sb3dzXCJdID0gdGhpcy5rb1Jvd3M7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQga29RdWVzdGlvbkFmdGVyUmVuZGVyKGVsZW1lbnRzLCBjb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFuZWwuZGF0YSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBlbCA9IFN1cnZleUVsZW1lbnQuR2V0Rmlyc3ROb25UZXh0RWxlbWVudChlbGVtZW50cyk7XHJcbiAgICAgICAgaWYgKGVsKSB0aGlzLnBhbmVsLmRhdGEuYWZ0ZXJSZW5kZXJRdWVzdGlvbihjb24sIGVsKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBrb1BhbmVsQWZ0ZXJSZW5kZXIoZWxlbWVudHMsIGNvbikge1xyXG4gICAgICAgIGlmICghdGhpcy5wYW5lbC5kYXRhKSByZXR1cm47XHJcbiAgICAgICAgdmFyIGVsID0gU3VydmV5RWxlbWVudC5HZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzKTtcclxuICAgICAgICBpZiAoZWwpIHRoaXMucGFuZWwuZGF0YS5hZnRlclJlbmRlclBhbmVsKGNvbiwgZWwpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGFnZUltcGxlbWVudG9yIGV4dGVuZHMgUGFuZWxJbXBsZW1lbnRvckJhc2Uge1xyXG4gICAga29ObzogYW55OyBcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYW5lbDogUGFuZWxNb2RlbEJhc2UpIHtcclxuICAgICAgICBzdXBlcihwYW5lbCk7XHJcbiAgICAgICAgdGhpcy5rb05vID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcclxuICAgICAgICB0aGlzLnBhbmVsW1wia29Ob1wiXSA9IHRoaXMua29ObztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhbmVsIGV4dGVuZHMgUGFuZWxNb2RlbCB7XHJcbiAgICBrb0lubmVyTWFyZ2luOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgbmV3IFBhbmVsSW1wbGVtZW50b3JCYXNlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7IHNlbGYub25SZW5kZXJXaWR0aENoYW5nZWQoKTsgfVxyXG4gICAgICAgIHRoaXMua29Jbm5lck1hcmdpbiA9IGtvLm9ic2VydmFibGUodGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5uZXJJbmRlbnQpKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7IHJldHVybiBuZXcgUXVlc3Rpb25Sb3codGhpcyk7IH1cclxuICAgIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25OdW1DaGFuZ2VkKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzW1wia29Ob1wiXSh2YWx1ZSA+IDAgPyB2YWx1ZSArIFwiLiBcIiA6IFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uUmVuZGVyV2lkdGhDaGFuZ2VkKCkgeyAgXHJcbiAgICAgICAgdGhpcy5rb0lubmVyTWFyZ2luKHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmlubmVySW5kZW50KSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEluZGVudFNpemUoaW5kZW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpbmRlbnQgPCAxKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIGNzcyA9IHRoaXMuZGF0YVtcImNzc1wiXTtcclxuICAgICAgICBpZiAoIWNzcykgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGluZGVudCAqIGNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2UgZXh0ZW5kcyBQYWdlTW9kZWwge1xyXG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIG5ldyBQYWdlSW1wbGVtZW50b3IodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkNyZWF0aW5nKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUm93KHRoaXMpOyB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYW5lbChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uTnVtQ2hhbmdlZCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpc1tcImtvTm9cIl0odmFsdWUgPiAwID8gdmFsdWUgKyBcIi4gXCIgOiBcIlwiKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJwYW5lbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUGFuZWwoKTsgfSk7XHJcbkpzb25PYmplY3QubWV0YURhdGEub3ZlcnJpZGVDbGFzc0NyZWF0b3JlKFwicGFnZVwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUGFnZSgpOyB9KTtcclxuXHJcbkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUGFuZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3BhZ2UudHMiLCJleHBvcnQgdmFyIGtvVGVtcGxhdGUgPSByZXF1aXJlKFwiaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhdmFsLWxvYWRlciEuL3RlbXBsYXRlcy9lbnRyeS5odG1sXCIpO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVRlbXBsYXRlVGV4dCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVGV4dChuZXdUZXh0OiBzdHJpbmcsIGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlkID0gdGhpcy5nZXRJZChpZCwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0ICsgJzxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiICcgKyBpZCArICc+JyArIG5ld1RleHQgKyAnPC9zY3JpcHQ+JztcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXBsYWNlVGV4dChyZXBsYWNlVGV4dDogc3RyaW5nLCBpZDogc3RyaW5nLCBxdWVzdGlvblR5cGU6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICB2YXIgcG9zSWQgPSB0aGlzLmdldElkKGlkLCBxdWVzdGlvblR5cGUpO1xyXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnRleHQuaW5kZXhPZihwb3NJZCk7XHJcbiAgICAgICAgaWYgKHBvcyA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRUZXh0KHJlcGxhY2VUZXh0LCBpZCwgcXVlc3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb3MgPSB0aGlzLnRleHQuaW5kZXhPZignPicsIHBvcyk7XHJcbiAgICAgICAgaWYgKHBvcyA8IDApIHJldHVybjtcclxuICAgICAgICB2YXIgc3RhcnRQb3MgPSBwb3MgKyAxO1xyXG4gICAgICAgIHZhciBlbmRTdHJpbmcgPSBcIjwvc2NyaXB0PlwiO1xyXG4gICAgICAgIHBvcyA9IHRoaXMudGV4dC5pbmRleE9mKGVuZFN0cmluZywgc3RhcnRQb3MpO1xyXG4gICAgICAgIGlmIChwb3MgPCAwKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnN1YnN0cigwLCBzdGFydFBvcykgKyByZXBsYWNlVGV4dCArIHRoaXMudGV4dC5zdWJzdHIocG9zKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRJZChpZDogc3RyaW5nLCBxdWVzdGlvblR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAnaWQ9XCJzdXJ2ZXktJyArIGlkO1xyXG4gICAgICAgIGlmIChxdWVzdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiLVwiICsgcXVlc3Rpb25UeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ1wiJztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgdGV4dCgpOiBzdHJpbmcgeyByZXR1cm4ga29UZW1wbGF0ZTsgfVxyXG4gICAgcHJvdGVjdGVkIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHsga29UZW1wbGF0ZSA9IHZhbHVlOyB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVUZXh0LnRzIiwiaW1wb3J0IHtDb25kaXRpb24sIENvbmRpdGlvbk5vZGV9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyIHtcclxuICAgIHByaXZhdGUgdGV4dDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByb290OiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uTm9kZXM6IEFycmF5PENvbmRpdGlvbk5vZGU+O1xyXG4gICAgcHJpdmF0ZSBub2RlOiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBhdDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBsZW5ndGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwYXJzZSh0ZXh0OiBzdHJpbmcsIHJvb3Q6IENvbmRpdGlvbk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XHJcbiAgICAgICAgdGhpcy5yb290LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hdCA9IDA7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLnRleHQubGVuZ3RoO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnBhcnNlVGV4dCgpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9TdHJpbmcocm9vdDogQ29uZGl0aW9uTm9kZSk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlVG9TdHJpbmcocm9vdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHRvU3RyaW5nQ29yZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAodmFsdWVbXCJjaGlsZHJlblwiXSkgcmV0dXJuIHRoaXMubm9kZVRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICBpZiAodmFsdWVbXCJsZWZ0XCJdKSByZXR1cm4gdGhpcy5jb25kaXRpb25Ub1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vZGVUb1N0cmluZyhub2RlOiBDb25kaXRpb25Ob2RlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobm9kZS5pc0VtcHR5KSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgcmVzID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVUZXh0ID0gdGhpcy50b1N0cmluZ0NvcmUobm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykgcmVzICs9ICcgJyArIG5vZGUuY29ubmVjdGl2ZSArICcgJztcclxuICAgICAgICAgICAgICAgIHJlcyArPSBub2RlVGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSAhPSB0aGlzLnJvb3QgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJlcyA9ICcoJyArIHJlcyArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBDb25kaXRpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uLnJpZ2h0IHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7XHJcbiAgICAgICAgaWYgKGxlZnQgJiYgIXRoaXMuaXNOdW1lcmljKGxlZnQpKSBsZWZ0ID0gXCInXCIgKyBsZWZ0ICsgXCInXCI7XHJcbiAgICAgICAgdmFyIHJlcyA9IGxlZnQgKyAnICcgKyB0aGlzLm9wZXJhdGlvblRvU3RyaW5nKGNvbmRpdGlvbi5vcGVyYXRvcik7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb1JpZ2h0T3BlcmF0aW9uKGNvbmRpdGlvbi5vcGVyYXRvcikpIHJldHVybiByZXM7XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xyXG4gICAgICAgIGlmIChyaWdodCAmJiAhdGhpcy5pc051bWVyaWMocmlnaHQpKSByaWdodCA9IFwiJ1wiICsgcmlnaHQgKyBcIidcIjtcclxuICAgICAgICByZXR1cm4gcmVzICsgJyAnICsgcmlnaHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wZXJhdGlvblRvU3RyaW5nKG9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChvcCA9PSBcImVxdWFsXCIpIHJldHVybiBcIj1cIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJub3RlcXVhbFwiKSByZXR1cm4gXCIhPVwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJcIikgcmV0dXJuIFwiPlwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImxlc3NcIikgcmV0dXJuIFwiPFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJvcmVxdWFsXCIpIHJldHVybiBcIj49XCI7XHJcbiAgICAgICAgaWYgKG9wID09IFwibGVzc29yZXF1YWxcIikgcmV0dXJuIFwiPD1cIjtcclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtZXJpYyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBhcnNlVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTm9kZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKHRoaXMubm9kZSk7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMucmVhZENvbmRpdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gcmVzICYmIHRoaXMuYXQgPj0gdGhpcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRDb25kaXRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlYWRDb25kaXRpb24oKTtcclxuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIHJlcztcclxuICAgICAgICB2YXIgY29ubmVjdGl2ZSA9IHRoaXMucmVhZENvbm5lY3RpdmUoKTtcclxuICAgICAgICBpZiAoY29ubmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENvbm5lY3RpdmUoY29ubmVjdGl2ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRDb25kaXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29uZGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBleHBSZXMgPSB0aGlzLnJlYWRFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgaWYgKGV4cFJlcyA8IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZihleHBSZXMgPT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIGxlZnQgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWxlZnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRPcGVyYXRvcigpO1xyXG4gICAgICAgIGlmICghb3ApIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgYyA9IG5ldyBDb25kaXRpb24oKTtcclxuICAgICAgICBjLmxlZnQgPSBsZWZ0OyBjLm9wZXJhdG9yID0gb3A7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTm9SaWdodE9wZXJhdGlvbihvcCkpIHtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmICghcmlnaHQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgYy5yaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENvbmRpdGlvbihjKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZEV4cHJlc3Npb24oKTogbnVtYmVyIHtcclxuICAgICAgICB0aGlzLnNraXAoKTtcclxuICAgICAgICBpZiAodGhpcy5hdCA+PSB0aGlzLmxlbmd0aCB8fCB0aGlzLmNoICE9ICcoJykgcmV0dXJuIDA7XHJcbiAgICAgICAgdGhpcy5hdCsrO1xyXG4gICAgICAgIHRoaXMucHVzaEV4cHJlc3Npb24oKTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5yZWFkQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5za2lwKCk7XHJcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuY2ggPT0gPHN0cmluZz4nKSc7XHJcbiAgICAgICAgICAgIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgdGhpcy5wb3BFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBjaCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmF0KTsgfVxyXG4gICAgcHJpdmF0ZSBza2lwKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGggJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSB0aGlzLmF0Kys7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU3BhY2UoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1xcbicgfHwgYyA9PSAnXFx0JyB8fCBjID09ICdcXHInO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1F1b3RlcyhjOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYyA9PSBcIidcIiB8fCBjID09ICdcIidcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNPcGVyYXRvckNoYXIoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJz4nIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz0nIHx8IGMgPT0gJyEnO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0JyYWNrZXRzKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjID09ICcoJyB8fCBjID09ICcpJztcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZFN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgIHRoaXMuc2tpcCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0ID49IHRoaXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmF0O1xyXG4gICAgICAgIHZhciBoYXNRdW90ZXMgPSB0aGlzLmlzUXVvdGVzKHRoaXMuY2gpO1xyXG4gICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICB2YXIgaXNGaXJzdE9wQ2ggPSB0aGlzLmlzT3BlcmF0b3JDaGFyKHRoaXMuY2gpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFoYXNRdW90ZXMgJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNRdW90ZXModGhpcy5jaCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaGFzUXVvdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdE9wQ2ggIT0gdGhpcy5pc09wZXJhdG9yQ2hhcih0aGlzLmNoKSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0JyYWNrZXRzKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmF0IDw9IHN0YXJ0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy50ZXh0LnN1YnN0cihzdGFydCwgdGhpcy5hdCAtIHN0YXJ0KTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMSAmJiB0aGlzLmlzUXVvdGVzKHJlc1swXSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSByZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUXVvdGVzKHJlc1tyZXMubGVuZ3RoIC0gMV0pKSBsZW4tLTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5zdWJzdHIoMSwgbGVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc05vUmlnaHRPcGVyYXRpb24ob3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBvcCA9PSBcImVtcHR5XCIgfHwgb3AgPT0gXCJub3RlbXB0eVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkT3BlcmF0b3IoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIW9wKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBvcCA9IG9wLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKG9wID09ICc+Jykgb3AgPSBcImdyZWF0ZXJcIjtcclxuICAgICAgICBpZiAob3AgPT0gJzwnKSBvcCA9IFwibGVzc1wiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPj0nIHx8IG9wID09ICc9PicpIG9wID0gXCJncmVhdGVyb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPD0nIHx8IG9wID09ICc9PCcpIG9wID0gXCJsZXNzb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPScgfHwgb3AgPT0gJz09Jykgb3AgPSBcImVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICc8PicgfHwgb3AgPT0gJyE9Jykgb3AgPSBcIm5vdGVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdjb250YWluJykgb3AgPSBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdub3Rjb250YWluJykgb3AgPSBcIm5vdGNvbnRhaW5zXCI7XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29ubmVjdGl2ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBjb24gPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWNvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uID0gY29uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGNvbiA9PSBcIiZcIiB8fCBjb24gPT0gXCImJlwiKSBjb24gPSBcImFuZFwiO1xyXG4gICAgICAgIGlmIChjb24gPT0gXCJ8XCIgfHwgY29uID09IFwifHxcIikgY29uID0gXCJvclwiO1xyXG4gICAgICAgIGlmIChjb24gIT0gXCJhbmRcIiAmJiBjb24gIT0gXCJvclwiKSBjb24gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBjb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHB1c2hFeHByZXNzaW9uKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBvcEV4cHJlc3Npb24oKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wb3AoKTtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlc1t0aGlzLmV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkQ29uZGl0aW9uKGM6IENvbmRpdGlvbikge1xyXG4gICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKGMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRDb25uZWN0aXZlKGNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0aXZlID0gY29uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY29ubmVjdGl2ZSAhPSBjb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDb24gPSB0aGlzLm5vZGUuY29ubmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDaGlsZHJlbiA9IHRoaXMubm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3RpdmUgPSBjb247XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTm9kZSA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNvbm5lY3RpdmUgPSBvbGRDb247XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChvbGROb2RlKTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwiZXhwb3J0IGNsYXNzIGR4U3VydmV5U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlcnZpY2VVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly9keHN1cnZleWFwaS5henVyZXdlYnNpdGVzLm5ldC9hcGkvU3VydmV5XCI7XHJcbiAgICAvL3B1YmxpYyBzdGF0aWMgc2VydmljZVVybDogc3RyaW5nID0gXCJodHRwOi8vbG9jYWxob3N0OjUwNDg4L2FwaS9TdXJ2ZXlcIjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXkoc3VydmV5SWQ6IHN0cmluZywgb25Mb2FkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy9nZXRTdXJ2ZXk/c3VydmV5SWQ9JyArIHN1cnZleUlkKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0KHBvc3RJZDogc3RyaW5nLCByZXN1bHQ6IEpTT04sIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpPT4gdm9pZCwgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdQT1NUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL3Bvc3QvJyk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7IHBvc3RJZDogcG9zdElkLCBzdXJ2ZXlSZXN1bHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgfTtcclxuICAgICAgICBpZiAoY2xpZW50SWQpIGRhdGFbJ2NsaWVudElkJ10gPSBjbGllbnRJZDtcclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkKSBkYXRhWydpc1BhcnRpYWxDb21wbGV0ZWQnXSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGRhdGFTdHJpbmdpZnk6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XHJcbiAgICAgICAgICAgIG9uU2VuZFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKGRhdGFTdHJpbmdpZnkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNlbmRGaWxlKHBvc3RJZDogc3RyaW5nLCBmaWxlOiBGaWxlLCBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kRmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy91cGxvYWQvJywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJwb3N0SWRcIiwgcG9zdElkKTtcclxuICAgICAgICB4aHIuc2VuZChmb3JtRGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgb25HZXRSZXN1bHQ6IChzdWNjZXNzOiBib29sZWFuLCBkYXRhOiBhbnksIGRhdGFMaXN0OiBBcnJheTxhbnk+LCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmbmFtZT0nICsgbmFtZTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL2dldFJlc3VsdD8nICsgZGF0YSk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LlF1ZXN0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0geyBuYW1lOiBrZXksIHZhbHVlOiByZXN1bHQuUXVlc3Rpb25SZXN1bHRba2V5XSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25HZXRSZXN1bHQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgbGlzdCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNDb21wbGV0ZWQocmVzdWx0SWQ6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZywgb25Jc0NvbXBsZXRlZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmY2xpZW50SWQ9JyArIGNsaWVudElkO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArICcvaXNDb21wbGV0ZWQ/JyArIGRhdGEpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvbklzQ29tcGxldGVkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0SGFzT3RoZXIodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHZhbC5pbmRleE9mKHRoaXMub3RoZXJJdGVtLnZhbHVlKSA+PSAwO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdmFsW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAhdmFsLmxlbmd0aCkgcmV0dXJuIHZhbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb21tZW50KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5nZXRDb21tZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJjaGVja2JveFwiO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjaGVja2JveFwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChcIlwiKTsgfSwgXCJjaGVja2JveGJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25DaGVja2JveE1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fY2hlY2tib3gudHMiLCJpbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tbWVudE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgcHVibGljIHJvd3M6IG51bWJlciA9IDQ7XHJcbiAgICBwdWJsaWMgY29sczogbnVtYmVyID0gNTA7XHJcbiAgICBwcml2YXRlIGxvY1BsYWNlSG9sZGVyVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcclxuICAgIH1cclxuICAgIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNvbW1lbnRcIiwgW3sgbmFtZTogXCJjb2xzOm51bWJlclwiLCBkZWZhdWx0OiA1MCB9LCB7IG5hbWU6IFwicm93czpudW1iZXJcIiwgZGVmYXVsdDogNCB9LCBcclxuICAgIHtuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25Db21tZW50TW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBsb2NPcHRpb25zQ2FwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCkgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID8gdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jT3B0aW9uc0NhcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlO31cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZHJvcGRvd25cIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJkcm9wZG93blwiLCBbeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25Ecm9wZG93bk1vZGVsKFwiXCIpOyB9LCBcInNlbGVjdGJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25Ecm9wZG93bk1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJpbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3IsIEV4Y2VlZFNpemVFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZpbGVNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHByaXZhdGUgc2hvd1ByZXZpZXdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc1VwbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJldmlld1ZhbHVlTG9hZGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBwdWJsaWMgaW1hZ2VIZWlnaHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBpbWFnZVdpZHRoOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RvcmVEYXRhQXNUZXh0OiBib29sZWFuO1xyXG4gICAgcHVibGljIG1heFNpemU6IG51bWJlcjtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaG93UHJldmlldygpIHsgcmV0dXJuIHRoaXMuc2hvd1ByZXZpZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93UHJldmlldyh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnNob3dQcmV2aWV3VmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmICF0aGlzLnN1cnZleS51cGxvYWRGaWxlKHRoaXMubmFtZSwgZmlsZSwgdGhpcy5zdG9yZURhdGFBc1RleHQsIGZ1bmN0aW9uIChzdGF0dXM6IHN0cmluZykgeyBzZWxmLmlzVXBsb2FkaW5nID0gc3RhdHVzID09IFwidXBsb2FkaW5nXCI7ICB9KSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsZVZhbHVlKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHByZXZpZXdWYWx1ZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIHNldEZpbGVWYWx1ZShmaWxlOiBGaWxlKSB7XHJcbiAgICAgICAgaWYgKCFGaWxlUmVhZGVyKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3dQcmV2aWV3ICYmICF0aGlzLnN0b3JlRGF0YUFzVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrRmlsZUZvckVycm9ycyhmaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zaG93UHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5wcmV2aWV3VmFsdWUgPSBzZWxmLmlzRmlsZUltYWdlKGZpbGUpID8gZmlsZVJlYWRlci5yZXN1bHQgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5wcmV2aWV3VmFsdWVMb2FkZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RvcmVEYXRhQXNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gZmlsZVJlYWRlci5yZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVwbG9hZGluZ0ZpbGVcIikpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrRmlsZUZvckVycm9ycyhmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGVycm9yTGVuZ3RoID0gdGhpcy5lcnJvcnMgPyB0aGlzLmVycm9ycy5sZW5ndGggOiAwO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEV4Y2VlZFNpemVFcnJvcih0aGlzLm1heFNpemUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yTGVuZ3RoICE9IHRoaXMuZXJyb3JzLmxlbmd0aCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzRmlsZUltYWdlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUudHlwZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzdHIgPSBmaWxlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gc3RyLmluZGV4T2YoXCJpbWFnZVwiKSA9PSAwO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJmaWxlXCIsIFtcInNob3dQcmV2aWV3OmJvb2xlYW5cIiwgXCJpbWFnZUhlaWdodFwiLCBcImltYWdlV2lkdGhcIiwgXCJzdG9yZURhdGFBc1RleHQ6Ym9vbGVhblwiLCBcIm1heFNpemU6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsImltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgICBwcml2YXRlIGxvY0h0bWxWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NIdG1sVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImh0bWxcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NIdG1sLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgaHRtbCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jSHRtbC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0h0bWxWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRIdG1sKCkgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbCh0aGlzLmh0bWwpIDogdGhpcy5odG1sOyB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImh0bWxcIiwgW3tuYW1lOlwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uYmFzZVwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9odG1sLnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gJy4vc3VydmV5U3RyaW5ncyc7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERhdGEge1xyXG4gICAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3dNb2RlbCBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBJTWF0cml4RGF0YTtcclxuICAgIHByb3RlY3RlZCByb3dWYWx1ZTogYW55OyBcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogYW55LCBwdWJsaWMgdGV4dDogc3RyaW5nLCBwdWJsaWMgZnVsbE5hbWU6IHN0cmluZywgZGF0YTogSU1hdHJpeERhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMucm93VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93VmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhKSB0aGlzLmRhdGEub25NYXRyaXhSb3dDaGFuZ2VkKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIGltcGxlbWVudHMgSU1hdHJpeERhdGEge1xyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIHJvd3NWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZWRWaXNpYmxlUm93czogQXJyYXk8TWF0cml4Um93TW9kZWw+O1xyXG4gICAgcHVibGljIGlzQWxsUm93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLnJvd3NWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1Jvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1ZhbHVlLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBzZXQgY29sdW1ucyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMuY29sdW1uc1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMucm93c1ZhbHVlOyB9XHJcbiAgICBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucm93c1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhSb3dNb2RlbD4oKTtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLnJvd3NbaV0udmFsdWUsIHRoaXMucm93c1tpXS50ZXh0LCB0aGlzLm5hbWUgKyAnXycgKyB0aGlzLnJvd3NbaV0udmFsdWUudG9TdHJpbmcoKSwgdmFsW3RoaXMucm93c1tpXS52YWx1ZV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhudWxsLCBcIlwiLCB0aGlzLm5hbWUsIHZhbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7IH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0Vycm9ySW5Sb3dzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlcXVpcmVkSW5BbGxSb3dzRXJyb3JcIikpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FsbFJvd1JlcXVpcmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBoYXNWYWx1ZXNJbkFsbFJvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgaWYgKCFyb3dzKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IHJvd3NbaV0udmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgZnVsbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeFJvd01vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeFJvd01vZGVsKG5hbWUsIHRleHQsIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZyB8fCAhKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSB2YWwgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbMF0udmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByb3dWYWwgPSB2YWxbcm93Lm5hbWVdID8gdmFsW3Jvdy5uYW1lXSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnZhbHVlID0gcm93VmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RGF0YVxyXG4gICAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKHJvdy52YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdWYWx1ZVtyb3cubmFtZV0gPSByb3cudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm1hdHJpeFwiLCBbeyBuYW1lOiBcImNvbHVtbnM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jb2x1bW5zKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jb2x1bW5zID0gdmFsdWU7IH19LFxyXG4gICAgeyBuYW1lOiBcInJvd3M6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yb3dzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yb3dzID0gdmFsdWU7IH0gfSxcclxuICAgIFwiaXNBbGxSb3dSZXF1aXJlZDpib29sZWFuXCJdLCAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpOyBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7IHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsImltcG9ydCB7UXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcclxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgSU1hdHJpeERyb3Bkb3duRGF0YVxyXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBhbnksIHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiB0aGlzLm5hbWU7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgcHJpdmF0ZSByb3dzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMucm93c1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93blwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yb3dzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucm93c1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvd3MgfHwgdGhpcy5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLnJvd3NbaV0udmFsdWUsIHRoaXMucm93c1tpXS50ZXh0LCB2YWxbdGhpcy5yb3dzW2ldLnZhbHVlXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Sb3dNb2RlbChuYW1lLCB0ZXh0LCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhkcm9wZG93blwiLCBbeyBuYW1lOiBcInJvd3M6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yb3dzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yb3dzID0gdmFsdWU7IH19XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwoXCJcIik7IH0sIFwibWF0cml4ZHJvcGRvd25iYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkcm9wZG93blwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJpbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXHJcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgSU1hdHJpeERyb3Bkb3duRGF0YVxyXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHluYW1pY1Jvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBcInJvd1wiICsgdGhpcy5pbmRleDsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGltcGxlbWVudHMgSU1hdHJpeERyb3Bkb3duRGF0YSB7XHJcbiAgICBzdGF0aWMgTWF4Um93Q291bnQgPSAxMDA7XHJcbiAgICBwcml2YXRlIHJvd0NvdW50ZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSByb3dDb3VudFZhbHVlOiBudW1iZXIgPSAyO1xyXG4gICAgcHJpdmF0ZSBsb2NBZGRSb3dUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NSZW1vdmVSb3dUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHVibGljIG1pblJvd0NvdW50ID0gMDtcclxuICAgIHB1YmxpYyByb3dDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY0FkZFJvd1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1JlbW92ZVJvd1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHluYW1pY1wiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dDb3VudCgpIHsgcmV0dXJuIHRoaXMucm93Q291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLk1heFJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gdmFsKSB7XHJcbiAgICAgICAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgcVZhbC5zcGxpY2UodmFsKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHFWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucm93Q291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFJvdygpIHtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3cobnVsbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvd0NvdW50Kys7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKHZhbCwgbnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm93Q291bnQtLTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgYWRkUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jQWRkUm93VGV4dC50ZXh0ID8gdGhpcy5sb2NBZGRSb3dUZXh0LnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYWRkUm93XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGFkZFJvd1RleHQodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0FkZFJvd1RleHQudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0FkZFJvd1RleHQoKSB7IHJldHVybiB0aGlzLmxvY0FkZFJvd1RleHRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCByZW1vdmVSb3dUZXh0KCkgeyByZXR1cm4gdGhpcy5sb2NSZW1vdmVSb3dUZXh0LnRleHQgPyB0aGlzLmxvY1JlbW92ZVJvd1RleHQudGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVtb3ZlUm93VGV4dCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUmVtb3ZlUm93VGV4dC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUmVtb3ZlUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jUmVtb3ZlUm93VGV4dFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7ICAgcmV0dXJuIGZhbHNlOyAgfVxyXG4gICAgcHVibGljIGdldCBjYWNoZWRWaXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzICYmIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IHRoaXMucm93Q291bnQpIHJldHVybiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3JJblJvd3MoKSkge1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5taW5Sb3dDb3VudCkpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDw9IDAgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNldFJvd0NvdW50ID0gMDtcclxuICAgICAgICBmb3IgKHZhciByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IHJvd0luZGV4KyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Nbcm93SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIXJvdy5pc0VtcHR5KSBzZXRSb3dDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2V0Um93Q291bnQgPCB0aGlzLm1pblJvd0NvdW50O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4oKTtcclxuICAgICAgICBpZiAodGhpcy5yb3dDb3VudCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIGkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KHZhbHVlOiBhbnkpOiBNYXRyaXhEeW5hbWljUm93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHluYW1pY1Jvd01vZGVsKHRoaXMucm93Q291bnRlciArKywgdGhpcywgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlVmFsdWVDaGFuZ2VkKHZhbDogYW55KSB7XHJcbiAgICAgICAgdmFyIG5ld1Jvd0NvdW50ID0gdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggOiAwO1xyXG4gICAgICAgIGlmIChuZXdSb3dDb3VudCA8PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlID0gbmV3Um93Q291bnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKGN1clZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjdXJWYWx1ZTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIHIgPSBbXTtcclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IHRoaXMucm93Q291bnQpIHJlc3VsdC5zcGxpY2UodGhpcy5yb3dDb3VudCAtIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSByZXN1bHQubGVuZ3RoOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShuZXdWYWx1ZTogYW55LCByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYW55IHtcclxuICAgICAgICB2YXIgaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV3VmFsdWVbaV0pLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0VtcHR5ID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCBxdWVzdGlvblZhbHVlLmxlbmd0aCA/IHF1ZXN0aW9uVmFsdWVbaW5kZXhdIDogbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRSb3dWYWx1ZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBxdWVzdGlvblZhbHVlOiBhbnksIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSb3dWYWx1ZUJ5SW5kZXgocXVlc3Rpb25WYWx1ZSwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5pbmRleE9mKHJvdykpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHluYW1pY1wiLCBbeyBuYW1lOiBcInJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAyIH0sIHsgbmFtZTogXCJtaW5Sb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJhZGRSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NBZGRSb3dUZXh0XCIgfSwgeyBuYW1lOiBcInJlbW92ZVJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlbW92ZVJvd1RleHRcIiB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTsgfSwgXCJtYXRyaXhkcm9wZG93bmJhc2VcIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7U3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lcn0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtBbnN3ZXJSZXF1aXJlZEVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEge1xyXG4gICAgZ2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xyXG4gICAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTtcclxuICAgIGdldElzUmVxdWlyZWRUZXh0KCk6IHN0cmluZztcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVZhbGlkYXRvck93bmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGRhdGE6IElNdWx0aXBsZVRleHREYXRhO1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiA9IG5ldyBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0aXRlbVwiO1xyXG4gICAgfVxyXG4gICAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnRpdGxlO1xyXG4gICAgICAgIGlmKHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmRhdGEpIHJlcyA9IHRoaXMuZGF0YS5nZXRJc1JlcXVpcmVkVGV4dCgpICsgJyAnICsgcmVzO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5uYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIH1cclxuICAgIC8vSVZhbGlkYXRvck93bmVyXHJcbiAgICBwdWJsaWMgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGU7IH1cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhIHtcclxuICAgIHByaXZhdGUgY29sQ291bnRWYWx1ZTogbnVtYmVyID0gMTtcclxuICAgIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGl0ZW1TaXplOiBudW1iZXIgPSAyNTtcclxuICAgIHByaXZhdGUgaXRlbXNWYWx1ZXM6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4gPSBuZXcgQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPigpO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtdWx0aXBsZXRleHRcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiB7IHJldHVybiB0aGlzLml0ZW1zVmFsdWVzOyB9XHJcbiAgICBwdWJsaWMgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVRleHRJdGVtKG5hbWUsIHRpdGxlKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldEl0ZW1zT3ZlcnJpZGRlbk1ldGhvZHMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZXMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXREYXRhKHNlbGYpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcy5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTXVsdGlwbGVUZXh0SXRlbU1vZGVsW10pOiBNdWx0aXBsZVRleHRJdGVtTW9kZWxbXSB7XHJcbiAgICAgICAgICAgIGlmKCFzdGFydCkgc3RhcnQgPSAwO1xyXG4gICAgICAgICAgICBpZighZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChzZWxmLml0ZW1zVmFsdWVzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgICAgIGlmKCFpdGVtcykgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbaV0uc2V0RGF0YShzZWxmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pdGVtc1tpXS52YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29sQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29sQ291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcclxuICAgICAgICB2YXIgcm93cyA9IFtdO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ucHVzaChpdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3dzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMub25JdGVtVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChuYW1lLCB0aXRsZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25JdGVtVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgKHRoaXMuaXRlbXNbaV0ubmFtZSBpbiB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbVZhbHVlID0gdGhpcy52YWx1ZVt0aGlzLml0ZW1zW2ldLm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcnVuVmFsaWRhdG9ycygpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgdmFyIGVycm9yID0gc3VwZXIucnVuVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGlmIChlcnJvciAhPSBudWxsKSByZXR1cm4gZXJyb3I7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFZhbGlkYXRvclJ1bm5lcigpLnJ1bih0aGlzLml0ZW1zW2ldKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjayk7XHJcbiAgICAgICAgaWYoIXJlcykgcmVzID0gdGhpcy5oYXNFcnJvckluSXRlbXMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc0Vycm9ySW5JdGVtcyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZihpdGVtLmlzUmVxdWlyZWQgJiYgIWl0ZW0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IoKSk7XHJcbiAgICAgICAgICAgICAgICBpZihmaXJlQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lNdWx0aXBsZVRleHREYXRhXHJcbiAgICBnZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlW25hbWVdO1xyXG4gICAgfVxyXG4gICAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdWYWx1ZVtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBnZXRJc1JlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dCA6IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtdWx0aXBsZXRleHRpdGVtXCIsIFtcIm5hbWVcIiwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSwgXHJcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSwgeyBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLCBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiIH1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibXVsdGlwbGV0ZXh0XCIsIFt7IG5hbWU6IFwiIWl0ZW1zOnRleHRpdGVtc1wiLCBjbGFzc05hbWU6IFwibXVsdGlwbGV0ZXh0aXRlbVwiIH0sXHJcbiAgICAgICAgeyBuYW1lOiBcIml0ZW1TaXplOm51bWJlclwiLCBkZWZhdWx0OiAyNSB9LCB7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFsxLCAyLCAzLCA0XSB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTsgcS5hZGRJdGVtKFwidGV4dDFcIik7IHEuYWRkSXRlbShcInRleHQyXCIpOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwicmFkaW9ncm91cFwiO1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0cnVlOyB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyYWRpb2dyb3VwXCIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwoXCJcIik7IH0sIFwiY2hlY2tib3hiYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxO30pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwiaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBzdGF0aWMgZGVmYXVsdFJhdGVWYWx1ZXM6IEl0ZW1WYWx1ZVtdID0gW107XHJcbiAgICBwcml2YXRlIHJhdGVzOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHJpdmF0ZSBsb2NNaW5SYXRlRGVzY3JpcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICByYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLnJhdGVzID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIGdldCByYXRlVmFsdWVzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yYXRlczsgfVxyXG4gICAgc2V0IHJhdGVWYWx1ZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLnJhdGVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIGdldCB2aXNpYmxlUmF0ZVZhbHVlcygpOiBJdGVtVmFsdWVbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5yYXRlVmFsdWVzO1xyXG4gICAgICAgIHJldHVybiBRdWVzdGlvblJhdGluZ01vZGVsLmRlZmF1bHRSYXRlVmFsdWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJyYXRpbmdcIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1pblJhdGVEZXNjcmlwdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb24udGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IG1pblJhdGVEZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY01pblJhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7cmV0dXJuIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWU7fTtcclxuICAgIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvbi50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb24udGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZTt9O1xyXG59XHJcbkl0ZW1WYWx1ZS5zZXREYXRhKFF1ZXN0aW9uUmF0aW5nTW9kZWwuZGVmYXVsdFJhdGVWYWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSk7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyYXRpbmdcIiwgW1wiaGFzQ29tbWVudDpib29sZWFuXCIsIHsgbmFtZTogXCJyYXRlVmFsdWVzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmoucmF0ZVZhbHVlcyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmoucmF0ZVZhbHVlcyA9IHZhbHVlOyB9fSxcclxuICAgIHtuYW1lOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwibWluaW51bVJhdGVEZXNjcmlwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCJ9LCBcclxuICAgIHtuYW1lOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwibWF4aW11bVJhdGVEZXNjcmlwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWF4UmF0ZURlc2NyaXB0aW9uXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3JhdGluZy50cyIsImltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwdWJsaWMgc2l6ZTogbnVtYmVyID0gMjU7XHJcbiAgICBwdWJsaWMgaW5wdXRUeXBlOiBzdHJpbmcgPSBcInRleHRcIjtcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCI7XHJcbiAgICB9XHJcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4geyAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09IFwiXCI7IH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge3JldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZVR5cGUobmV3VmFsdWUpO1xyXG4gICAgICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT0gXCJudW1iZXJcIiB8fCB0aGlzLmlucHV0VHlwZSA9PSBcInJhbmdlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNOdW1iZXIobmV3VmFsdWUpID8gcGFyc2VGbG9hdChuZXdWYWx1ZSkgOiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtYmVyKHZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgJiYgaXNGaW5pdGUodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidGV4dFwiLCBbeyBuYW1lOiBcImlucHV0VHlwZVwiLCBkZWZhdWx0OiBcInRleHRcIiwgY2hvaWNlczogW1wiY29sb3JcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiLCBcImVtYWlsXCIsIFwibW9udGhcIiwgXCJudW1iZXJcIiwgXCJwYXNzd29yZFwiLCBcInJhbmdlXCIsIFwidGVsXCIsIFwidGV4dFwiLCBcInRpbWVcIiwgXCJ1cmxcIiwgXCJ3ZWVrXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwic2l6ZTpudW1iZXJcIiwgZGVmYXVsdDogMjUgfSwge25hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuL3N1cnZleVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvd01vZGVsIGV4dGVuZHMgQmFzZSAge1xyXG4gICAgcHVibGljIHN0YXRpYyBzdXJ2ZXlFbGVtZW50TmFtZSA9IFwid2luZG93U3VydmV5SlNcIjtcclxuICAgIHN1cnZleVZhbHVlOiBTdXJ2ZXlNb2RlbDtcclxuICAgIHdpbmRvd0VsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaXNTaG93aW5nVmFsdWU6IGJvb2xlYW47XHJcbiAgICBpc0V4cGFuZGVkVmFsdWU6IGJvb2xlYW47XHJcbiAgICB0aXRsZVZhbHVlOiBzdHJpbmc7XHJcbiAgICB0ZW1wbGF0ZVZhbHVlOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoanNvbk9iajogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlID0gdGhpcy5jcmVhdGVTdXJ2ZXkoanNvbk9iaik7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZS5zaG93VGl0bGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLndpbmRvd0VsZW1lbnQgPSA8SFRNTERpdkVsZW1lbnQ+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCkgOiBzdHJpbmcgeyByZXR1cm4gXCJ3aW5kb3dcIiB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7IHJldHVybiB0aGlzLnN1cnZleVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzU2hvd2luZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNTaG93aW5nVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnRpdGxlVmFsdWUgPyB0aGlzLnRpdGxlVmFsdWUgOiB0aGlzLnN1cnZleS50aXRsZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMudGl0bGVWYWx1ZSA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZXhwYW5kKCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kY29sbGFwc2UodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY29sbGFwc2UoKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRjb2xsYXBzZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KGpzb25PYmo6IGFueSk6IFN1cnZleU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IFN1cnZleU1vZGVsKGpzb25PYmopXHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZXhwYW5kY29sbGFwc2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleVdpbmRvdy50cyIsImltcG9ydCB7c3VydmV5Q3NzfSBmcm9tIFwiLi9jc3NzdGFuZGFyZFwiO1xyXG5cclxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwQ3NzID0ge1xyXG4gICAgcm9vdDogXCJcIixcclxuICAgIGhlYWRlcjogXCJwYW5lbC1oZWFkaW5nXCIsXHJcbiAgICBib2R5OiBcInBhbmVsLWJvZHlcIixcclxuICAgIGZvb3RlcjogXCJwYW5lbC1mb290ZXJcIixcclxuICAgIG5hdmlnYXRpb25CdXR0b246IFwiXCIsIG5hdmlnYXRpb246IHsgY29tcGxldGU6IFwiXCIsIHByZXY6IFwiXCIsIG5leHQ6IFwiXCIgfSxcclxuICAgIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9ja1wiLCBwcm9ncmVzc0JhcjogXCJwcm9ncmVzcy1iYXJcIixcclxuICAgIHBhZ2VUaXRsZTogXCJcIixcclxuICAgIHJvdzogXCJcIixcclxuICAgIHF1ZXN0aW9uOiB7IHJvb3Q6IFwiXCIsIHRpdGxlOiBcIlwiLCBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLCBpbmRlbnQ6IDIwIH0sXHJcbiAgICBlcnJvcjogeyByb290OiBcImFsZXJ0IGFsZXJ0LWRhbmdlclwiLCBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLCBpdGVtOiBcIlwiIH0sXHJcblxyXG4gICAgY2hlY2tib3g6IHsgcm9vdDogXCJmb3JtLWlubGluZVwiLCBpdGVtOiBcImNoZWNrYm94XCIsIG90aGVyOiBcIlwiIH0sXHJcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxyXG4gICAgZHJvcGRvd246IHsgcm9vdDogXCJcIiwgY29udHJvbDogXCJmb3JtLWNvbnRyb2xcIiB9LFxyXG4gICAgbWF0cml4OiB7IHJvb3Q6IFwidGFibGVcIiB9LFxyXG4gICAgbWF0cml4ZHJvcGRvd246IHsgcm9vdDogXCJ0YWJsZVwiIH0sXHJcbiAgICBtYXRyaXhkeW5hbWljOiB7IHJvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcImJ1dHRvblwiIH0sXHJcbiAgICBtdWx0aXBsZXRleHQ6IHsgcm9vdDogXCJ0YWJsZVwiLCBpdGVtVGl0bGU6IFwiXCIsIGl0ZW1WYWx1ZTogXCJmb3JtLWNvbnRyb2xcIiB9LFxyXG4gICAgcmFkaW9ncm91cDogeyByb290OiBcImZvcm0taW5saW5lXCIsIGl0ZW06IFwicmFkaW9cIiwgbGFiZWw6IFwiXCIsIG90aGVyOiBcIlwiIH0sXHJcbiAgICByYXRpbmc6IHsgcm9vdDogXCJidG4tZ3JvdXBcIiwgaXRlbTogXCJidG4gYnRuLWRlZmF1bHRcIiB9LFxyXG4gICAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcclxuICAgIHdpbmRvdzoge1xyXG4gICAgICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLCBib2R5OiBcIm1vZGFsLWJvZHlcIixcclxuICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIiwgdGl0bGU6IFwicHVsbC1sZWZ0XCIsIGJ1dHRvbjogXCJnbHlwaGljb24gcHVsbC1yaWdodFwiLFxyXG4gICAgICAgICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLCBidXR0b25Db2xsYXBzZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tZG93blwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5zdXJ2ZXlDc3NbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9kZWZhdWx0Q3NzL2Nzc2Jvb3RzdHJhcC50cyIsImltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2N6ZWNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZGFuaXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZHV0Y2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZ2VybWFuJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZ3JlZWsnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9yb21hbmlhbic7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3J1c3NpYW4nO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9zd2VkaXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vdHVya2lzaCc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIi8vIHN0eWxlc1xyXG5pbXBvcnQgXCIuLi8uLi9tYWluLnNjc3NcIjtcclxuXHJcbmV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xyXG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIEFuc3dlckNvdW50VmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgTnVtZXJpY1ZhbGlkYXRvciwgUmVnZXhWYWxpZGF0b3IsXHJcbiAgICBTdXJ2ZXlWYWxpZGF0b3IsIFRleHRWYWxpZGF0b3IsIFZhbGlkYXRvclJlc3VsdCwgVmFsaWRhdG9yUnVubmVyXHJcbn0gZnJvbSBcIi4uLy4uL3ZhbGlkYXRvclwiO1xyXG5leHBvcnQge0Jhc2UsIEV2ZW50LCBTdXJ2ZXlFcnJvciwgSVN1cnZleX0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuZXhwb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuLi8uLi9pdGVtdmFsdWVcIjtcclxuZXhwb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuLi8uLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5leHBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4uLy4uL2Nob2ljZXNSZXN0ZnVsbFwiO1xyXG5leHBvcnQge0NvbmRpdGlvbiwgQ29uZGl0aW9uTm9kZSwgQ29uZGl0aW9uUnVubmVyfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uc1wiO1xyXG5leHBvcnQge0NvbmRpdGlvbnNQYXJzZXJ9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zUGFyc2VyXCI7XHJcbmV4cG9ydCB7UHJvY2Vzc1ZhbHVlfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XHJcbmV4cG9ydCB7Q3VzdG9tRXJyb3IsIEV4Y2VlZFNpemVFcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yfSBmcm9tIFwiLi4vLi4vZXJyb3JcIjtcclxuZXhwb3J0IHtcclxuICAgIEpzb25FcnJvciwgSnNvbkluY29ycmVjdFR5cGVFcnJvciwgSnNvbk1ldGFkYXRhLCBKc29uTWV0YWRhdGFDbGFzcyxcclxuICAgIEpzb25NaXNzaW5nVHlwZUVycm9yLCBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsIEpzb25PYmplY3QsIEpzb25PYmplY3RQcm9wZXJ0eSxcclxuICAgIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IsIEpzb25Vbmtub3duUHJvcGVydHlFcnJvclxyXG59IGZyb20gXCIuLi8uLi9qc29ub2JqZWN0XCI7XHJcbmV4cG9ydCB7XHJcbiAgICBNYXRyaXhEcm9wZG93bkNlbGwsIE1hdHJpeERyb3Bkb3duQ29sdW1uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcclxuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcclxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmV4cG9ydCB7TWF0cml4RHJvcGRvd25Sb3dNb2RlbCwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25cIjtcclxuZXhwb3J0IHtNYXRyaXhEeW5hbWljUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHluYW1pY1wiO1xyXG5leHBvcnQge01hdHJpeFJvd01vZGVsLCBRdWVzdGlvbk1hdHJpeE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4XCI7XHJcbmV4cG9ydCB7TXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XHJcbmV4cG9ydCB7UGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWx9IGZyb20gXCIuLi8uLi9wYW5lbFwiO1xyXG5leHBvcnQge1BhZ2VNb2RlbH0gZnJvbSBcIi4uLy4uL3BhZ2VcIjtcclxuZXhwb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25iYXNlXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2UsIFF1ZXN0aW9uU2VsZWN0QmFzZX0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkNoZWNrYm94TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jaGVja2JveFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ29tbWVudE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uRHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25GYWN0b3J5LCBFbGVtZW50RmFjdG9yeX0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uRmlsZU1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZmlsZVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uSHRtbE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25faHRtbFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcmFkaW9ncm91cFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uUmF0aW5nTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYXRpbmdcIjtcclxuZXhwb3J0IHtRdWVzdGlvblRleHRNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3RleHRcIjtcclxuZXhwb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uLy4uL3N1cnZleVwiO1xyXG5leHBvcnQge1xyXG4gICAgU3VydmV5VHJpZ2dlciwgU3VydmV5VHJpZ2dlckNvbXBsZXRlLCBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUsIFN1cnZleVRyaWdnZXJWaXNpYmxlLFxyXG4gICAgVHJpZ2dlclxyXG59IGZyb20gXCIuLi8uLi90cmlnZ2VyXCI7XHJcbmV4cG9ydCB7U3VydmV5V2luZG93TW9kZWx9IGZyb20gXCIuLi8uLi9zdXJ2ZXlXaW5kb3dcIjtcclxuZXhwb3J0IHtUZXh0UHJlUHJvY2Vzc29yfSBmcm9tIFwiLi4vLi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IHtkeFN1cnZleVNlcnZpY2V9IGZyb20gXCIuLi8uLi9keFN1cnZleVNlcnZpY2VcIjtcclxuZXhwb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3N9IGZyb20gXCIuLi8uLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DdXN0b21XaWRnZXQsIEN1c3RvbVdpZGdldENvbGxlY3Rpb259IGZyb20gXCIuLi8uLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcclxuXHJcbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXHJcbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9uRGF0ZU1vZGVsfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9xdWVzdGlvbl9kYXRlXCI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5V2luZG93TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlXaW5kb3dcIjtcclxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uL3N1cnZleVwiO1xyXG5pbXBvcnQge1N1cnZleX0gZnJvbSBcIi4va29zdXJ2ZXlcIjtcclxudmFyIGtvVGVtcGxhdGUgPSByZXF1aXJlKFwiaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhdmFsLWxvYWRlciEuL3RlbXBsYXRlcy93aW5kb3cvd2luZG93Lmh0bWxcIik7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93IGV4dGVuZHMgU3VydmV5V2luZG93TW9kZWwge1xyXG4gICAga29FeHBhbmRlZDogYW55O1xyXG4gICAga29FeHBhbmRlZENzczogYW55O1xyXG4gICAgZG9FeHBhbmQ6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKGpzb25PYmopO1xyXG4gICAgICAgIHRoaXMua29FeHBhbmRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMua29FeHBhbmRlZENzcyA9IGtvLm9ic2VydmFibGUodGhpcy5nZXRCdXR0b25Dc3MoKSk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZG9FeHBhbmQgPSBmdW5jdGlvbiAoKSB7IHNlbGYuY2hhbmdlRXhwYW5kZWQoKTsgfVxyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiB7IHNlbGYub25Db21wbGV0ZSgpOyBzZWxmLmtvRXhwYW5kZWRDc3Moc2VsZi5nZXRCdXR0b25Dc3MoKSkgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KGpzb25PYmo6IGFueSk6IFN1cnZleU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IFN1cnZleShqc29uT2JqKVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGV4cGFuZGNvbGxhcHNlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIuZXhwYW5kY29sbGFwc2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMua29FeHBhbmRlZCh0aGlzLmlzRXhwYW5kZWRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHRlbXBsYXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnRlbXBsYXRlVmFsdWUgPyB0aGlzLnRlbXBsYXRlVmFsdWUgOiB0aGlzLmdldERlZmF1bHRUZW1wbGF0ZSgpOyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0IHRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy50ZW1wbGF0ZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBzaG93KCkge1xyXG4gICAgICAgIHRoaXMud2luZG93RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnRlbXBsYXRlO1xyXG4gICAgICAgIGtvLmNsZWFuTm9kZSh0aGlzLndpbmRvd0VsZW1lbnQpO1xyXG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3ModGhpcywgdGhpcy53aW5kb3dFbGVtZW50KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMud2luZG93RWxlbWVudCk7XHJcbiAgICAgICAgKDxTdXJ2ZXk+dGhpcy5zdXJ2ZXkpLnJlbmRlcihTdXJ2ZXlXaW5kb3cuc3VydmV5RWxlbWVudE5hbWUpO1xyXG4gICAgICAgIHRoaXMuaXNTaG93aW5nVmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRUZW1wbGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4ga29UZW1wbGF0ZSB9XHJcbiAgICBwdWJsaWMgaGlkZSgpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMud2luZG93RWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy53aW5kb3dFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dpbmdWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjc3MoKTogYW55IHsgcmV0dXJuIHRoaXMuc3VydmV5W1wiY3NzXCJdOyB9XHJcbiAgICBwcml2YXRlIGNoYW5nZUV4cGFuZGVkKCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kY29sbGFwc2UoIXRoaXMuaXNFeHBhbmRlZCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uQ29tcGxldGUoKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEJ1dHRvbkNzcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rb0V4cGFuZGVkKCkgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZCA6IHRoaXMuY3NzLndpbmRvdy5oZWFkZXIuYnV0dG9uRXhwYW5kZWQ7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMva25vY2tvdXQva29TdXJ2ZXlXaW5kb3cudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNoZWNrYm94QmFzZUltcGxlbWVudG9yfSBmcm9tIFwiLi9rb3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4uL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQ2hlY2tib3hNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi9xdWVzdGlvblwiO1xyXG5cclxuY2xhc3MgUXVlc3Rpb25DaGVja2JveEltcGxlbWVudG9yIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2VJbXBsZW1lbnRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbjogUXVlc3Rpb24pIHtcclxuICAgICAgICBzdXBlcihxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRla29WYWx1ZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZhbHVlID8ga28ub2JzZXJ2YWJsZUFycmF5KHRoaXMucXVlc3Rpb24udmFsdWUpIDoga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0a29WYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMua29WYWx1ZShbXS5jb25jYXQobmV3VmFsdWUpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmtvVmFsdWUoW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgbmV3IFF1ZXN0aW9uQ2hlY2tib3hJbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJjaGVja2JveFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25DaGVja2JveChcIlwiKTsgfSk7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25DaGVja2JveChuYW1lKTsgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25fY2hlY2tib3gudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25Db21tZW50TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25JbXBsZW1lbnRvcn0gZnJvbSBcIi4va29xdWVzdGlvblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tbWVudCBleHRlbmRzIFF1ZXN0aW9uQ29tbWVudE1vZGVsIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICBuZXcgUXVlc3Rpb25JbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJjb21tZW50XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnQoXCJcIik7IH0pO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnQobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX2NvbW1lbnQudHMiLCJpbXBvcnQge1F1ZXN0aW9uRHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2VJbXBsZW1lbnRvcn0gZnJvbSBcIi4va29xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgbmV3IFF1ZXN0aW9uU2VsZWN0QmFzZUltcGxlbWVudG9yKHRoaXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLm92ZXJyaWRlQ2xhc3NDcmVhdG9yZShcImRyb3Bkb3duXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duKFwiXCIpOyB9KTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duKG5hbWUpOyBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMva25vY2tvdXQva29xdWVzdGlvbl9kcm9wZG93bi50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GaWxlTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9maWxlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25JbXBsZW1lbnRvcn0gZnJvbSBcIi4va29xdWVzdGlvblwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZpbGVJbXBsZW1lbnRvciBleHRlbmRzIFF1ZXN0aW9uSW1wbGVtZW50b3Ige1xyXG4gICAga29EYXRhVXBkYXRlcjogYW55OyBrb0RhdGE6IGFueTsga29IYXNWYWx1ZTogYW55O1xyXG4gICAgY29uc3RydWN0b3IocXVlc3Rpb246IFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgc3VwZXIocXVlc3Rpb24pO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmtvRGF0YVVwZGF0ZXIgPSBrby5vYnNlcnZhYmxlKDApO1xyXG4gICAgICAgIHRoaXMua29EYXRhID0ga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkgeyBzZWxmLmtvRGF0YVVwZGF0ZXIoKTsgcmV0dXJuICg8UXVlc3Rpb25GaWxlTW9kZWw+c2VsZi5xdWVzdGlvbikucHJldmlld1ZhbHVlOyB9KTtcclxuICAgICAgICB0aGlzLmtvSGFzVmFsdWUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29EYXRhXCJdID0gdGhpcy5rb0RhdGE7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbltcImtvSGFzVmFsdWVcIl0gPSB0aGlzLmtvSGFzVmFsdWU7XHJcblxyXG4gICAgICAgICg8UXVlc3Rpb25GaWxlTW9kZWw+dGhpcy5xdWVzdGlvbikucHJldmlld1ZhbHVlTG9hZGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25Mb2FkUHJldmlldygpOyB9O1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJkb2NoYW5nZVwiXSA9IGZ1bmN0aW9uIChkYXRhLCBldmVudCkgeyB2YXIgc3JjID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7IHNlbGYub25DaGFuZ2Uoc3JjKTsgfTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb25DaGFuZ2Uoc3JjOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXdpbmRvd1tcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcclxuICAgICAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgKDxRdWVzdGlvbkZpbGVNb2RlbD50aGlzLnF1ZXN0aW9uKS5sb2FkRmlsZShzcmMuZmlsZXNbMF0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkxvYWRQcmV2aWV3KCkge1xyXG4gICAgICAgIHRoaXMua29EYXRhVXBkYXRlcih0aGlzLmtvRGF0YVVwZGF0ZXIoKSArIDEpO1xyXG4gICAgICAgIHRoaXMua29IYXNWYWx1ZSh0cnVlKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GaWxlIGV4dGVuZHMgUXVlc3Rpb25GaWxlTW9kZWwge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIG5ldyBRdWVzdGlvbkZpbGVJbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJmaWxlXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGUoXCJcIik7IH0pO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGUobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX2ZpbGUudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25JbXBsZW1lbnRvckJhc2V9IGZyb20gXCIuL2tvcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25IdG1sTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9odG1sXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25IdG1sIGV4dGVuZHMgUXVlc3Rpb25IdG1sTW9kZWwge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIG5ldyBRdWVzdGlvbkltcGxlbWVudG9yQmFzZSh0aGlzKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJodG1sXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWwoXCJcIik7IH0pO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImh0bWxcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX2h0bWwudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbk1hdHJpeE1vZGVsLCBNYXRyaXhSb3dNb2RlbCwgSU1hdHJpeERhdGF9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkltcGxlbWVudG9yfSBmcm9tIFwiLi9rb3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3cgZXh0ZW5kcyBNYXRyaXhSb3dNb2RlbCB7XHJcbiAgICBwcml2YXRlIGlzVmFsdWVVcGRhdGluZyA9IGZhbHNlO1xyXG4gICAga29WYWx1ZTogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IGFueSwgcHVibGljIHRleHQ6IHN0cmluZywgcHVibGljIGZ1bGxOYW1lOiBzdHJpbmcsIGRhdGE6IElNYXRyaXhEYXRhLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSwgdGV4dCwgZnVsbE5hbWUsIGRhdGEsIHZhbHVlKTtcclxuICAgICAgICB0aGlzLmtvVmFsdWUgPSBrby5vYnNlcnZhYmxlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmtvVmFsdWUuc3Vic2NyaWJlKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5pc1ZhbHVlVXBkYXRpbmcpIHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYudmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLmlzVmFsdWVVcGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNWYWx1ZVVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhNb2RlbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgbmV3IFF1ZXN0aW9uSW1wbGVtZW50b3IodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KG5hbWU6IGFueSwgdGV4dDogc3RyaW5nLCBmdWxsTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogTWF0cml4Um93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4Um93KG5hbWUsIHRleHQsIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEub3ZlcnJpZGVDbGFzc0NyZWF0b3JlKFwibWF0cml4XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeChcIlwiKTsgfSk7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4KG5hbWUpOyBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7IHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25fbWF0cml4LnRzIiwiaW1wb3J0IHtRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2V9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4uL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uSW1wbGVtZW50b3J9IGZyb20gXCIuL2tvcXVlc3Rpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICBuZXcgUXVlc3Rpb25JbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJtYXRyaXhkcm9wZG93blwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bihcIlwiKTsgfSk7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd24obmFtZSk7IHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTsgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRSb3dzOyAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkltcGxlbWVudG9yfSBmcm9tIFwiLi9rb3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2V9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuaW1wb3J0IHtNYXRyaXhEeW5hbWljUm93TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEeW5hbWljSW1wbGVtZW50b3IgZXh0ZW5kcyBRdWVzdGlvbkltcGxlbWVudG9yIHtcclxuICAgIGtvUm93czogYW55OyBrb1JlY2FsYzogYW55O1xyXG4gICAga29BZGRSb3dDbGljazogYW55OyBrb1JlbW92ZVJvd0NsaWNrOiBhbnk7IGtvT3ZlcmZsb3dYOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbjogUXVlc3Rpb24pIHtcclxuICAgICAgICBzdXBlcihxdWVzdGlvbik7XHJcbiAgICAgICAgdGhpcy5rb1JlY2FsYyA9IGtvLm9ic2VydmFibGUoMCk7XHJcbiAgICAgICAgdGhpcy5rb1Jvd3MgPSBrby5wdXJlQ29tcHV0ZWQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmtvUmVjYWxjKCk7IHJldHVybiAoPFF1ZXN0aW9uTWF0cml4RHluYW1pYz50aGlzLnF1ZXN0aW9uKS52aXNpYmxlUm93cztcclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICB0aGlzLmtvT3ZlcmZsb3dYID0ga28ucHVyZUNvbXB1dGVkKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICg8UXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZT50aGlzLnF1ZXN0aW9uKS5ob3Jpem9udGFsU2Nyb2xsID8gXCJzY3JvbGxcIjogXCJub25lXCI7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbltcImtvUm93c1wiXSA9IHRoaXMua29Sb3dzO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmtvQWRkUm93Q2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYuYWRkUm93KCk7IH1cclxuICAgICAgICB0aGlzLmtvUmVtb3ZlUm93Q2xpY2sgPSBmdW5jdGlvbiAoZGF0YSkgeyBzZWxmLnJlbW92ZVJvdyhkYXRhKTsgfVxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb0FkZFJvd0NsaWNrXCJdID0gdGhpcy5rb0FkZFJvd0NsaWNrO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb1JlbW92ZVJvd0NsaWNrXCJdID0gdGhpcy5rb1JlbW92ZVJvd0NsaWNrO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb092ZXJmbG93WFwiXSA9IHRoaXMua29PdmVyZmxvd1g7XHJcbiAgICAgICAgKDxRdWVzdGlvbk1hdHJpeER5bmFtaWM+dGhpcy5xdWVzdGlvbikucm93Q291bnRDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25Sb3dDb3VudENoYW5nZWQoKTsgfTtcclxuICAgICAgICAoPFF1ZXN0aW9uTWF0cml4RHluYW1pYz50aGlzLnF1ZXN0aW9uKS5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLm9uQ29sdW1uQ2hhbmdlZCgpOyB9O1xyXG4gICAgICAgICg8UXVlc3Rpb25NYXRyaXhEeW5hbWljPnRoaXMucXVlc3Rpb24pLnVwZGF0ZUNlbGxzQ2FsbGJhayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vblVwZGF0ZUNlbGxzKCk7IH07XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25VcGRhdGVDZWxscygpIHtcclxuICAgICAgICAvL0dlbmVyZWF0ZSByb3dzIGFnYWluLlxyXG4gICAgICAgIHZhciByb3dzID0gKDxRdWVzdGlvbk1hdHJpeER5bmFtaWM+dGhpcy5xdWVzdGlvbilbXCJnZW5lcmF0ZWRWaXNpYmxlUm93c1wiXTtcclxuICAgICAgICB2YXIgY29sdW1ucyA9ICg8UXVlc3Rpb25NYXRyaXhEeW5hbWljPnRoaXMucXVlc3Rpb24pLmNvbHVtbnM7XHJcbiAgICAgICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGggPiAwICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB0aGlzLm9uQ29sdW1uQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ29sdW1uQ2hhbmdlZCgpIHtcclxuICAgICAgICB2YXIgcm93cyA9ICg8UXVlc3Rpb25NYXRyaXhEeW5hbWljPnRoaXMucXVlc3Rpb24pLnZpc2libGVSb3dzO1xyXG4gICAgICAgIHRoaXMub25Sb3dDb3VudENoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblJvd0NvdW50Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLmtvUmVjYWxjKHRoaXMua29SZWNhbGMoKSArIDEpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGFkZFJvdygpIHtcclxuICAgICAgICAoPFF1ZXN0aW9uTWF0cml4RHluYW1pYz50aGlzLnF1ZXN0aW9uKS5hZGRSb3coKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW1vdmVSb3cocm93OiBNYXRyaXhEeW5hbWljUm93TW9kZWwpIHtcclxuICAgICAgICB2YXIgcm93cyA9ICg8UXVlc3Rpb25NYXRyaXhEeW5hbWljPnRoaXMucXVlc3Rpb24pLmNhY2hlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHJvd3MuaW5kZXhPZihyb3cpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICg8UXVlc3Rpb25NYXRyaXhEeW5hbWljPnRoaXMucXVlc3Rpb24pLnJlbW92ZVJvdyhpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNJbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5vdmVycmlkZUNsYXNzQ3JlYXRvcmUoXCJtYXRyaXhkeW5hbWljXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWMoXCJcIik7IH0pO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pYyhuYW1lKTsgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdOyBxLnJvd0NvdW50ID0gMjsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLCBNdWx0aXBsZVRleHRJdGVtTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkltcGxlbWVudG9yfSBmcm9tIFwiLi9rb3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVUZXh0SXRlbSBleHRlbmRzIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XHJcbiAgICBwcml2YXRlIGlzS09WYWx1ZVVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICBrb1ZhbHVlOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogYW55ID0gbnVsbCwgdGl0bGU6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcihuYW1lLCB0aXRsZSk7XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlID0ga28ub2JzZXJ2YWJsZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCFzZWxmLmlzS09WYWx1ZVVwZGF0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzS09WYWx1ZVVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmtvVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNLT1ZhbHVlVXBkYXRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0SW1wbGVtZW50b3IgZXh0ZW5kcyBRdWVzdGlvbkltcGxlbWVudG9yIHtcclxuICAgIGtvUm93czogYW55O1xyXG4gICAgY29uc3RydWN0b3IocXVlc3Rpb246IFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgc3VwZXIocXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMua29Sb3dzID0ga28ub2JzZXJ2YWJsZUFycmF5KCg8UXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbD50aGlzLnF1ZXN0aW9uKS5nZXRSb3dzKCkpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb1Jvd3NcIl0gPSB0aGlzLmtvUm93cztcclxuICAgICAgICB0aGlzLm9uQ29sQ291bnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICg8UXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbD50aGlzLnF1ZXN0aW9uKS5jb2xDb3VudENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkNvbENvdW50Q2hhbmdlZCgpOyB9O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ29sQ291bnRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29Sb3dzKCg8UXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbD50aGlzLnF1ZXN0aW9uKS5nZXRSb3dzKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRJbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVUZXh0SXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbShuYW1lLCB0aXRsZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEub3ZlcnJpZGVDbGFzc0NyZWF0b3JlKFwibXVsdGlwbGV0ZXh0aXRlbVwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbShcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLm92ZXJyaWRlQ2xhc3NDcmVhdG9yZShcIm11bHRpcGxldGV4dFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHQoXCJcIik7IH0pO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHQobmFtZSk7IHEuYWRkSXRlbShcInRleHQxXCIpOyBxLmFkZEl0ZW0oXCJ0ZXh0MlwiKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsImltcG9ydCB7UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNoZWNrYm94QmFzZUltcGxlbWVudG9yfSBmcm9tIFwiLi9rb3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXAgZXh0ZW5kcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgbmV3IFF1ZXN0aW9uQ2hlY2tib3hCYXNlSW1wbGVtZW50b3IodGhpcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEub3ZlcnJpZGVDbGFzc0NyZWF0b3JlKFwicmFkaW9ncm91cFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25SYWRpb2dyb3VwKFwiXCIpOyB9KTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFkaW9ncm91cFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvblJhZGlvZ3JvdXAobmFtZSk7IHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlczsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX3JhZGlvZ3JvdXAudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkltcGxlbWVudG9yfSBmcm9tIFwiLi9rb3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYXRpbmdNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuLi9xdWVzdGlvblwiO1xyXG5cclxuY2xhc3MgUXVlc3Rpb25SYXRpbmdJbXBsZW1lbnRvciBleHRlbmRzIFF1ZXN0aW9uSW1wbGVtZW50b3Ige1xyXG4gICAga29WaXNpYmxlUmF0ZVZhbHVlczogYW55OyBrb0NoYW5nZTogYW55OyBrb0NzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocXVlc3Rpb246IFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgc3VwZXIocXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMua29WaXNpYmxlUmF0ZVZhbHVlcyA9IGtvLm9ic2VydmFibGVBcnJheSh0aGlzLmdldFZhbHVlcygpKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29WaXNpYmxlUmF0ZVZhbHVlc1wiXSA9IHRoaXMua29WaXNpYmxlUmF0ZVZhbHVlcztcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb0NoYW5nZSA9IGZ1bmN0aW9uICh2YWwpIHsgc2VsZi5rb1ZhbHVlKHZhbC5pdGVtVmFsdWUpOyB9O1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25bXCJrb0NoYW5nZVwiXSA9IHRoaXMua29DaGFuZ2U7XHJcbiAgICAgICAgKDxRdWVzdGlvblJhdGluZz50aGlzLnF1ZXN0aW9uKS5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLm9uUmF0ZVZhbHVlc0NoYW5nZWQoKTsgfTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uW1wia29HZXRDc3NcIl0gPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAgICAgICAgIHZhciBjc3MgPSAoPFF1ZXN0aW9uUmF0aW5nPnNlbGYucXVlc3Rpb24pLml0ZW1Dc3M7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnF1ZXN0aW9uW1wia29WYWx1ZVwiXSgpID09IHZhbC52YWx1ZSA/IGNzcyArIFwiIGFjdGl2ZVwiIDogY3NzOyB9O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uUmF0ZVZhbHVlc0NoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5rb1Zpc2libGVSYXRlVmFsdWVzKHRoaXMuZ2V0VmFsdWVzKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiAoPFF1ZXN0aW9uUmF0aW5nPnRoaXMucXVlc3Rpb24pLnZpc2libGVSYXRlVmFsdWVzOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZyBleHRlbmRzIFF1ZXN0aW9uUmF0aW5nTW9kZWwge1xyXG4gICAgcHVibGljIGl0ZW1Dc3M6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICBuZXcgUXVlc3Rpb25SYXRpbmdJbXBsZW1lbnRvcih0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblNldERhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtQ3NzID0gdGhpcy5kYXRhW1wiY3NzXCJdLnJhdGluZy5pdGVtO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLm92ZXJyaWRlQ2xhc3NDcmVhdG9yZShcInJhdGluZ1wiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmcoXCJcIik7IH0pO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYXRpbmdcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZyhuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tub2Nrb3V0L2tvcXVlc3Rpb25fcmF0aW5nLnRzIiwiaW1wb3J0IHtRdWVzdGlvblRleHRNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX3RleHRcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4uL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uSW1wbGVtZW50b3J9IGZyb20gXCIuL2tvcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0SW1wbGVtZW50b3IgZXh0ZW5kcyBRdWVzdGlvbkltcGxlbWVudG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb24pIHtcclxuICAgICAgICBzdXBlcihxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZVZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMucXVlc3Rpb24udmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5rb1ZhbHVlKHRoaXMucXVlc3Rpb24udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHQgZXh0ZW5kcyBRdWVzdGlvblRleHRNb2RlbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgbmV3IFF1ZXN0aW9uVGV4dEltcGxlbWVudG9yKHRoaXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLm92ZXJyaWRlQ2xhc3NDcmVhdG9yZShcInRleHRcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dChcIlwiKTsgfSk7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInRleHRcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvblRleHQobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rbm9ja291dC9rb3F1ZXN0aW9uX3RleHQudHMiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktY29tbWVudFxcXCI+XFxyXFxuICAgIDwhLS0ga28gaWZub3Q6IHF1ZXN0aW9uLmtvSXNSZWFkT25seSAtLT5cXHJcXG4gICAgPGlucHV0IGRhdGEtYmluZD1cXFwidmFsdWU6ICRkYXRhLnF1ZXN0aW9uLmtvQ29tbWVudCwgdmlzaWJsZTogJGRhdGEudmlzaWJsZSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLnF1ZXN0aW9uLmNvbW1lbnRcXFwiIC8+XFxyXFxuICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkZGF0YS5xdWVzdGlvbi5rb0NvbW1lbnQsIHZpc2libGU6ICRkYXRhLnZpc2libGUsIGNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5xdWVzdGlvbi5jb21tZW50XFxcIj48L2Rpdj5cXHJcXG4gICAgPCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL2NvbW1lbnQuaHRtbFxuLy8gbW9kdWxlIGlkID0gNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3N1cnZleS1jb250ZW50JywgYWZ0ZXJSZW5kZXI6IGtvRXZlbnRBZnRlclJlbmRlciB9IC0tPlxcclxcbjwhLS0gL2tvIC0tPlxcclxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5LWNvbnRlbnRcXFwiPlxcclxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwiY3NzOiBjc3Mucm9vdCwgYWZ0ZXJSZW5kZXI6IGtvRXZlbnRBZnRlclJlbmRlclxcXCI+XFxyXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTogKHRpdGxlLmxlbmd0aCA+IDApICYmIHNob3dUaXRsZSAmJiBrb1N0YXRlKCkgIT0gJ2NvbXBsZXRlZCcsIGNzczogY3NzLmhlYWRlclxcXCI+XFxyXFxuICAgICAgICAgICAgPGgzIGRhdGEtYmluZD1cXFwidGV4dDpwcm9jZXNzZWRUaXRsZVxcXCI+PC9oMz5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPCEtLSBrbyBpZjoga29TdGF0ZSgpID09IFxcXCJydW5uaW5nXFxcIiAtLT5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJjc3M6IGNzcy5ib2R5XFxcIj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTogc2hvd1Byb2dyZXNzQmFyID09J3RvcCcsIHRlbXBsYXRlOiAnc3VydmV5LXByb2dyZXNzJ1xcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwic3FfcGFnZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LXBhZ2UnLCBkYXRhOiBrb0N1cnJlbnRQYWdlLCBhZnRlclJlbmRlcjoga29BZnRlclJlbmRlclBhZ2UgfVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cXFwibWFyZ2luLXRvcDoxMHB4XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHNob3dQcm9ncmVzc0JhciA9PSdib3R0b20nLCB0ZW1wbGF0ZTogJ3N1cnZleS1wcm9ncmVzcydcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29Jc05hdmlnYXRpb25CdXR0b25zU2hvd2luZywgY3NzOiBjc3MuZm9vdGVyXFxcIj5cXHJcXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOiBwYWdlUHJldlRleHQsIGNsaWNrOiBwcmV2UGFnZSwgdmlzaWJsZTogIWtvSXNGaXJzdFBhZ2UoKSwgY3NzOiBjc3NOYXZpZ2F0aW9uUHJldlxcXCIgLz5cXHJcXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOiBwYWdlTmV4dFRleHQsIGNsaWNrOiBuZXh0UGFnZSwgdmlzaWJsZTogIWtvSXNMYXN0UGFnZSgpLCBjc3M6IGNzc05hdmlnYXRpb25OZXh0XFxcIiAvPlxcclxcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6IGNvbXBsZXRlVGV4dCwgY2xpY2s6IGNvbXBsZXRlTGFzdFBhZ2UsIHZpc2libGU6IGtvSXNMYXN0UGFnZSgpICYmIGlzRWRpdE1vZGUsIGNzczogY3NzTmF2aWdhdGlvbkNvbXBsZXRlXFxcIiAvPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgIDwhLS0ga28gaWY6IGtvU3RhdGUoKSA9PSBcXFwiY29tcGxldGVkXFxcIiAmJiBzaG93Q29tcGxldGVkUGFnZSAtLT5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJodG1sOiBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sXFxcIj48L2Rpdj5cXHJcXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgPCEtLSBrbyBpZjoga29TdGF0ZSgpID09IFxcXCJsb2FkaW5nXFxcIiAtLT5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJodG1sOiBwcm9jZXNzZWRMb2FkaW5nSHRtbFxcXCI+PC9kaXY+XFxyXFxuICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgIDwhLS0ga28gaWY6IGtvU3RhdGUoKSA9PSBcXFwiZW1wdHlcXFwiIC0tPlxcclxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6ZW1wdHlTdXJ2ZXlUZXh0LCBjc3M6IGNzcy5ib2R5XFxcIj48L2Rpdj5cXHJcXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICA8L2Rpdj5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvaW5kZXguaHRtbFxuLy8gbW9kdWxlIGlkID0gNjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5LXBhZ2VcXFwiPlxcclxcbjxkaXY+XFxyXFxuICAgIDxoNCBkYXRhLWJpbmQ9XFxcInZpc2libGU6IChwcm9jZXNzZWRUaXRsZS5sZW5ndGggPiAwKSAmJiBkYXRhLnNob3dQYWdlVGl0bGVzLCB0ZXh0OiBrb05vKCkgKyBwcm9jZXNzZWRUaXRsZSwgY3NzOiBkYXRhLmNzcy5wYWdlVGl0bGVcXFwiPjwvaDQ+XFxyXFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3N1cnZleS1yb3dzJywgZGF0YTogJGRhdGF9IC0tPjwhLS0gL2tvIC0tPlxcclxcbjwvZGl2PiAgICBcXHJcXG48L3NjcmlwdD5cXHJcXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcGFnZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcGFuZWxcXFwiPlxcclxcbjxkaXY+XFxyXFxuICAgIDxoNCBkYXRhLWJpbmQ9XFxcInZpc2libGU6IChwcm9jZXNzZWRUaXRsZS5sZW5ndGggPiAwKSwgdGV4dDogcHJvY2Vzc2VkVGl0bGUsIGNzczogZGF0YS5jc3MucGFnZVRpdGxlXFxcIj48L2g0PlxcclxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwic3R5bGU6IHsgbWFyZ2luTGVmdDoga29Jbm5lck1hcmdpbiB9XFxcIj5cXHJcXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LXJvd3MnLCBkYXRhOiAkZGF0YX0gLS0+PCEtLSAva28gLS0+XFxyXFxuICAgIDwvZGl2PlxcclxcbjwvZGl2PiAgICBcXHJcXG48L3NjcmlwdD5cXHJcXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcGFuZWwuaHRtbFxuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5LXByb2dyZXNzXFxcIj5cXHJcXG4gICAgPGRpdiBzdHlsZT1cXFwid2lkdGg6NjAlO1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IGNzcy5wcm9ncmVzc1xcXCI+XFxyXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwiY3NzOiBjc3MucHJvZ3Jlc3NCYXIsIHN0eWxlOnt3aWR0aDoga29Qcm9ncmVzcygpICsgJyUnfVxcXCJcXHJcXG4gICAgICAgICAgICAgcm9sZT1cXFwicHJvZ3Jlc3NiYXJcXFwiIGFyaWEtdmFsdWVtaW49XFxcIjBcXFwiXFxyXFxuICAgICAgICAgICAgIGFyaWEtdmFsdWVtYXg9XFxcIjEwMFxcXCI+XFxyXFxuICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OmtvUHJvZ3Jlc3NUZXh0XFxcIj48L3NwYW4+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3Byb2dyZXNzLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDY1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1jaGVja2JveFxcXCI+XFxyXFxuICAgIDxmb3JtIGRhdGEtYmluZD1cXFwiY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLmNoZWNrYm94LnJvb3RcXFwiPlxcclxcbiAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB7IGRhdGE6IHF1ZXN0aW9uLmtvVmlzaWJsZUNob2ljZXMsIGFzOiAnaXRlbScsIGFmdGVyUmVuZGVyOiBxdWVzdGlvbi5rb0FmdGVyUmVuZGVyfSAgLS0+XFxyXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwic3R5bGU6e3dpZHRoOiBxdWVzdGlvbi5rb1dpZHRoLCAnbWFyZ2luLXJpZ2h0JzogcXVlc3Rpb24uY29sQ291bnQgPT0gMCA/ICc1cHgnOiAnMHB4J30sIGNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5jaGVja2JveC5pdGVtXFxcIj5cXHJcXG4gICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVxcXCJjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MuY2hlY2tib3guaXRlbVxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7bmFtZTogcXVlc3Rpb24ubmFtZSwgdmFsdWU6IGl0ZW0udmFsdWUsIGlkOiAoJGluZGV4KCkgPT0gMCkgPyBxdWVzdGlvbi5pbnB1dElkIDogJyd9LCBjaGVja2VkOiBxdWVzdGlvbi5rb1ZhbHVlLCBlbmFibGU6ICFxdWVzdGlvbi5rb0lzUmVhZE9ubHkoKVxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLnRleHRcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICA8L2xhYmVsPlxcclxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBxdWVzdGlvbi5oYXNPdGhlciAmJiAoJGluZGV4KCkgPT0gcXVlc3Rpb24ua29WaXNpYmxlQ2hvaWNlcygpLmxlbmd0aC0xKVxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LWNvbW1lbnQnLCBkYXRhOiB7J3F1ZXN0aW9uJzogcXVlc3Rpb24sICd2aXNpYmxlJzogcXVlc3Rpb24ua29PdGhlclZpc2libGUgfSB9LCBjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MuY2hlY2tib3gub3RoZXJcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgPC9mb3JtPlxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1jaGVja2JveC5odG1sXG4vLyBtb2R1bGUgaWQgPSA2NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcXVlc3Rpb24tY29tbWVudFxcXCI+XFxyXFxuICAgIDwhLS0ga28gaWZub3Q6IHF1ZXN0aW9uLmtvSXNSZWFkT25seSAtLT5cXHJcXG4gICAgPHRleHRhcmVhIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjoge2NvbHM6IHF1ZXN0aW9uLmNvbHMsIHJvd3M6IHF1ZXN0aW9uLnJvd3MsIGlkOiBxdWVzdGlvbi5pbnB1dElkLCBwbGFjZWhvbGRlcjogcXVlc3Rpb24ucGxhY2VIb2xkZXJ9LCB2YWx1ZTpxdWVzdGlvbi5rb1ZhbHVlLCBjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MuY29tbWVudFxcXCI+PC90ZXh0YXJlYT5cXHJcXG4gICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDwhLS0ga28gaWY6IHF1ZXN0aW9uLmtvSXNSZWFkT25seSAtLT5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6cXVlc3Rpb24ua29WYWx1ZSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLnRleHRcXFwiPjwvZGl2PlxcclxcbiAgICA8IS0tIC9rbyAtLT5cXHJcXG48L3NjcmlwdD5cXHJcXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tY29tbWVudC5odG1sXG4vLyBtb2R1bGUgaWQgPSA2N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcXVlc3Rpb24tZHJvcGRvd25cXFwiPlxcclxcbiAgICA8IS0tIGtvIGlmbm90OiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgIDxzZWxlY3QgZGF0YS1iaW5kPVxcXCJhdHRyOiB7aWQ6IHF1ZXN0aW9uLmlucHV0SWR9LCBvcHRpb25zOiBxdWVzdGlvbi5rb1Zpc2libGVDaG9pY2VzLCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICd2YWx1ZScsIHZhbHVlOiBxdWVzdGlvbi5rb1ZhbHVlLCBvcHRpb25zQ2FwdGlvbjogcXVlc3Rpb24ub3B0aW9uc0NhcHRpb24sIGNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5kcm9wZG93bi5jb250cm9sXFxcIj48L3NlbGVjdD5cXHJcXG4gICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDwhLS0ga28gaWY6IHF1ZXN0aW9uLmtvSXNSZWFkT25seSAtLT5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6cXVlc3Rpb24ua29WYWx1ZSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLmRyb3Bkb3duLmNvbnRyb2xcXFwiPjwvZGl2PlxcclxcbiAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHF1ZXN0aW9uLmhhc090aGVyXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LWNvbW1lbnQnLCBkYXRhOiB7J3F1ZXN0aW9uJzogcXVlc3Rpb24sICd2aXNpYmxlJzogcXVlc3Rpb24ua29PdGhlclZpc2libGUgfSB9XFxcIj48L2Rpdj5cXHJcXG4gICAgPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLWRyb3Bkb3duLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDY4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1lcnJvcnNcXFwiPlxcclxcbiAgICA8ZGl2IHJvbGU9XFxcImFsZXJ0XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvRXJyb3JzKCkubGVuZ3RoID4gMCwgZm9yZWFjaDogeyBkYXRhOiBrb0Vycm9ycywgYXM6ICdlcnJvcid9LCBjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MuZXJyb3Iucm9vdFxcXCI+XFxyXFxuICAgICAgICA8ZGl2PlxcclxcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5lcnJvci5pY29uXFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OmVycm9yLmdldFRleHQoKSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLmVycm9yLml0ZW1cXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICA8L2Rpdj5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tZXJyb3JzLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDY5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1maWxlXFxcIj5cXHJcXG4gICAgPCEtLSBrbyBpZm5vdDogcXVlc3Rpb24ua29Jc1JlYWRPbmx5IC0tPlxcclxcbiAgICA8aW5wdXQgdHlwZT1cXFwiZmlsZVxcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7aWQ6IHF1ZXN0aW9uLmlucHV0SWR9LCBldmVudDoge2NoYW5nZTogcXVlc3Rpb24uZG9jaGFuZ2V9XFxcIj5cXHJcXG4gICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDxkaXY+XFxyXFxuICAgICAgICA8aW1nIGRhdGEtYmluZD1cXFwiYXR0cjogeyBzcmM6IHF1ZXN0aW9uLmtvRGF0YSwgaGVpZ2h0OiBxdWVzdGlvbi5pbWFnZUhlaWdodCwgd2lkdGg6IHF1ZXN0aW9uLmltYWdlV2lkdGggfSwgdmlzaWJsZTogcXVlc3Rpb24ua29IYXNWYWx1ZVxcXCI+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1maWxlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDcwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1odG1sXFxcIj5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcImh0bWw6IHF1ZXN0aW9uLnByb2Nlc3NlZEh0bWxcXFwiPjwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1odG1sLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1tYXRyaXhcXFwiPlxcclxcbiAgICA8dGFibGUgZGF0YS1iaW5kPVxcXCJjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MubWF0cml4LnJvb3RcXFwiPlxcclxcbiAgICAgICAgPHRoZWFkPlxcclxcbiAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidmlzaWJsZTogcXVlc3Rpb24uaGFzUm93c1xcXCI+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBxdWVzdGlvbi5jb2x1bW5zIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLnRleHRcXFwiPjwvdGg+XFxyXFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgIDwvdHI+XFxyXFxuICAgICAgICA8L3RoZWFkPlxcclxcbiAgICAgICAgPHRib2R5PlxcclxcbiAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogeyBkYXRhOiBxdWVzdGlvbi52aXNpYmxlUm93cywgYXM6ICdyb3cnIH0gLS0+XFxyXFxuICAgICAgICAgICAgPHRyPlxcclxcbiAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBxdWVzdGlvbi5oYXNSb3dzLCB0ZXh0OnJvdy50ZXh0XFxcIj48L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHF1ZXN0aW9uLmNvbHVtbnMgLS0+XFxyXFxuICAgICAgICAgICAgICAgIDx0ZD5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJyYWRpb1xcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7bmFtZTogcm93LmZ1bGxOYW1lLCB2YWx1ZTogJGRhdGEudmFsdWUsIGlkOiAoJGluZGV4KCkgPT0gMCkgJiYgKCRwYXJlbnRDb250ZXh0LiRpbmRleCgpID09IDApID8gcXVlc3Rpb24uaW5wdXRJZCA6ICcnfSwgY2hlY2tlZDogcm93LmtvVmFsdWUsIGVuYWJsZTogIXF1ZXN0aW9uLmtvSXNSZWFkT25seSgpXFxcIiAvPlxcclxcbiAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgPC90Ym9keT5cXHJcXG4gICAgPC90YWJsZT5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcXVlc3Rpb24tbWF0cml4Lmh0bWxcbi8vIG1vZHVsZSBpZCA9IDcyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1tYXRyaXhkcm9wZG93blxcXCI+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJzdHlsZToge292ZXJmbG93WDogcXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbD8gJ3Njcm9sbCc6ICcnfVxcXCI+XFxyXFxuICAgICAgICA8dGFibGUgZGF0YS1iaW5kPVxcXCJjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MubWF0cml4ZHJvcGRvd24ucm9vdFxcXCI+XFxyXFxuICAgICAgICAgICAgPHRoZWFkPlxcclxcbiAgICAgICAgICAgICAgICA8dHI+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogcXVlc3Rpb24uY29sdW1ucyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6IHF1ZXN0aW9uLmdldENvbHVtblRpdGxlKCRkYXRhKSwgc3R5bGU6IHsgbWluV2lkdGg6IHF1ZXN0aW9uLmdldENvbHVtbldpZHRoKCRkYXRhKSB9XFxcIj48L3RoPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgICAgIDwvdHI+XFxyXFxuICAgICAgICAgICAgPC90aGVhZD5cXHJcXG4gICAgICAgICAgICA8dGJvZHk+XFxyXFxuICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogeyBkYXRhOiBxdWVzdGlvbi52aXNpYmxlUm93cywgYXM6ICdyb3cnIH0gLS0+XFxyXFxuICAgICAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWJpbmQ9XFxcInRleHQ6cm93LnRleHRcXFwiPjwvdGQ+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHJvdy5jZWxscy0tPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3N1cnZleS1xdWVzdGlvbi1lcnJvcnMnLCBkYXRhOiAkZGF0YS5xdWVzdGlvbiB9IC0tPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3N1cnZleS1xdWVzdGlvbi0nICsgJGRhdGEucXVlc3Rpb24uZ2V0VHlwZSgpLCBkYXRhOiAkZGF0YS5xdWVzdGlvbiwgYXM6ICdxdWVzdGlvbicgfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgPC90Ym9keT5cXHJcXG4gICAgICAgIDwvdGFibGU+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1tYXRyaXhkcm9wZG93bi5odG1sXG4vLyBtb2R1bGUgaWQgPSA3M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcXVlc3Rpb24tbWF0cml4ZHluYW1pY1xcXCI+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJzdHlsZToge292ZXJmbG93WDogcXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbD8gJ3Njcm9sbCc6ICcnfVxcXCI+XFxyXFxuICAgICAgICA8dGFibGUgZGF0YS1iaW5kPVxcXCJjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MubWF0cml4ZHluYW1pYy5yb290XFxcIj5cXHJcXG4gICAgICAgICAgICA8dGhlYWQ+XFxyXFxuICAgICAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogcXVlc3Rpb24uY29sdW1ucyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6IHF1ZXN0aW9uLmdldENvbHVtblRpdGxlKCRkYXRhKSwgc3R5bGU6IHsgbWluV2lkdGg6IHF1ZXN0aW9uLmdldENvbHVtbldpZHRoKCRkYXRhKSB9XFxcIj48L3RoPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgICAgIDwvdGhlYWQ+XFxyXFxuICAgICAgICAgICAgPHRib2R5PlxcclxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHsgZGF0YTogcXVlc3Rpb24ua29Sb3dzLCBhczogJ3JvdycgfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgPHRyPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiByb3cuY2VsbHMtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdzdXJ2ZXktcXVlc3Rpb24tZXJyb3JzJywgZGF0YTogJGRhdGEucXVlc3Rpb24gfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdzdXJ2ZXktcXVlc3Rpb24tJyArICRkYXRhLnF1ZXN0aW9uLmdldFR5cGUoKSwgZGF0YTogJGRhdGEucXVlc3Rpb24sIGFzOiAncXVlc3Rpb24nIH0gLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazpxdWVzdGlvbi5rb1JlbW92ZVJvd0NsaWNrLCBjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MubWF0cml4ZHluYW1pYy5idXR0b24sIHZhbHVlOiBxdWVzdGlvbi5yZW1vdmVSb3dUZXh0XFxcIiAvPjwvdGQ+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgPC90Ym9keT5cXHJcXG4gICAgICAgIDwvdGFibGU+XFxyXFxuICAgIDwvZGl2PlxcclxcbiAgICA8IS0tIGtvIGlmbm90OiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6cXVlc3Rpb24ua29BZGRSb3dDbGljaywgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLm1hdHJpeGR5bmFtaWMuYnV0dG9uLCB2YWx1ZTogcXVlc3Rpb24uYWRkUm93VGV4dFxcXCIgLz5cXHJcXG4gICAgPCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLW1hdHJpeGR5bmFtaWMuaHRtbFxuLy8gbW9kdWxlIGlkID0gNzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5LXF1ZXN0aW9uLW11bHRpcGxldGV4dFxcXCI+XFxyXFxuICAgIDx0YWJsZSBkYXRhLWJpbmQ9XFxcImNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5tdWx0aXBsZXRleHQucm9vdCwgZm9yZWFjaDogeyBkYXRhOiAgcXVlc3Rpb24ua29Sb3dzLCBhczogJ3JvdycgfVxcXCI+XFxyXFxuICAgICAgICA8dHIgZGF0YS1iaW5kPVxcXCJmb3JlYWNoOiB7IGRhdGE6IHJvdywgYXM6ICdpdGVtJyB9XFxcIj5cXHJcXG4gICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLmZ1bGxUaXRsZSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLm11bHRpcGxldGV4dC5pdGVtVGl0bGVcXFwiPjwvdGQ+XFxyXFxuICAgICAgICAgICAgPHRkPlxcclxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBzdHlsZT1cXFwiZmxvYXQ6bGVmdFxcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7c2l6ZTogcXVlc3Rpb24uaXRlbVNpemUsIGlkOiAoJGluZGV4KCkgPT0gMCkgPyBxdWVzdGlvbi5pbnB1dElkIDogJycsIHBsYWNlaG9sZGVyOiBpdGVtLnBsYWNlSG9sZGVyfSwgdmFsdWU6IGl0ZW0ua29WYWx1ZSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLm11bHRpcGxldGV4dC5pdGVtVmFsdWVcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XFxcImZsb2F0OmxlZnRcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjoge3NpemU6IHF1ZXN0aW9uLml0ZW1TaXplfSwgdGV4dDogaXRlbS5rb1ZhbHVlLCBjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MubXVsdGlwbGV0ZXh0Lml0ZW1WYWx1ZVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgIDwvdGQ+XFxyXFxuICAgICAgICA8L3RyPlxcclxcbiAgICA8L3RhYmxlPlxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1tdWx0aXBsZXRleHQuaHRtbFxuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5LXF1ZXN0aW9uLXJhZGlvZ3JvdXBcXFwiPlxcclxcbiAgICA8Zm9ybSBkYXRhLWJpbmQ9XFxcImNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5yYWRpb2dyb3VwLnJvb3RcXFwiPlxcclxcbiAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB7IGRhdGE6IHF1ZXN0aW9uLmtvVmlzaWJsZUNob2ljZXMsIGFzOiAnaXRlbScsIGFmdGVyUmVuZGVyOiBxdWVzdGlvbi5rb0FmdGVyUmVuZGVyfSAgLS0+XFxyXFxuICAgICAgICA8ZGl2ICBkYXRhLWJpbmQ9XFxcInN0eWxlOnt3aWR0aDogcXVlc3Rpb24ua29XaWR0aCwgJ21hcmdpbi1yaWdodCc6IHF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyAnNXB4JzogJzBweCd9LCBjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MucmFkaW9ncm91cC5pdGVtXFxcIj5cXHJcXG4gICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVxcXCJjc3M6IHF1ZXN0aW9uLnN1cnZleS5jc3MucmFkaW9ncm91cC5sYWJlbFxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJyYWRpb1xcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7bmFtZTogcXVlc3Rpb24ubmFtZSwgdmFsdWU6IGl0ZW0udmFsdWUsIGlkOiAoJGluZGV4KCkgPT0gMCkgPyBxdWVzdGlvbi5pbnB1dElkIDogJyd9LCBjaGVja2VkOiBxdWVzdGlvbi5rb1ZhbHVlLCBlbmFibGU6ICFxdWVzdGlvbi5rb0lzUmVhZE9ubHkoKVxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLnRleHRcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICA8L2xhYmVsPlxcclxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBxdWVzdGlvbi5oYXNPdGhlciAmJiAoJGluZGV4KCkgPT0gcXVlc3Rpb24ua29WaXNpYmxlQ2hvaWNlcygpLmxlbmd0aC0xKVxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LWNvbW1lbnQnLCBkYXRhOiB7J3F1ZXN0aW9uJzogcXVlc3Rpb24sICd2aXNpYmxlJzogcXVlc3Rpb24ua29PdGhlclZpc2libGV9fSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLnJhZGlvZ3JvdXAub3RoZXJcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgPC9mb3JtPlxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi1yYWRpb2dyb3VwLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDc2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN1cnZleS1xdWVzdGlvbi1yYXRpbmdcXFwiPlxcclxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwiY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLnJhdGluZy5yb290XFxcIj5cXHJcXG4gICAgICAgIDwhLS0ga28gZm9yZWFjaDogcXVlc3Rpb24ua29WaXNpYmxlUmF0ZVZhbHVlcyAtLT5cXHJcXG4gICAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XFxcImNzczogcXVlc3Rpb24ua29HZXRDc3MoJGRhdGEpXFxcIj5cXHJcXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwicmFkaW9cXFwiIHN0eWxlPVxcXCJkaXNwbGF5OiBub25lO1xcXCJcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cXFwiYXR0cjoge25hbWU6IHF1ZXN0aW9uLm5hbWUsIGlkOiBxdWVzdGlvbi5uYW1lICsgJGluZGV4KCksIHZhbHVlOiAkZGF0YS52YWx1ZX0sIGV2ZW50OiB7IGNoYW5nZTogcXVlc3Rpb24ua29DaGFuZ2V9LCBlbmFibGU6ICFxdWVzdGlvbi5rb0lzUmVhZE9ubHkoKVxcXCIgLz5cXHJcXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICRpbmRleCgpID09IDAsIHRleHQ6IHF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvblxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogJGRhdGEudGV4dFxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJGluZGV4KCkgPT0gKHF1ZXN0aW9uLmtvVmlzaWJsZVJhdGVWYWx1ZXMoKS5sZW5ndGgtMSksIHRleHQ6IHF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvblxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgPC9sYWJlbD5cXHJcXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHF1ZXN0aW9uLmhhc090aGVyXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LWNvbW1lbnQnLCBkYXRhOiB7J3F1ZXN0aW9uJzogcXVlc3Rpb24gfSB9XFxcIj48L2Rpdj5cXHJcXG4gICAgPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLXJhdGluZy5odG1sXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcXVlc3Rpb24tdGV4dFxcXCI+XFxyXFxuICAgIDwhLS0ga28gaWZub3Q6IHF1ZXN0aW9uLmtvSXNSZWFkT25seSAtLT5cXHJcXG4gICAgPGlucHV0IGRhdGEtYmluZD1cXFwiYXR0cjoge3R5cGU6IHF1ZXN0aW9uLmlucHV0VHlwZSwgc2l6ZTogcXVlc3Rpb24uc2l6ZSwgaWQ6IHF1ZXN0aW9uLmlucHV0SWQsIHBsYWNlaG9sZGVyOiBxdWVzdGlvbi5wbGFjZUhvbGRlcn0sIHZhbHVlOnF1ZXN0aW9uLmtvVmFsdWUsIGNzczogcXVlc3Rpb24uc3VydmV5LmNzcy50ZXh0XFxcIi8+XFxyXFxuICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5rb0lzUmVhZE9ubHkgLS0+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZXh0OnF1ZXN0aW9uLmtvVmFsdWUsIGNzczogcXVlc3Rpb24uc3VydmV5LmNzcy50ZXh0XFxcIj48L2Rpdj5cXHJcXG4gICAgPCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3F1ZXN0aW9uLXRleHQuaHRtbFxuLy8gbW9kdWxlIGlkID0gNzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5LXF1ZXN0aW9uXFxcIj5cXHJcXG4gICAgPGRpdiBzdHlsZT1cXFwidmVydGljYWwtYWxpZ246dG9wXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogcXVlc3Rpb24uc3VydmV5LmNzcy5xdWVzdGlvbi5yb290LCBzdHlsZToge2Rpc3BsYXk6IHF1ZXN0aW9uLmtvVmlzaWJsZSgpID8gJ2lubGluZS1ibG9jayc6ICdub25lJywgbWFyZ2luTGVmdDogcXVlc3Rpb24ua29NYXJnaW5MZWZ0LCBwYWRkaW5nUmlnaHQ6IHF1ZXN0aW9uLmtvUGFkZGluZ1JpZ2h0LCB3aWR0aDogcXVlc3Rpb24ua29SZW5kZXJXaWR0aCB9LCBhdHRyOiB7aWQ6IHF1ZXN0aW9uLmlkfVxcXCI+XFxyXFxuICAgICAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5oYXNUaXRsZSAtLT5cXHJcXG4gICAgICAgIDxoNSBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb24gPT0gJ3RvcCcsIHRleHQ6IHF1ZXN0aW9uLmtvVGl0bGUoKSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLnF1ZXN0aW9uLnRpdGxlXFxcIj48L2g1PlxcclxcbiAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdzdXJ2ZXktcXVlc3Rpb24tZXJyb3JzJywgZGF0YTogcXVlc3Rpb24gfSAtLT5cXHJcXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBxdWVzdGlvbi5rb1RlbXBsYXRlTmFtZSgpLCBkYXRhOiBxdWVzdGlvbiwgYWZ0ZXJSZW5kZXI6IHF1ZXN0aW9uLmtvUXVlc3Rpb25BZnRlclJlbmRlciB9IC0tPlxcclxcbiAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTogcXVlc3Rpb24uaGFzQ29tbWVudFxcXCI+XFxyXFxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6cXVlc3Rpb24uY29tbWVudFRleHRcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LWNvbW1lbnQnLCBkYXRhOiB7J3F1ZXN0aW9uJzogcXVlc3Rpb24sICd2aXNpYmxlJzogdHJ1ZSB9IH1cXFwiPjwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5oYXNUaXRsZSAtLT5cXHJcXG4gICAgICAgIDxoNSBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb24gPT0gJ2JvdHRvbScsIHRleHQ6IHF1ZXN0aW9uLmtvVGl0bGUoKSwgY3NzOiBxdWVzdGlvbi5zdXJ2ZXkuY3NzLnF1ZXN0aW9uLnRpdGxlXFxcIj48L2g1PlxcclxcbiAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2tub2Nrb3V0L3RlbXBsYXRlcy9xdWVzdGlvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSA3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcm93c1xcXCI+XFxyXFxuICAgIDwhLS0ga28gZm9yZWFjaDogeyBkYXRhOiBrb1Jvd3MsIGFzOiAncm93J30gLS0+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiByb3cua29WaXNpYmxlLCBjc3M6IHBhbmVsLmRhdGEuY3NzLnJvd1xcXCI+XFxyXFxuICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHsgZGF0YTogcm93LmtvRWxlbWVudHMsIGFzOiAncXVlc3Rpb24nICwgYWZ0ZXJSZW5kZXI6IHJvdy5rb0FmdGVyUmVuZGVyIH0gLS0+XFxyXFxuICAgICAgICAgICAgPCEtLSBrbyBpZjogcXVlc3Rpb24uaXNQYW5lbCAtLT5cXHJcXG4gICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdzdXJ2ZXktcGFuZWwnLCBkYXRhOiBxdWVzdGlvbiwgYWZ0ZXJSZW5kZXI6ICRwYXJlbnQucGFuZWwua29QYW5lbEFmdGVyUmVuZGVyIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgPCEtLSBrbyBpZjogIXF1ZXN0aW9uLmlzUGFuZWwgLS0+XFxyXFxuICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5LXF1ZXN0aW9uJywgZGF0YTogcXVlc3Rpb24sIGFmdGVyUmVuZGVyOiAkcGFyZW50LnBhbmVsLmtvUXVlc3Rpb25BZnRlclJlbmRlciB9IC0tPjwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDwvZGl2PlxcclxcbiAgICA8IS0tIC9rbyAtLT5cXHJcXG48L3NjcmlwdD5cXHJcXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvcm93cy5odG1sXG4vLyBtb2R1bGUgaWQgPSA4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiXCIgKyByZXF1aXJlKCcuL2luZGV4Lmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL2NvbW1lbnQuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcGFnZS5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wYW5lbC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9yb3dzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb2dyZXNzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uLWNoZWNrYm94Lmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uLWNvbW1lbnQuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24tZHJvcGRvd24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24tZXJyb3JzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uLWZpbGUuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24taHRtbC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbi1tYXRyaXguaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24tbWF0cml4ZHJvcGRvd24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24tbWF0cml4ZHluYW1pYy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbi1tdWx0aXBsZXRleHQuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24tcmFkaW9ncm91cC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbi1yYXRpbmcuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb24tdGV4dC5odG1sJykgKyBcIlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy9rbm9ja291dC90ZW1wbGF0ZXMvZW50cnkuaHRtbFxuLy8gbW9kdWxlIGlkID0gODFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXYgc3R5bGU9XFxcInBvc2l0aW9uOiBmaXhlZDsgYm90dG9tOiAzcHg7IHJpZ2h0OiAxMHB4O1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IGNzcy53aW5kb3cucm9vdFxcXCI+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJjc3M6IGNzcy53aW5kb3cuaGVhZGVyLnJvb3RcXFwiPlxcbiAgICAgICAgPGEgaHJlZj1cXFwiI1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazpkb0V4cGFuZFxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVxcXCJwYWRkaW5nLXJpZ2h0OjEwcHhcXFwiIGRhdGEtYmluZD1cXFwidGV4dDp0aXRsZSwgY3NzOiBjc3Mud2luZG93LmhlYWRlci50aXRsZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBkYXRhLWJpbmQ9XFxcImNzczoga29FeHBhbmRlZENzc1xcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9hPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29FeHBhbmRlZCwgY3NzOiBjc3Mud2luZG93LmJvZHlcXFwiPlxcbiAgICAgICAgPGRpdiBpZD1cXFwid2luZG93U3VydmV5SlNcXFwiPjwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhLi9+L3ZhbC1sb2FkZXIhLi9zcmMva25vY2tvdXQvdGVtcGxhdGVzL3dpbmRvdy93aW5kb3cuaHRtbFxuLy8gbW9kdWxlIGlkID0gODJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJQxZllZGNob3rDrVwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIkRhbMWhw61cIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJIb3Rvdm9cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiSmluw6Egb2Rwb3bEm8SPIChuYXBpxaF0ZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTdHJhbmEgezB9IHogezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJQcsWvemt1bXUgbmVvYnNhaHVqZSDFvsOhZG7DqSBvdMOhemt5LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJExJtrdWplbWUgemEgdnlwbG7Em27DrSBwcsWvemt1bXUhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlByb2LDrWjDoSBuYcSNw610w6Fuw60gcHLFr3prdW11Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWeWJlci4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJPZHBvdsSbenRlIHByb3PDrW0gbmEgb3TDoXprdS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIHbFoWVjaG55IG90w6F6a3kuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiViB0b210byBwb2xpIGx6ZSB6YWRhdCBwb3V6ZSDEjcOtc2xhLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJaYWRlanRlIHByb3PDrW0gYWxlc3BvxYggezB9IHpuYWvFry5cIixcclxuICAgIHRleHRNYXhMZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIG3DqW7EmyBuZcW+IHswfSB6bmFrxa8uXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSBhIG3DqW7EmyBuZcW+IHsxfSB6bmFrxa8uXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlZ5cGzFiHRlIHByb3PDrW0gYWxlc3BvxYggezB9IMWZw6Fka8WvLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVnliZXJ0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB2YXJpYW50eS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIk5ldnliw61yZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IHZhcmlhbnQuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IHbEm3TFocOtIG5lYm8gcm92bm8gezF9IGEgbWVuxaHDrSBuZWJvIHJvdm5vIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCBtZW7FocOtIG5lYm8gcm92bm8gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiWmFkZWp0ZSBwcm9zw61tIHBsYXRub3UgZS1tYWlsb3ZvdSBhZHJlc3UuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiUG/FvmFkYXZlayB2csOhdGlsIGNoeWJ1ICd7MH0nLiB7MX1cIixcclxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJQb8W+YWRhdmVrIG5ldnLDoXRpbCBkYXRhIG5lYm8gY2VzdGEgamUgbmVwbGF0bsOhXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIlZlbGlrb3N0IHNvdWJvcnUgYnkgbmVtxJtsYSBiw710IHbEm3TFocOtIG5lxb4gezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlphZGVqdGUgcHJvc8OtbSBqaW5vdSBob2Rub3R1LlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJWw6HFoSBzb3Vib3Igc2UgbmFocsOhdsOhLiBaa3VzdGUgdG8gcHJvc8OtbSB6YSBuxJtrb2xpayBzZWt1bmQuXCIsXHJcbiAgICBhZGRSb3c6IFwiUMWZaWRhdCDFmcOhZGVrXCIsXHJcbiAgICByZW1vdmVSb3c6IFwiT2RzdHJhbml0XCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3pcIl0gPSBjemVjaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9jemVjaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBkYW5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlRpbGJhZ2VcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJWaWRlcmVcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJGw6ZyZGlnXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2lkZSB7MH0gYWYgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJEZXIgZXIgaW5nZW4gc3lubGlnZSBzcMO4cmdzbcOlbC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWFuZ2UgdGFrIGZvciBkaW4gYmVzdmFyZWxzZSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiU3DDuHJnZXNrZW1hZXQgaGVudGVzIGZyYSBzZXJ2ZXJlbi4uLlwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJWYWxnZnJpdCBzdmFyLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWw6ZsZy4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWxldC5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJBbmdpdiBldCB0YWwuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIkFuZ2l2IG1pbmRzdCB7MH0gdGVnbi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IG1pbmRzdCAgezB9IHN2YXJtdWxpZ2hlZChlcikuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBmw6ZycmUgezB9IHN2YXJtdWxpZ2hlZGVyKGVyKS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIHN0w7hycmUgZW5kIHsxfSBvZyBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiQW5naXYgdmVubGlnc3QgZW4gZ3lsZGlnIGUtbWFpbCBhZHJlc3NlLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBtw6UgaWtrZSBvdmVyc3RpZ2UgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFuZ2l2IGVuIHbDpnJkaSBmb3IgZGl0IHZhbGdmcmllIHN2YXIuXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGFcIl0gPSBkYW5pc2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2RhbmlzaC50cyIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGR1dGNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJWb3JpZ2VcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJWb2xnZW5kZVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkFmc2x1aXRlblwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbmRlcmVcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IHZhbiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkVyIGlzIGdlZW4gemljaHRiYXJlIHBhZ2luYSBvZiB2cmFhZyBpbiBkZXplIHZyYWdlbmxpanN0XCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgb20gZGV6ZSB2cmFnZW5saWpzdCBpbiB0ZSB2dWxsZW5cIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRGUgdnJhZ2VubGlqc3QgaXMgYWFuIGhldCBsYWRlbi4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiS2llcy4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJHZWxpZXZlIGVlbiBhbnR3b29yZCBpbiB0ZSB2dWxsZW5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJIZXQgYW50d29vcmQgbW9ldCBlZW4gZ2V0YWwgemlqblwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJHZWxpZXZlIG1pbnN0ZW4gezB9IGthcmFrdGVycyBpbiB0ZSB2dWxsZW4uXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJHZWxpZXZlIG1pbmltdW0gezB9IGFudHdvb3JkZW4gdGUgc2VsZWN0ZXJlbi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIkdlbGlldmUgbmlldCBtZWVyIGRhbiB7MH0gYW50d29vcmRlbiB0ZSBzZWxlY3RlcmVuLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9IGVuIGtsZWluZXIgb2YgZ2VsaWprIGFhbiB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiR2VsaWV2ZSBlZW4gZ2VsZGlnIGUtbWFpbGFkcmVzIGluIHRlIHZ1bGxlbi5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRGUgZ3Jvb3R0ZSB2YW4gaGV0IGJlc3RhbmQgbWFnIG5pZXQgZ3JvdGVyIHppam4gZGFuIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJHZWxpZXZlIGhldCB2ZWxkICdBbmRlcmUnIGluIHRlIHZ1bGxlblwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIm5sXCJdID0gZHV0Y2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2R1dGNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGZpbm5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIkVkZWxsaW5lblwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlNldXJhYXZhXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiVmFsbWlzXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk11dSAoa3V2YWlsZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTaXZ1IHswfS97MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIlTDpHNzw6Qga3lzZWx5c3PDpCBlaSBvbGUgeWh0w6Rrw6TDpG4gbsOka3l2aWxsw6Qgb2xldmFhIHNpdnVhIHRhaSBreXN5bXlzdMOkLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJLaWl0b3Mga3lzZWx5eW4gdmFzdGFhbWlzZXN0YSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiS3lzZWx5w6QgbGFkYXRhYW4gcGFsdmVsaW1lbHRhLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWYWxpdHNlLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlZhc3RhYSBreXN5bXlrc2Vlbiwga2lpdG9zLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkFydm9uIHR1bGVlIG9sbGEgbnVtZWVyaW5lbi5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiT2xlIGh5dsOkIGphIHN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBtZXJra2nDpC5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIk9sZSBoeXbDpCBqYSB2YWxpdHNlIHbDpGhpbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJPbGUgaHl2w6QgamEgdmFsaXRzZSBlbmludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgdMOkeXR5eSBvbGxhIGVuZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfSBqYSB2w6RoZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyB0w6R5dHl5IG9sbGEgZW5lbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHTDpHl0eXkgb2xsYSB2w6RoZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlN5w7Z0w6QgdmFsaWRpIHPDpGhrw7Zwb3N0aW9zb2l0ZS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJPbGUgaHl2w6QgamEgc3nDtnTDpCBcXFwiTXV1IChrdXZhaWxlKVxcXCJcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmaVwiXSA9IGZpbm5pc2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHMiLCIvL0NyZWF0ZWQgb24gYmVoYWxmIGh0dHBzOi8vZ2l0aHViLmNvbS9GcmFuazEzXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBmcmVuY2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByXFx1MDBlOWNcXHUwMGU5ZGVudFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlN1aXZhbnRcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJUZXJtaW5lclwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBdXRyZSAocHJcXHUwMGU5Y2lzZXIpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gc3VyIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiSWwgbid5IGEgbmkgcGFnZSB2aXNpYmxlIG5pIHF1ZXN0aW9uIHZpc2libGUgZGFucyBjZSBxdWVzdGlvbm5haXJlXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIk1lcmNpIGQnYXZvaXIgclxcdTAwZTlwb25kdSBhdSBxdWVzdGlvbm5haXJlIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJMZSBxdWVzdGlvbm5haXJlIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJDaG9pc2lzc2V6Li4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIkxhIHJcXHUwMGU5cG9uc2UgXFx1MDBlMCBjZXR0ZSBxdWVzdGlvbiBlc3Qgb2JsaWdhdG9pcmUuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvdXRlcyBsZXMgbGlnbmVzIHNvbnQgb2JsaWdhdG9pcmVzXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiTGEgclxcdTAwZTlwb25zZSBkb2l0IFxcdTAwZWF0cmUgdW4gbm9tYnJlLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJNZXJjaSBkJ2VudHJlciBhdSBtb2lucyB7MH0gc3ltYm9sZXMuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzXFx1MDBlOWxlY3Rpb25uZXIgYXUgbW9pbnMgezB9clxcdTAwZTlwb25zZXMuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzXFx1MDBlOWxlY3Rpb25uZXIgYXUgcGx1cyB7MH1yXFx1MDBlOXBvbnNlcy5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiVm90cmUgclxcdTAwZTlwb25zZSAnezB9JyBkb2l0IFxcdTAwZWF0cmVzdXBcXHUwMGU5cmlldXJlIG91IFxcdTAwZTlnYWxlIFxcdTAwZTAgezF9IGV0IGluZlxcdTAwZTlyaWV1cmUgb3VcXHUwMGU5Z2FsZSBcXHUwMGUwIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJWb3RyZSByXFx1MDBlOXBvbnNlICd7MH0nIGRvaXQgXFx1MDBlYXRyZXN1cFxcdTAwZTlyaWV1cmUgb3UgXFx1MDBlOWdhbGUgXFx1MDBlMCB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVm90cmUgclxcdTAwZTlwb25zZSAnezB9JyBkb2l0IFxcdTAwZWF0cmVpbmZcXHUwMGU5cmlldXJlIG91IFxcdTAwZTlnYWxlIFxcdTAwZTAgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiTWVyY2kgZCdlbnRyZXIgdW5lIGFkcmVzc2UgbWFpbCB2YWxpZGUuXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkxhIHRhaWxsZSBkdSBmaWNoaWVyIG5lIGRvaXQgcGFzIGV4Y1xcdTAwZTlkZXIgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIk1lcmNpIGRlIHByXFx1MDBlOWNpc2VyIGxlIGNoYW1wICdBdXRyZScuXCJcclxufTtcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmclwiXSA9IGZyZW5jaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZ2VybWFuU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJadXLDvGNrXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiV2VpdGVyXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRmVydGlnXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2VpdGUgezB9IHZvbiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkVzIGdpYnQga2VpbmUgc2ljaHRiYXJlIEZyYWdlLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJWaWVsZW4gRGFuayBmw7xyIGRhcyBBdXNmw7xsbGVuIGRlcyBGcmFnZWJvZ2VucyFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRGVyIEZyYWdlYm9nZW4gd2lyZCB2b20gU2VydmVyIGdlbGFkZW4uLi5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQmVudXR6ZXJkZWZpbmllcnRlIEFudHdvcnQuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlfDpGhsZW4uLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiQml0dGUgYW50d29ydGVuIFNpZSBhdWYgZGllIEZyYWdlLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkRlciBXZXJ0IHNvbGx0ZSBlaW5lIFphaGwgc2Vpbi5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG1pbmRlc3RlbnMgezB9IFN5bWJvbGUuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIHswfSBWYXJpYW50ZW4uXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBuaWNodCBtZWhyIGFscyB7MH0gVmFyaWFudGVuLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyBzb2xsdGUgZ2xlaWNoIG9kZXIgZ3LDtsOfZXIgc2VpbiBhbHMgezF9IHVuZCBnbGVpY2ggb2RlciBrbGVpbmVyIGFscyB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgc29sbHRlIGdsZWljaCBvZGVyIGdyw7bDn2VyIHNlaW4gYWxzIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyBzb2xsdGUgZ2xlaWNoIG9kZXIga2xlaW5lciBhbHMgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgRW1haWwtQWRyZXNzZSBlaW4uXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkRpZSBEYXRlaWdyw7bDn2Ugc29sbCBuaWNodCBtZWhyIGFscyB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcnQgZsO8ciBJaHJlIGJlbnV0emVyZGVmaW5pZXJ0ZSBBbnR3b3J0IGVpbi5cIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkZVwiXSA9IGdlcm1hblN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwiLy9DcmVhdGVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2Vsb3NwYW5hZ2lvdGFraXNcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGdyZWVrU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCLOoM+Bzr/Ot86zzr/Pjc68zrXOvc6/XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwizpXPgM+MzrzOtc69zr9cIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCLOn867zr/Ous67zq7Pgc+Jz4POt1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCLOhs67zrvOvyAoz4DOsc+BzrHOus6xzrvPjiDOtM65zrXPhc66z4HOuc69zq/Pg8+EzrUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwizqPOtc67zq/OtM6xIHswfSDOsc+Az4wgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCLOlM61zr0gz4XPgM6sz4HPh861zrkgzrrOsc68zq/OsSDOv8+BzrHPhM6uIM+DzrXOu86vzrTOsSDOriDOv8+BzrHPhM6uIM61z4HPjs+EzrfPg863IM+DzrUgzrHPhc+Ez4wgz4TOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLOlc+Fz4fOsc+BzrnPg8+Ezr/Pjc68zrUgzrPOuc6xIM+EzrfOvSDPg8+FzrzPgM67zq7Pgc+Jz4POtyDOsc+Fz4TOv8+FIM+Ezr/PhSDOtc+Bz4nPhM63zrzOsc+Ezr/Ou86/zrPOr86/z4UhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIs6kzr8gzrXPgc+Jz4TOt868zrHPhM6/zrvPjM6zzrnOvyDPhs6/z4HPhM+Ozr3Otc+EzrHOuSDOsc+Azr8gz4TOvyDOtM65zrHOus6/zrzOuc+Dz4TOri4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwizpXPgM65zrvOrc6+z4TOtS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrfOvSDOtc+Bz47PhM63z4POty5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4PPhM65z4IgzrXPgc+Jz4TOrs+DzrXOuc+CIM+DzrUgz4zOu861z4Igz4TOuc+CIM6zz4HOsc68zrzOrc+CLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIs6XIM+EzrnOvM6uIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrHPgc65zrjOvM65z4TOuc66zq4uXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPg8+NzrzOss6/zrvOsS5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM6zz4HOsc68zrzOrc+CLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Mz4fOuSDPgM6xz4HOsc+AzqzOvc+JIM6xz4DOvyB7MH0gz4DOsc+BzrHOu867zrHOs86tz4IuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIs6kzr8gJ3swfScgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6vz4POvyDOriDOvM61zrPOsc67z43PhM61z4HOvyDOsc+Azr8gz4TOvyB7MX0gzrrOsc65IM6vz4POvyDOriDOvM65zrrPgc+Mz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIs6kzr8gJ3swfScgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM61zrPOsc67z43PhM61z4HOvyDOriDOuc+Dzr8gzrzOtSDPhM6/IHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOuc66z4HPjM+EzrXPgc6/IM6uIM6vz4POvyDOsc+Azr8gz4TOvyB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzrzOuc6xIM6xz4DOv860zrXOus+Ezq4gzrTOuc61z43OuM+Fzr3Pg863IGUtbWFpbC5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM+Dz4bOrM67zrzOsSAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDOus61zr3OrCDOtM61zrTOv868zq3Ovc6xIM6uIM63IM65zrTPjM+EzrfPhM6xICfOvM6/zr3Ov8+AzqzPhM65L3BhdGgnIM61zq/Ovc6xzrkgzrXPg8+GzrHOu86tzrzOrc69zrdcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwizqTOvyDOvM6tzrPOtc64zr/PgiDOtM61zr0gzrzPgM6/z4HOtc6vIM69zrEgz4XPgM61z4HOss6tzr3Otc65IM+EzrEgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM63zr0gz4TOuc68zq4gzrPOuc6xIM+Ezr8gz4DOtc60zq/OvyAnzqzOu867zr8nLlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCLOpM6/IM6xz4HPh861zq/OvyDPg86xz4IgzrHOvc61zrLOsc6vzr3Otc65LiDOoM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61IM66zrHPgM6/zrnOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEgzrrOsc65IM60zr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrC5cIixcclxuICAgIGFkZFJvdzogXCLOoM+Bzr/Pg864zq7Ous63IM6zz4HOsc68zrzOrs+CXCIsXHJcbiAgICByZW1vdmVSb3c6IFwizpHPhs6xzq/Pgc61z4POt1wiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZ3JcIl0gPSBncmVla1N1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBwb2xpc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIldzdGVjelwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIkRhbGVqXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiR290b3dlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIklubmEgb2Rwb3dpZWTFuiAod3Bpc3opXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3Ryb25hIHswfSB6IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiTmllIG1hIHdpZG9jem55Y2ggcHl0YcWELlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJEemnEmWt1amVteSB6YSB3eXBlxYJuaWVuaWUgYW5raWV0eSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiVHJ3YSB3Y3p5dHl3YW5pZSBhbmtpZXR5Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJXeWJpZXJ6Li4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB0byBweXRhbmllLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgd3N6eXN0a2llIHB5dGFuaWEuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiVyB0eW0gcG9sdSBtb8W8bmEgd3Bpc2HEhyB0eWxrbyBsaWN6YnkuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyBjbyBuYWptbmllaiB7MH0gem5ha8Ozdy5cIixcclxuICAgIHRleHRNYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIG1uaWVqIG5pxbwgezB9IHpuYWvDs3cuXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyB3acSZY2VqIG5pxbwgezB9IGkgbW5pZWogbmnFvCB7MX0gem5ha8Ozdy5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiUHJvc3rEmSB1enVwZcWCbmnEhyBwcnp5bmFqbW5pZWogezB9IHdpZXJzenkuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgY28gbmFqbW5pZWogezB9IHBvenljamkuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgbmllIHdpxJljZWogbmnFvCB7MH0gcG96eWNqaS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX0gb3JheiBtbmllanN6YSBsdWIgcsOzd25hIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyBtbmllanN6YSBsdWIgcsOzd25hIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlByb3N6xJkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIGVtYWlsLlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIsW7xIVkYW5pZSB6d3LDs2NpxYJvIGLFgsSFZCAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwixbvEhWRhbmllIG5pZSB6d3LDs2NpxYJvIGRhbnljaCBhbGJvIMWbY2llxbxrYSBqZXN0IG5pZXByYXdpZMWCb3dhXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIlJvem1pYXIgcHJ6ZXPFgmFuZWdvIHBsaWt1IG5pZSBtb8W8ZSBwcnpla3JhY3phxIcgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgcG9kYcSHIGlubsSFIG9kcG93aWVkxbouXCIsXHJcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlRyd2EgcHJ6ZW5vc3plbmllIFR3b2plZ28gcGxpa3UsIHByb3N6xJkgc3Byw7Nib3dhxIcgcG9ub3duaWUgemEga2lsa2Egc2VrdW5kLlwiLFxyXG4gICAgYWRkUm93OiBcIkRvZGFqIHdpZXJzelwiLFxyXG4gICAgcmVtb3ZlUm93OiBcIlVzdcWEXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicGxcIl0gPSBwb2xpc2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciByb21hbmlhblN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiVXJtxIN0b3JcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJGaW5hbGl6YXJlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkFsdHVsKHByZWNpemHFo2kpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaW4gezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJOdSBzdW50IMOubnRyZWLEg3JpIHBlbnRydSBhY2VzdCBjaGVzdGlvbmFyXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlbEgyBtdWzFo3VtaW0gcGVudHJ1IHRpbXB1bCBhY29yZGF0IVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJDaGVzdGlvbmFydWwgc2Ugw65uY2FyY8SDLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJBbGVnZcWjaS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJSxINzcHVuc3VsIGxhIGFjZWFzdMSDIMOubnRyZWJhcmUgZXN0ZSBvYmxpZ2F0b3JpdS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG9hdGUgcsSDc3B1bnN1cmlsZSBzdW50IG9ibGlnYXRvcmlpXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiUsSDc3B1bnN1bCB0cmVidWllIHPEgyBmaWUgbnVtZXJpYy5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNpIG1pbmltIHswfSBjYXJhY3RlcmUuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RlemkgbWluaW0gezB9IG9wxaNpdW5pLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiVHJlYnVpZSBzxIMgc2VsZWN0ZXppIG1heGltIHswfSBvcMWjaXVuaS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9IMWfw64gbWFpIG1pYyBzYXUgZWdhbCBjdSB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtaWMgc2F1IGVnYWwgY2EgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlxaNpIG8gYWRyZXNhIGRlIGVtYWlsIHZhbGlkxIMuXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkRpbWVuc2l1bmVhIGZpxZ9pZXJ1bHVpIG51IHRyZWJ1aWUgc8SDIGRlcMSDxZ9lYXNjxIMgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlRyZWJ1aWUgc8SDIGNvbXBsZXRlemkgY8OibXB1bCAnQWx0dWwnLlwiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicm9cIl0gPSByb21hbmlhblN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcm9tYW5pYW4udHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgcnVzc2lhblN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9C10LVcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCLQk9C+0YLQvtCy0L5cIixcclxuICAgIHByb2dyZXNzVGV4dDogXCLQodGC0YDQsNC90LjRhtCwIHswfSDQuNC3IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdGCINC90Lgg0L7QtNC90L7Qs9C+INCy0L7Qv9GA0L7RgdCwLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQktCw0YEg0LfQsCDQt9Cw0L/QvtC70L3QtdC90LjQtSDQsNC90LrQtdGC0YshXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcItCX0LDQs9GA0YPQt9C60LAg0YEg0YHQtdGA0LLQtdGA0LAuLi5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQvtC1ICjQv9C+0LbQsNC70YPQudGB0YLQsCwg0L7Qv9C40YjQuNGC0LUpXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCLQktGL0LHRgNCw0YLRjC4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgS5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCLQntGC0LLQtdGCINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRh9C40YHQu9C+0LwuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRhdC+0YLRjyDQsdGLIHswfSDRgdC40LzQstC+0LvQvtCyLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0YXQvtGC0Y8g0LHRiyB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0L3QtSDQsdC+0LvQtdC1IHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0Lwg0LjQu9C4INCx0L7Qu9GM0YjQtSwg0YfQtdC8IHsxfSwg0Lgg0YDQsNCy0L3Ri9C8INC40LvQuCDQvNC10L3RjNGI0LUsINGH0LXQvCB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINGA0LDQstC90YvQvCDQuNC70Lgg0LHQvtC70YzRiNC1LCDRh9C10LwgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0Lwg0LjQu9C4INC80LXQvdGM0YjQtSwg0YfQtdC8IHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLLlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNCw0L3QvdGL0LUg0LIg0L/QvtC70LUgXFxcItCU0YDRg9Cz0L7QtVxcXCJcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJydVwiXSA9IHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIi8vQ3JlYXRlIGJ5IE1hdHRpYXMgQXNwbHVuZFxyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgc3dlZGlzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiRsO2cmVnw6VlbmRlXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiTsOkc3RhXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRsOkcmRpZ1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbm5hdCAoYmVza3JpdilcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTaWRhIHswfSBhdiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkRldCBmaW5ucyBpbmdlbiBzeW5saWcgc2lkYSBlbGxlciBmcsOlZ2EgaSBlbmvDpHRlbi5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFjayBmw7ZyIGF0dCBkdSBnZW5vbWbDtnJ0IGVua8OkdGVuISFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRW5rw6R0ZW4gbGFkZGFzLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWw6Rsai4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6VnYW4uXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdvcm5hIHDDpSBhbGxhIHJhZGVyLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlbDpHJkZXQgc2thIHZhcmEgbnVtZXJpc2t0LlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJWYXIgdsOkbmxpZyBhbmdlIG1pbnN0IHswfSB0ZWNrZW4uXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlZhciB2w6RubGlnIGZ5bGwgaSBtaW5zdCB7MH0gcmFkZXIuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWYXIgdsOkbmxpZyB2w6RsaiDDpXRtaW5zdG9uZSB7MH0gdmFyaWFudGVyLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogaW50ZSBmbGVyIMOkbiB7MH0gdmFyaWFudGVyLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfSBzYW10IGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiVmFyIHbDpG5saWcgYW5nZSBlbiBrb3JyZWt0IGUtcG9zdGFkcmVzcy5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJGw7ZyZnLDpWdhbiByZXR1cm5lcmFkZSBmZWxldCAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiQW50aW5nZW4gcmV0dXJuZXJhZGUgZsO2cmZyw6VnYW4gaW5nZW4gZGF0YSBlbGxlciBzw6Ugw6RyIGVnZW5za2FwZW4gJ3BhdGgnIGludGUga29ycmVrdFwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdG9ybGVrZW4gZsOlciBlaiDDtnZlcnN0aWdhIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBhbmdlIGRldCBhbmRyYSB2w6RyZGV0LlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJEaW4gZmlsIGxhZGRhcyB1cHAuIFZhciB2w6RubGlnIHbDpG50YSBuw6VncmEgc2VrdW5kZXIgb2NoIGbDtnJzw7ZrIHNlZGFuIGlnZW4uXCIsXHJcbiAgICBhZGRSb3c6IFwiTMOkZ2cgdGlsbCByYWRcIixcclxuICAgIHJlbW92ZVJvdzogXCJUYSBib3J0XCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wic3ZcIl0gPSBzd2VkaXNoU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgdHVya2lzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICAgICAgcGFnZVByZXZUZXh0OiBcIkdlcmlcIixcclxuICAgICAgICBwYWdlTmV4dFRleHQ6IFwixLBsZXJpXCIsXHJcbiAgICAgICAgY29tcGxldGVUZXh0OiBcIkFua2V0aSBUYW1hbWxhXCIsXHJcbiAgICAgICAgb3RoZXJJdGVtVGV4dDogXCJEacSfZXIgKGHDp8Sxa2xhecSxbsSxeilcIixcclxuICAgICAgICBwcm9ncmVzc1RleHQ6IFwiU2F5ZmEgezB9IC8gezF9XCIsXHJcbiAgICAgICAgZW1wdHlTdXJ2ZXk6IFwiQW5rZXR0ZSBnw7Zyw7xudMO8bGVuZWNlayBzYXlmYSB5YSBkYSBzb3J1IG1ldmN1dCBkZcSfaWwuXCIsXHJcbiAgICAgICAgY29tcGxldGluZ1N1cnZleTogXCJBbmtldGltaXppIHRhbWFtbGFkxLHEn8SxbsSxeiBpw6dpbiB0ZcWfZWtrw7xyIGVkZXJpei5cIixcclxuICAgICAgICBsb2FkaW5nU3VydmV5OiBcIkFua2V0IHN1bnVjdWRhbiB5w7xrbGVuaXlvciAuLi5cIixcclxuICAgICAgICBvcHRpb25zQ2FwdGlvbjogXCJTZcOnaW5peiAuLi5cIixcclxuICAgICAgICByZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gc29ydXlhIGNldmFwIHZlcmluaXpcIixcclxuICAgICAgICBudW1lcmljRXJyb3I6IFwiR2lyaWxlbiBkZcSfZXIgbnVtZXJpayBvbG1hbMSxZMSxclwiLFxyXG4gICAgICAgIHRleHRNaW5MZW5ndGg6IFwiRW4gYXogezB9IHNlbWJvbCBnaXJpbml6LlwiLFxyXG4gICAgICAgIG1pblJvd0NvdW50RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2F0xLFyxLEgZG9sZHVydW4uXCIsXHJcbiAgICAgICAgbWluU2VsZWN0RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2XDp2VuZcSfaSBzZcOnaW5pei5cIixcclxuICAgICAgICBtYXhTZWxlY3RFcnJvcjogXCJMw7x0ZmVuIHswfSBhZGV0dGVuIGZhemxhIHNlw6dtZXlpbml6LlwiLFxyXG4gICAgICAgIG51bWVyaWNNaW5NYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBtb3JlIHRoYW4gezF9IGFuZCBlcXVhbCBvciBsZXNzIHRoYW4gezJ9XCIsXHJcbiAgICAgICAgbnVtZXJpY01pbjogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgdmV5YSBiw7x5w7xrIG9sbWFsxLFkxLFyXCIsXHJcbiAgICAgICAgbnVtZXJpY01heDogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgeWEgZGEga8O8w6fDvGsgb2xtYWzEsWTEsXIuXCIsXHJcbiAgICAgICAgaW52YWxpZEVtYWlsOiBcIkzDvHRmZW4gZ2XDp2VybGkgYmlyIGVwb3N0YSBhZHJlc2kgZ2lyaW5pei5cIixcclxuICAgICAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGFsZWJpIMWfdSBoYXRhecSxIGTDtm5kw7wgJ3swfScuIHsxfVwiLFxyXG4gICAgICAgIHVybEdldENob2ljZXNFcnJvcjogXCJUYWxlcCBoZXJoYW5naSBiaXIgdmVyaSBkw7ZubWVkaSB5YSBkYSAncGF0aCcgw7Z6ZWxsacSfaSBoYXRhbMSxLlwiLFxyXG4gICAgICAgIGV4Y2VlZE1heFNpemU6IFwiRG9zeWEgYm95dXR1IHswfSBkZcSfZXJpbmkgZ2XDp2VtZXouXCIsXHJcbiAgICAgICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gZGnEn2VyIGRlxJ9lcmxlcmkgZ2lyaW5pei5cIixcclxuICAgICAgICB1cGxvYWRpbmdGaWxlOiBcIkRvc3lhbsSxeiB5w7xrbGVuaXlvci4gTMOcdGZlbiBiaXJrYcOnIHNhbml5ZSBiZWtsZXlpbiB2ZSB0ZWtyYXIgZGVuZXlpbi5cIixcclxuICAgICAgICBhZGRSb3c6IFwiU2F0xLFyIEVrbGVcIixcclxuICAgICAgICByZW1vdmVSb3c6IFwiS2FsZMSxclwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInRyXCJdID0gdHVya2lzaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwiaW1wb3J0IHtCYXNlLCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xyXG4gICAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcclxuICAgIHN0YXRpYyBnZXQgb3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGlmIChUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgICAgIFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuICF2YWx1ZTsgfSxcclxuICAgICAgICAgICAgbm90ZW1wdHk6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gISghdmFsdWUpOyB9LFxyXG4gICAgICAgICAgICBlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBub3RlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtcImluZGV4T2ZcIl0gJiYgdmFsdWUuaW5kZXhPZihleHBlY3RlZFZhbHVlKSA+IC0xOyB9LFxyXG4gICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiAhdmFsdWUgfHwgIXZhbHVlW1wiaW5kZXhPZlwiXSB8fCB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID09IC0xOyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTsgfSxcclxuICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7IH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcFZhbHVlOiBzdHJpbmcgPSBcImVxdWFsXCI7XHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm9wVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFUcmlnZ2VyLm9wZXJhdG9yc1t2YWx1ZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLm9wVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjaGVjayh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKFRyaWdnZXIub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHZhbHVlLCB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU3VjY2VzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlUcmlnZ2VyT3duZXIge1xyXG4gICAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcclxuICAgIGRvQ29tcGxldGUoKTtcclxuICAgIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBvd25lcjogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldE93bmVyKG93bmVyOiBJU3VydmV5VHJpZ2dlck93bmVyKSB7XHJcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiBmYWxzZTsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclZpc2libGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidmlzaWJsZXRyaWdnZXJcIjsgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1TdWNjZXNzKTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1GYWlsdXJlKTsgfVxyXG4gICAgcHJpdmF0ZSBvblRyaWdnZXIoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMub3duZXIuZ2V0T2JqZWN0cyh0aGlzLnBhZ2VzLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZ1bmMob2JqZWN0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7IGl0ZW0udmlzaWJsZSA9IHRydWU7IH1cclxuICAgIHByb3RlY3RlZCBvbkl0ZW1GYWlsdXJlKGl0ZW06IGFueSkgeyBpdGVtLnZpc2libGUgPSBmYWxzZTsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJjb21wbGV0ZXRyaWdnZXJcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkgeyBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5kb0NvbXBsZXRlKCk7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNldFZhbHVlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XHJcbiAgICBwdWJsaWMgc2V0VG9OYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2V0VmFsdWU6IGFueTtcclxuICAgIHB1YmxpYyBpc1ZhcmlhYmxlOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInNldHZhbHVldHJpZ2dlclwiOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5zZXRWYWx1ZSwgdGhpcy5pc1ZhcmlhYmxlKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRyaWdnZXJcIiwgW1wib3BlcmF0b3JcIiwgXCIhdmFsdWVcIl0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5dHJpZ2dlclwiLCBbXCIhbmFtZVwiXSwgbnVsbCwgXCJ0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidmlzaWJsZXRyaWdnZXJcIiwgW1wicGFnZXNcIiwgXCJxdWVzdGlvbnNcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjb21wbGV0ZXRyaWdnZXJcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUoKTsgfSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2V0dmFsdWV0cmlnZ2VyXCIsIFtcIiFzZXRUb05hbWVcIiwgXCJzZXRWYWx1ZVwiLCBcImlzVmFyaWFibGU6Ym9vbGVhblwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyaWdnZXIudHMiLCIvLyBtb2RlbFxyXG5leHBvcnQgKiBmcm9tIFwiLi9jaHVua3MvbW9kZWxcIjtcclxuXHJcbi8vIGxvY2FsaXphdGlvblxyXG5pbXBvcnQgJy4vY2h1bmtzL2xvY2FsaXphdGlvbic7XHJcblxyXG4vLyBoZWxwZXJzXHJcbmV4cG9ydCAqIGZyb20gICcuL2NodW5rcy9oZWxwZXJzJztcclxuXHJcblxyXG4vLyBjc3Mgc3RhbmRhcmRcclxuZXhwb3J0IHtkZWZhdWx0U3RhbmRhcmRDc3N9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XHJcbi8vIGNzcyBib290c3RyYXBcclxuZXhwb3J0IHtkZWZhdWx0Qm9vdHN0cmFwQ3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3Nib290c3RyYXBcIjtcclxuLy8gc3R5bGVzXHJcbmltcG9ydCBcIi4uL21haW4uc2Nzc1wiO1xyXG5cclxuLy8ga25vY2tvdXRcclxuZXhwb3J0IHtTdXJ2ZXl9IGZyb20gXCIuLi9rbm9ja291dC9rb3N1cnZleVwiOyAvLyBUT0RPIG5lZWQgdG8gcmVtb3ZlIHNvbWVkYXlcclxuZXhwb3J0IHtTdXJ2ZXkgYXMgTW9kZWx9IGZyb20gXCIuLi9rbm9ja291dC9rb3N1cnZleVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uUm93LCBQYWdlLCBQYW5lbH0gZnJvbSBcIi4uL2tub2Nrb3V0L2tvcGFnZVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uSW1wbGVtZW50b3JCYXNlfSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbmJhc2VcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkltcGxlbWVudG9yfSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvblwiO1xyXG5leHBvcnQge1F1ZXN0aW9uU2VsZWN0QmFzZUltcGxlbWVudG9yfSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2VJbXBsZW1lbnRvcn0gZnJvbSBcIi4uL2tub2Nrb3V0L2tvcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ2hlY2tib3h9IGZyb20gXCIuLi9rbm9ja291dC9rb3F1ZXN0aW9uX2NoZWNrYm94XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25Db21tZW50fSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl9jb21tZW50XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25Ecm9wZG93bn0gZnJvbSBcIi4uL2tub2Nrb3V0L2tvcXVlc3Rpb25fZHJvcGRvd25cIjtcclxuZXhwb3J0IHtRdWVzdGlvbkZpbGV9IGZyb20gXCIuLi9rbm9ja291dC9rb3F1ZXN0aW9uX2ZpbGVcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkh0bWx9IGZyb20gXCIuLi9rbm9ja291dC9rb3F1ZXN0aW9uX2h0bWxcIjtcclxuZXhwb3J0IHtNYXRyaXhSb3csIFF1ZXN0aW9uTWF0cml4fSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl9tYXRyaXhcIjtcclxuZXhwb3J0IHtRdWVzdGlvbk1hdHJpeERyb3Bkb3dufSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xyXG5leHBvcnQge1xyXG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljSW1wbGVtZW50b3IsXHJcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNcclxufSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcbmV4cG9ydCB7XHJcbiAgICBNdWx0aXBsZVRleHRJdGVtLCBRdWVzdGlvbk11bHRpcGxlVGV4dEltcGxlbWVudG9yLFxyXG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRcclxufSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuZXhwb3J0IHtRdWVzdGlvblJhZGlvZ3JvdXB9IGZyb20gXCIuLi9rbm9ja291dC9rb3F1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcclxuZXhwb3J0IHtRdWVzdGlvblJhdGluZ30gZnJvbSBcIi4uL2tub2Nrb3V0L2tvcXVlc3Rpb25fcmF0aW5nXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25UZXh0fSBmcm9tIFwiLi4va25vY2tvdXQva29xdWVzdGlvbl90ZXh0XCI7XHJcbmV4cG9ydCB7U3VydmV5V2luZG93fSBmcm9tIFwiLi4va25vY2tvdXQva29TdXJ2ZXlXaW5kb3dcIjtcclxuZXhwb3J0IHtTdXJ2ZXlUZW1wbGF0ZVRleHR9IGZyb20gXCIuLi9rbm9ja291dC90ZW1wbGF0ZVRleHRcIjtcclxuXHJcbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXHJcbi8vZXhwb3J0IHtRdWVzdGlvbkRhdGV9IGZyb20gXCIuLi9wbHVnaW5zL2tub2Nrb3V0L2tvcXVlc3Rpb25fZGF0ZVwiO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2tub2Nrb3V0LnRzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/0.12.8/survey.ko.min.js b/0.12.8/survey.ko.min.js new file mode 100644 index 00000000..cfef0f58 --- /dev/null +++ b/0.12.8/survey.ko.min.js @@ -0,0 +1,6 @@ +/*! + * surveyjs - Survey JavaScript library v0.12.8 + * Copyright (c) 2015-2017 Devsoft Baltic OÜ - http://surveyjs.org/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("knockout")):"function"==typeof define&&define.amd?define("Survey",["knockout"],t):"object"==typeof exports?exports.Survey=t(require("knockout")):e.Survey=t(e.ko)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=96)}([function(e,t,n){"use strict";function r(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}n.d(t,"a",function(){return i}),t.b=r,n.d(t,"c",function(){return o});var i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}},function(e,t,n){"use strict";var r=n(0);n.d(t,"h",function(){return i}),n.d(t,"e",function(){return o}),n.d(t,"d",function(){return a}),n.d(t,"b",function(){return s}),n.d(t,"j",function(){return u}),n.d(t,"g",function(){return l}),n.d(t,"f",function(){return c}),n.d(t,"c",function(){return h}),n.d(t,"i",function(){return p}),n.d(t,"a",function(){return d});var i=function(){function e(e){this.name=e,this.typeValue=null,this.choicesValue=null,this.choicesfunc=null,this.className=null,this.alternativeName=null,this.classNamePart=null,this.baseClassName=null,this.defaultValue=null,this.readOnly=!1,this.visible=!0,this.isLocalizable=!1,this.serializationProperty=null,this.onGetValue=null}return Object.defineProperty(e.prototype,"type",{get:function(){return this.typeValue?this.typeValue:"string"},set:function(e){this.typeValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasToUseGetValue",{get:function(){return this.onGetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.isDefaultValue=function(e){return this.defaultValue?this.defaultValue==e:!e},e.prototype.getValue=function(e){return this.onGetValue?this.onGetValue(e):this.serializationProperty?e[this.serializationProperty].getJson():e[this.name]},e.prototype.getPropertyValue=function(e){return this.isLocalizable?e[this.serializationProperty].text:this.getValue(e)},Object.defineProperty(e.prototype,"hasToUseSetValue",{get:function(){return this.onSetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.setValue=function(e,t,n){this.onSetValue?this.onSetValue(e,t,n):this.serializationProperty?e[this.serializationProperty].setJson(t):e[this.name]=t},e.prototype.getObjType=function(e){return this.classNamePart?e.replace(this.classNamePart,""):e},e.prototype.getClassName=function(e){return this.classNamePart&&e.indexOf(this.classNamePart)<0?e+this.classNamePart:e},Object.defineProperty(e.prototype,"choices",{get:function(){return null!=this.choicesValue?this.choicesValue:null!=this.choicesfunc?this.choicesfunc():null},enumerable:!0,configurable:!0}),e.prototype.setChoices=function(e,t){this.choicesValue=e,this.choicesfunc=t},e}(),o=function(){function e(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null),this.name=e,this.creator=n,this.parentName=r,this.properties=null,this.requiredProperties=null,this.properties=new Array;for(var i=0;i-1&&(r=n.substring(o+1),n=n.substring(0,o)),n=this.getPropertyName(n);var a=new i(n);if(r&&(a.type=r),"object"==typeof t){if(t.type&&(a.type=t.type),t.default&&(a.defaultValue=t.default),!1===t.visible&&(a.visible=!1),t.isRequired&&this.makePropertyRequired(a.name),t.choices){var s="function"==typeof t.choices?t.choices:null,u="function"!=typeof t.choices?t.choices:null;a.setChoices(u,s)}if(t.onGetValue&&(a.onGetValue=t.onGetValue),t.onSetValue&&(a.onSetValue=t.onSetValue),t.serializationProperty){a.serializationProperty=t.serializationProperty;a.serializationProperty&&0==a.serializationProperty.indexOf("loc")&&(a.isLocalizable=!0)}t.isLocalizable&&(a.isLocalizable=t.isLocalizable),t.className&&(a.className=t.className),t.baseClassName&&(a.baseClassName=t.baseClassName),t.classNamePart&&(a.classNamePart=t.classNamePart),t.alternativeName&&(a.alternativeName=t.alternativeName)}return a}},e.prototype.getPropertyName=function(t){return 0==t.length||t[0]!=e.requiredSymbol?t:(t=t.slice(1),this.makePropertyRequired(t),t)},e.prototype.makePropertyRequired=function(e){this.requiredProperties||(this.requiredProperties=new Array),this.requiredProperties.push(e)},e}();o.requiredSymbol="!",o.typeSymbol=":";var a=function(){function e(){this.classes={},this.childrenClasses={},this.classProperties={},this.classRequiredProperties={}}return e.prototype.addClass=function(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null);var i=new o(e,t,n,r);if(this.classes[e]=i,r){this.childrenClasses[r]||(this.childrenClasses[r]=[]),this.childrenClasses[r].push(i)}return i},e.prototype.overrideClassCreatore=function(e,t){var n=this.findClass(e);n&&(n.creator=t)},e.prototype.getProperties=function(e){var t=this.classProperties[e];return t||(t=new Array,this.fillProperties(e,t),this.classProperties[e]=t),t},e.prototype.findProperty=function(e,t){for(var n=this.getProperties(e),r=0;r=0&&e.requiredProperties.splice(n,1))},e.prototype.emptyClassPropertiesHash=function(e){this.classProperties[e.name]=null;for(var t=this.getChildrenClasses(e.name),n=0;n0&&(r.description+=", "),r.description+=i[o].name;r.description+="."}return r}return r.b(t,e),t}(s),l=function(e){function t(t,n,r){var i=e.call(this,n,r)||this;i.baseClassName=t,i.type=n,i.message=r,i.description="The following types are available: ";for(var o=d.metaData.getChildrenClasses(t,!0),a=0;a0&&(i.description+=", "),i.description+="'"+o[a].name+"'";return i.description+=".",i}return r.b(t,e),t}(s),c=function(e){function t(t,n){var r=e.call(this,n,"missingtypeproperty","The property type is missing in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),h=function(e){function t(t,n){var r=e.call(this,n,"incorrecttypeproperty","The property type is incorrect in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),p=function(e){function t(t,n){var r=e.call(this,"requiredproperty","The property '"+t+"' is required in class '"+n+"'.")||this;return r.propertyName=t,r.className=n,r}return r.b(t,e),t}(s),d=function(){function e(){this.errors=new Array}return Object.defineProperty(e,"metaData",{get:function(){return e.metaDataValue},enumerable:!0,configurable:!0}),e.prototype.toJsonObject=function(e){return this.toJsonObjectCore(e,null)},e.prototype.toObject=function(t,n){if(t){var r=null;if(n.getType&&(r=e.metaData.getProperties(n.getType())),r)for(var i in t)if(i!=e.typePropertyName)if(i!=e.positionPropertyName){var o=this.findProperty(r,i);o?this.valueToObj(t[i],n,i,o):this.addNewError(new u(i.toString(),n.getType()),t)}else n[i]=t[i]}},e.prototype.toJsonObjectCore=function(t,n){if(!t.getType)return t;var r={};null==n||n.className||(r[e.typePropertyName]=n.getObjType(t.getType()));for(var i=e.metaData.getProperties(t.getType()),o=0;o0?i:null}else r=this.toJsonObjectCore(r,n);n.isDefaultValue(r)||(t[n.name]=r)}},e.prototype.valueToObj=function(e,t,n,r){if(null!=e){if(null!=r&&r.hasToUseSetValue)return void r.setValue(t,e,this);if(this.isValueArray(e))return void this.valueToArray(e,t,r.name,r);var i=this.createNewObj(e,r);i.newObj&&(this.toObject(e,i.newObj),e=i.newObj),i.error||(t[r.name]=e)}},e.prototype.isValueArray=function(e){return e&&Array.isArray(e)},e.prototype.createNewObj=function(t,n){var r={newObj:null,error:null},i=t[e.typePropertyName];return!i&&null!=n&&n.className&&(i=n.className),i=n.getClassName(i),r.newObj=i?e.metaData.createClass(i):null,r.error=this.checkNewObjectOnErrors(r.newObj,t,n,i),r},e.prototype.checkNewObjectOnErrors=function(t,n,r,i){var o=null;if(t){var a=e.metaData.getRequiredProperties(i);if(a)for(var s=0;s0&&t[n].splice(0,t[n].length);for(var i=0;i-1?this.question.visibleIndex+1+". ":""},t.prototype.koQuestionAfterRender=function(e,t){var n=a.c.GetFirstNonTextElement(e),r=e[0];"#text"==r.nodeName&&(r.data=""),r=e[e.length-1],"#text"==r.nodeName&&(r.data=""),n&&this.question.customWidget&&this.question.customWidget.afterRender(this.question,n)},t}(o.a)},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(4);n.d(t,"b",function(){return a}),n.d(t,"c",function(){return s}),n.d(t,"d",function(){return u}),n.d(t,"a",function(){return l});var a=function(e){function t(){return e.call(this)||this}return r.b(t,e),t.prototype.getText=function(){return i.a.getString("requiredError")},t}(o.e),s=function(e){function t(){return e.call(this)||this}return r.b(t,e),t.prototype.getText=function(){return i.a.getString("numericError")},t}(o.e),u=function(e){function t(t){var n=e.call(this)||this;return n.maxSize=t,n}return r.b(t,e),t.prototype.getText=function(){return i.a.getString("exceedMaxSize").format(this.getTextSize())},t.prototype.getTextSize=function(){var e=["Bytes","KB","MB","GB","TB"],t=[0,0,2,3,3];if(0==this.maxSize)return"0 Byte";var n=Math.floor(Math.log(this.maxSize)/Math.log(1024));return(this.maxSize/Math.pow(1024,n)).toFixed(t[n])+" "+e[n]},t}(o.e),l=function(e){function t(t){var n=e.call(this)||this;return n.text=t,n}return r.b(t,e),t.prototype.getText=function(){return this.text},t}(o.e)},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(23),a=n(4),s=n(3),u=n(8),l=n(26),c=n(25),h=n(5);n.d(t,"a",function(){return p});var p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.isRequiredValue=!1,n.hasCommentValue=!1,n.hasOtherValue=!1,n.readOnlyValue=!1,n.errors=[],n.validators=new Array,n.isvalueChangedCallbackFiring=!1,n.isValueChangedInSurvey=!1,n.locTitleValue=new h.a(n),n.locCommentTextValue=new h.a(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasInput",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputId",{get:function(){return this.id+"i"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{get:function(){var e=this.locTitle.text;return e||this.name},set:function(e){this.locTitle.text=e,this.fireCallback(this.titleChangedCallback)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.locTitleValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locCommentText",{get:function(){return this.locCommentTextValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedTitle",{get:function(){return null!=this.survey?this.survey.processText(this.title):this.title},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fullTitle",{get:function(){if(this.survey&&this.survey.questionTitleTemplate){if(!this.textPreProcessor){var e=this;this.textPreProcessor=new c.a,this.textPreProcessor.onHasValue=function(t){return e.canProcessedTextValues(t.toLowerCase())},this.textPreProcessor.onProcess=function(t){return e.getProcessedTextValue(t)}}return this.textPreProcessor.process(this.survey.questionTitleTemplate)}var t=this.requiredText;t&&(t+=" ");var n=this.no;return n&&(n+=". "),n+t+this.processedTitle},enumerable:!0,configurable:!0}),t.prototype.focus=function(e){void 0===e&&(e=!1),a.c.ScrollElementToTop(this.id);var t=e?this.getFirstErrorInputElementId():this.getFirstInputElementId();a.c.FocusElement(t)&&this.fireCallback(this.focusCallback)},t.prototype.getFirstInputElementId=function(){return this.inputId},t.prototype.getFirstErrorInputElementId=function(){return this.getFirstInputElementId()},t.prototype.canProcessedTextValues=function(e){return"no"==e||"title"==e||"require"==e},t.prototype.getProcessedTextValue=function(e){return"no"==e?this.no:"title"==e?this.processedTitle:"require"==e?this.requiredText:null},t.prototype.supportComment=function(){return!1},t.prototype.supportOther=function(){return!1},Object.defineProperty(t.prototype,"isRequired",{get:function(){return this.isRequiredValue},set:function(e){this.isRequired!=e&&(this.isRequiredValue=e,this.fireCallback(this.titleChangedCallback))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasComment",{get:function(){return this.hasCommentValue},set:function(e){this.supportComment()&&(this.hasCommentValue=e,this.hasComment&&(this.hasOther=!1))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"commentText",{get:function(){var e=this.locCommentText.text;return e||s.a.getString("otherItemText")},set:function(e){this.locCommentText.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasOther",{get:function(){return this.hasOtherValue},set:function(e){this.supportOther()&&this.hasOther!=e&&(this.hasOtherValue=e,this.hasOther&&(this.hasComment=!1),this.hasOtherChanged())},enumerable:!0,configurable:!0}),t.prototype.hasOtherChanged=function(){},Object.defineProperty(t.prototype,"isReadOnly",{get:function(){return this.readOnly||this.survey&&this.survey.isDisplayMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"readOnly",{get:function(){return this.readOnlyValue},set:function(e){this.readOnly!=e&&(this.readOnlyValue=e,this.readOnlyChanged())},enumerable:!0,configurable:!0}),t.prototype.readOnlyChanged=function(){this.fireCallback(this.readOnlyChangedCallback)},Object.defineProperty(t.prototype,"no",{get:function(){if(this.visibleIndex<0)return"";var e=1,t=!0,n="";return this.survey&&this.survey.questionStartIndex&&(n=this.survey.questionStartIndex,parseInt(n)?e=parseInt(n):1==n.length&&(t=!1)),t?(this.visibleIndex+e).toString():String.fromCharCode(n.charCodeAt(0)+this.visibleIndex)},enumerable:!0,configurable:!0}),t.prototype.onSetData=function(){e.prototype.onSetData.call(this),this.onSurveyValueChanged(this.value)},Object.defineProperty(t.prototype,"value",{get:function(){return this.valueFromData(this.getValueCore())},set:function(e){this.setNewValue(e),this.isvalueChangedCallbackFiring||(this.isvalueChangedCallbackFiring=!0,this.fireCallback(this.valueChangedCallback),this.isvalueChangedCallbackFiring=!1)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"comment",{get:function(){return this.getComment()},set:function(e){this.comment!=e&&(this.setComment(e),this.fireCallback(this.commentChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getComment=function(){return null!=this.data?this.data.getComment(this.name):this.questionComment},t.prototype.setComment=function(e){this.setNewComment(e)},t.prototype.isEmpty=function(){return null==this.value},t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),this.checkForErrors(e),this.errors.length>0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return this.errors.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"requiredText",{get:function(){return null!=this.survey&&this.isRequired?this.survey.requiredText:""},enumerable:!0,configurable:!0}),t.prototype.addError=function(e){this.errors.push(e),this.fireCallback(this.errorsChangedCallback)},t.prototype.checkForErrors=function(e){var t=this.errors?this.errors.length:0;if(this.errors=[],this.onCheckForErrors(this.errors),0==this.errors.length&&this.value){var n=this.runValidators();n&&this.errors.push(n)}if(this.survey&&0==this.errors.length){var n=this.survey.validateQuestion(this.name);n&&this.errors.push(n)}e&&(t!=this.errors.length||t>0)&&this.fireCallback(this.errorsChangedCallback)},t.prototype.onCheckForErrors=function(e){this.hasRequiredError()&&this.errors.push(new u.b)},t.prototype.hasRequiredError=function(){return this.isRequired&&this.isEmpty()},t.prototype.runValidators=function(){return(new l.a).run(this)},t.prototype.setNewValue=function(e){this.setNewValueInData(e),this.onValueChanged()},t.prototype.setNewValueInData=function(e){this.isValueChangedInSurvey||(e=this.valueToData(e),this.setValueCore(e))},t.prototype.getValueCore=function(){return null!=this.data?this.data.getValue(this.name):this.questionValue},t.prototype.setValueCore=function(e){null!=this.data?this.data.setValue(this.name,e):this.questionValue=e},t.prototype.valueFromData=function(e){return e},t.prototype.valueToData=function(e){return e},t.prototype.onValueChanged=function(){},t.prototype.setNewComment=function(e){null!=this.data?this.data.setComment(this.name,e):this.questionComment=e},t.prototype.onSurveyValueChanged=function(e){this.isValueChangedInSurvey=!0,this.value=this.valueFromData(e),this.fireCallback(this.commentChangedCallback),this.isValueChangedInSurvey=!1},t.prototype.getValidatorTitle=function(){return null},t}(o.a);i.a.metaData.addClass("question",[{name:"title:text",serializationProperty:"locTitle"},{name:"commentText",serializationProperty:"locCommentText"},"isRequired:boolean","readOnly:boolean",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"}],null,"questionbase")},function(e,t,n){"use strict";var r=n(5);n.d(t,"a",function(){return i});var i=function(){function e(e,t){void 0===t&&(t=null),this.locTextValue=new r.a(null),t&&(this.locText.text=t),this.value=e}return e.createArray=function(t){var n=[];return e.setupArray(n,t),n},e.setupArray=function(e,t){e.push=function(e){var n=Array.prototype.push.call(this,e);return e.locOwner=t,n},e.splice=function(e,n){for(var r=[],i=2;i-1&&(this.itemValue=n.slice(0,r),this.text=n.slice(r+1))}},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasText",{get:function(){return!!this.locText.text},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.hasText?this.locText.text:this.value?this.value.toString():null},set:function(e){this.locText.text=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(t){if(void 0!==t.value){var n=null;this.isObjItemValue(t)&&(t.itemValue=t.itemValue,this.locText.setJson(t.locText.getJson()),n=e.itemValueProp),this.copyAttributes(t,n)}else this.value=t},e.prototype.isObjItemValue=function(e){return void 0!==e.getType&&"itemvalue"==e.getType()},e.prototype.copyAttributes=function(e,t){for(var n in e)"function"!=typeof e[n]&&(t&&t.indexOf(n)>-1||("text"==n?this.locText.setJson(e[n]):this[n]=e[n]))},e}();i.Separator="|",i.itemValueProp=["text","value","hasText","locOwner","locText"]},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(7));n.d(t,"a",function(){return a}),n.d(t,"b",function(){return s});var a=function(e){function t(t){var n=e.call(this,t)||this,r=n;return n.koOtherVisible=i.computed(function(){return r.koValue(),r.isOtherSelected}),n.koVisibleChoices=i.observableArray(r.question.visibleChoices),t.choicesChangedCallback=function(){r.koVisibleChoices(r.question.visibleChoices)},n.question.koOtherVisible=n.koOtherVisible,n.question.koVisibleChoices=n.koVisibleChoices,n}return r.b(t,e),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.question.isOtherSelected},enumerable:!0,configurable:!0}),t}(o.a),s=function(e){function t(t){var n=e.call(this,t)||this;n.koWidth=i.observable(n.colWidth),n.question.koWidth=n.koWidth,n.question.koAfterRender=n.koAfterRender;var r=n;return n.question.colCountChangedCallback=function(){r.onColCountChanged()},n}return r.b(t,e),t.prototype.onColCountChanged=function(){this.question.koWidth=i.observable(this.colWidth)},Object.defineProperty(t.prototype,"colWidth",{get:function(){var e=this.question.colCount;return e>0?100/e+"%":""},enumerable:!0,configurable:!0}),t.prototype.koAfterRender=function(e,t){var n=e[0];"#text"==n.nodeName&&(n.data=""),n=e[e.length-1],"#text"==n.nodeName&&(n.data="")},t}(a)},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(9),a=n(10),s=n(3),u=n(8),l=n(18),c=n(5);n.d(t,"b",function(){return h}),n.d(t,"a",function(){return p});var h=function(e){function t(t){var n=e.call(this,t)||this;n.visibleChoicesCache=null,n.otherItemValue=new a.a("other",s.a.getString("otherItemText")),n.choicesFromUrl=null,n.cachedValueForUrlRequestion=null,n.storeOthersAsComment=!0,n.choicesOrderValue="none",n.isSettingComment=!1,n.choicesValues=a.a.createArray(n),n.choicesByUrl=n.createRestfull(),n.locOtherTextValue=new c.a(n),n.locOtherErrorTextValue=new c.a(n);var r=n;return n.choicesByUrl.getResultCallback=function(e){r.onLoadChoicesFromUrl(e)},n}return r.b(t,e),Object.defineProperty(t.prototype,"otherItem",{get:function(){return this.otherItemValue.text=this.otherText?this.otherText:s.a.getString("otherItemText"),this.otherItemValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.getStoreOthersAsComment()?this.getHasOther(this.value):this.getHasOther(this.cachedValue)},enumerable:!0,configurable:!0}),t.prototype.getHasOther=function(e){return e==this.otherItem.value},t.prototype.createRestfull=function(){return new l.a},t.prototype.getComment=function(){return this.getStoreOthersAsComment()?e.prototype.getComment.call(this):this.commentValue},t.prototype.setComment=function(t){this.getStoreOthersAsComment()?e.prototype.setComment.call(this,t):this.isSettingComment||t==this.commentValue||(this.isSettingComment=!0,this.commentValue=t,this.isOtherSelected&&this.setNewValueInData(this.cachedValue),this.isSettingComment=!1)},t.prototype.setNewValue=function(t){t&&(this.cachedValueForUrlRequestion=t),e.prototype.setNewValue.call(this,t)},t.prototype.valueFromData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueFromData.call(this,t):(this.cachedValue=this.valueFromDataCore(t),this.cachedValue)},t.prototype.valueToData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueToData.call(this,t):(this.cachedValue=t,this.valueToDataCore(t))},t.prototype.valueFromDataCore=function(e){return this.hasUnknownValue(e)?e==this.otherItem.value?e:(this.comment=e,this.otherItem.value):e},t.prototype.valueToDataCore=function(e){return e==this.otherItem.value&&this.getComment()&&(e=this.getComment()),e},t.prototype.hasUnknownValue=function(e){if(!e)return!1;for(var t=this.activeChoices,n=0;n0||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback);var n=null;e&&e.length>0&&(n=new Array,a.a.setData(n,e)),this.choicesFromUrl=n,this.onVisibleChoicesChanged(),this.cachedValueForUrlRequestion&&(this.value=this.cachedValueForUrlRequestion)},t.prototype.onVisibleChoicesChanged=function(){this.visibleChoicesCache=null,this.fireCallback(this.choicesChangedCallback)},t.prototype.sortVisibleChoices=function(e){var t=this.choicesOrder.toLowerCase();return"asc"==t?this.sortArray(e,1):"desc"==t?this.sortArray(e,-1):"random"==t?this.randomizeArray(e):e},t.prototype.sortArray=function(e,t){return e.sort(function(e,n){return e.textn.text?1*t:0})},t.prototype.randomizeArray=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e},t.prototype.clearUnusedValues=function(){e.prototype.clearUnusedValues.call(this),this.isOtherSelected||(this.comment=null)},t}(o.a),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.colCountValue=1,n}return r.b(t,e),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<0||e>4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t}(h);i.a.metaData.addClass("selectbase",["hasComment:boolean","hasOther:boolean",{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"otherText",serializationProperty:"locOtherText"},{name:"otherErrorText",serializationProperty:"locOtherErrorText"},{name:"storeOthersAsComment:boolean",default:!0}],null,"question"),i.a.metaData.addClass("checkboxbase",[{name:"colCount:number",default:1,choices:[0,1,2,3,4]}],null,"selectbase")},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(9),a=n(4),s=n(10),u=n(3),l=n(12),c=n(18),h=n(2),p=n(5);n.d(t,"d",function(){return d}),n.d(t,"c",function(){return f}),n.d(t,"b",function(){return g}),n.d(t,"a",function(){return m});var d=function(e){function t(t,n){void 0===n&&(n=null);var r=e.call(this)||this;return r.name=t,r.isRequired=!1,r.hasOther=!1,r.minWidth="",r.cellType="default",r.inputType="text",r.choicesOrder="none",r.locOwner=null,r.colCountValue=-1,r.choicesValue=s.a.createArray(r),r.locTitleValue=new p.a(r),r.locOptionsCaptionValue=new p.a(r),r.locPlaceHolderValue=new p.a(r),r.choicesByUrl=new c.a,r}return r.b(t,e),t.prototype.getType=function(){return"matrixdropdowncolumn"},Object.defineProperty(t.prototype,"title",{get:function(){return this.locTitle.text?this.locTitle.text:this.name},set:function(e){this.locTitle.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.locTitleValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){s.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<-1||e>4||(this.colCountValue=e)},enumerable:!0,configurable:!0}),t.prototype.getLocale=function(){return this.locOwner?this.locOwner.getLocale():""},t}(a.a),f=function(){function e(e,t,n){this.column=e,this.row=t,this.questionValue=n.createQuestion(this.row,this.column),this.questionValue.setData(t)}return Object.defineProperty(e.prototype,"question",{get:function(){return this.questionValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.question.value},set:function(e){this.question.value=e},enumerable:!0,configurable:!0}),e}(),g=function(){function e(t,n){this.rowValues={},this.rowComments={},this.isSettingValue=!1,this.cells=[],this.data=t,this.value=n,this.idValue=e.getId(),this.buildCells()}return e.getId=function(){return"srow_"+e.idCounter++},Object.defineProperty(e.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowName",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.rowValues},set:function(e){if(this.isSettingValue=!0,this.rowValues={},null!=e)for(var t in e)this.rowValues[t]=e[t];for(var n=0;n4||(this.columnColCountValue=e,this.fireCallback(this.updateCellsCallbak))},enumerable:!0,configurable:!0}),t.prototype.getColumnTitle=function(e){var t=e.title;if(e.isRequired&&this.survey){var n=this.survey.requiredText;n&&(n+=" "),t=n+t}return t},t.prototype.getColumnWidth=function(e){return e.minWidth?e.minWidth:this.columnMinWidth},Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){s.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text?this.locOptionsCaption.text:u.a.getString("optionsCaption")},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),t.prototype.addColumn=function(e,t){void 0===t&&(t=null);var n=new d(e,t);return this.columnsValue.push(n),n},Object.defineProperty(t.prototype,"visibleRows",{get:function(){return this.generatedVisibleRows=this.generateRows(),this.generatedVisibleRows},enumerable:!0,configurable:!0}),t.prototype.generateRows=function(){return null},t.prototype.createMatrixRow=function(e,t,n){return null},t.prototype.createNewValue=function(e){return e||{}},t.prototype.getRowValue=function(e,t,n){void 0===n&&(n=!1);var r=t[e.rowName]?t[e.rowName]:null;return!r&&n&&(r={},t[e.rowName]=r),r},t.prototype.onBeforeValueChanged=function(e){},t.prototype.onValueChanged=function(){if(!this.isRowChanging&&(this.onBeforeValueChanged(this.value),this.generatedVisibleRows&&0!=this.generatedVisibleRows.length)){this.isRowChanging=!0;for(var e=this.createNewValue(this.value),t=0;t0)return n[r].question}return null},t.prototype.createQuestion=function(e,t){var n=this.createQuestionCore(e,t);return n.name=t.name,n.isRequired=t.isRequired,n.hasOther=t.hasOther,n.readOnly=this.readOnly,n.setData(this.survey),t.hasOther&&n instanceof l.b&&(n.storeOthersAsComment=!1),n},t.prototype.createQuestionCore=function(e,t){var n="default"==t.cellType?this.cellType:t.cellType,r=this.getQuestionName(e,t);return"checkbox"==n?this.createCheckbox(r,t):"radiogroup"==n?this.createRadiogroup(r,t):"text"==n?this.createText(r,t):"comment"==n?this.createComment(r,t):this.createDropdown(r,t)},t.prototype.getQuestionName=function(e,t){return e.rowName+"_"+t.name},t.prototype.getColumnChoices=function(e){return e.choices&&e.choices.length>0?e.choices:this.choices},t.prototype.getColumnOptionsCaption=function(e){return e.optionsCaption?e.optionsCaption:this.optionsCaption},t.prototype.createDropdown=function(e,t){var n=this.createCellQuestion("dropdown",e);return this.setSelectBaseProperties(n,t),n.optionsCaption=this.getColumnOptionsCaption(t),n},t.prototype.createCheckbox=function(e,t){var n=this.createCellQuestion("checkbox",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.createRadiogroup=function(e,t){var n=this.createCellQuestion("radiogroup",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.setSelectBaseProperties=function(e,t){e.choicesOrder=t.choicesOrder,e.choices=this.getColumnChoices(t),e.choicesByUrl.setData(t.choicesByUrl),e.choicesByUrl.isEmpty||e.choicesByUrl.run()},t.prototype.createText=function(e,t){var n=this.createCellQuestion("text",e);return n.inputType=t.inputType,n.placeHolder=t.placeHolder,n},t.prototype.createComment=function(e,t){var n=this.createCellQuestion("comment",e);return n.placeHolder=t.placeHolder,n},t.prototype.createCellQuestion=function(e,t){return h.a.Instance.createQuestion(e,t)},t.prototype.deleteRowValue=function(e,t){return delete e[t.rowName],0==Object.keys(e).length?null:e},t.prototype.onRowChanged=function(e,t){var n=this.createNewValue(this.value),r=this.getRowValue(e,n,!0);for(var i in r)delete r[i];if(t){t=JSON.parse(JSON.stringify(t));for(var i in t)r[i]=t[i]}0==Object.keys(r).length&&(n=this.deleteRowValue(n,e)),this.isRowChanging=!0,this.setNewValue(n),this.isRowChanging=!1},t}(o.a);i.a.metaData.addClass("matrixdropdowncolumn",["name",{name:"title",serializationProperty:"locTitle"},{name:"choices:itemvalues",onGetValue:function(e){return s.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"default",choices:["default","dropdown","checkbox","radiogroup","text","comment"]},{name:"colCount",default:-1,choices:[-1,0,1,2,3,4]},"isRequired:boolean","hasOther:boolean","minWidth",{name:"placeHolder",serializationProperty:"locPlaceHolder"},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]}],function(){return new d("")}),i.a.metaData.addClass("matrixdropdownbase",[{name:"columns:matrixdropdowncolumns",className:"matrixdropdowncolumn"},"horizontalScroll:boolean",{name:"choices:itemvalues",onGetValue:function(e){return s.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"dropdown",choices:["dropdown","checkbox","radiogroup","text","comment"]},{name:"columnColCount",default:0,choices:[0,1,2,3,4]},"columnMinWidth"],function(){return new m("")},"question")},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(24)),a=n(4),s=n(28),u=n(16),l=n(29),c=n(22);n.d(t,"a",function(){return h}),c.a.Instance.onCustomWidgetAdded.add(function(e){e.widgetJson.isDefaultRender||(e.htmlTemplate||(e.htmlTemplate="
'htmlTemplate' attribute is missed.
"),(new l.a).replaceText(e.htmlTemplate,"widget",e.name))});var h=function(e){function t(t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null);var o=e.call(this,t)||this;if(o.onRendered=new a.b,o.isFirstRender=!0,r&&(o.css=r),n&&(o.renderedElement=n),void 0===i)throw new Error("knockoutjs library is not loaded.");return o.render(n),o}return r.b(t,e),Object.defineProperty(t,"cssType",{get:function(){return u.b.currentType},set:function(e){u.b.currentType=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"cssNavigationComplete",{get:function(){return this.getNavigationCss(this.css.navigationButton,this.css.navigation.complete)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"cssNavigationPrev",{get:function(){return this.getNavigationCss(this.css.navigationButton,this.css.navigation.prev)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"cssNavigationNext",{get:function(){return this.getNavigationCss(this.css.navigationButton,this.css.navigation.next)},enumerable:!0,configurable:!0}),t.prototype.getNavigationCss=function(e,t){var n="";return e&&(n=e),t&&(n+=" "+t),n},Object.defineProperty(t.prototype,"css",{get:function(){return u.b.getCss()},set:function(e){this.mergeValues(e,this.css)},enumerable:!0,configurable:!0}),t.prototype.render=function(e){void 0===e&&(e=null),this.updateCustomWidgets(this.currentPage);var t=this;e&&"string"==typeof e&&(e=document.getElementById(e)),e&&(this.renderedElement=e),(e=this.renderedElement)&&(e.innerHTML=this.getTemplate(),t.applyBinding())},t.prototype.koEventAfterRender=function(e,t){t.onRendered.fire(self,{}),t.afterRenderSurvey(e)},t.prototype.loadSurveyFromService=function(t,n){void 0===t&&(t=null),void 0===n&&(n=null),n&&(this.renderedElement=n),e.prototype.loadSurveyFromService.call(this,t)},t.prototype.setCompleted=function(){e.prototype.setCompleted.call(this),this.updateKoCurrentPage()},t.prototype.createNewPage=function(e){return new s.b(e)},t.prototype.getTemplate=function(){return l.b},t.prototype.onBeforeCreating=function(){var e=this;this.dummyObservable=i.observable(0),this.koCurrentPage=i.computed(function(){return e.dummyObservable(),e.currentPage}),this.koIsNavigationButtonsShowing=i.computed(function(){return e.dummyObservable(),e.isNavigationButtonsShowing}),this.koIsFirstPage=i.computed(function(){return e.dummyObservable(),e.isFirstPage}),this.koIsLastPage=i.computed(function(){return e.dummyObservable(),e.isLastPage}),this.koProgressText=i.computed(function(){return e.dummyObservable(),e.progressText}),this.koProgress=i.computed(function(){return e.dummyObservable(),e.getProgress()}),this.koState=i.computed(function(){return e.dummyObservable(),e.state}),this.koAfterRenderPage=function(t,n){var r=a.c.GetFirstNonTextElement(t);r&&e.afterRenderPage(r)}},t.prototype.currentPageChanged=function(t,n){this.updateKoCurrentPage(),e.prototype.currentPageChanged.call(this,t,n),!this.isDesignMode&&this.focusFirstQuestionAutomatic&&this.focusFirstQuestion()},t.prototype.pageVisibilityChanged=function(t,n){e.prototype.pageVisibilityChanged.call(this,t,n),this.updateKoCurrentPage()},t.prototype.onLoadSurveyFromService=function(){this.render()},t.prototype.onLoadingSurveyFromService=function(){this.render()},t.prototype.applyBinding=function(){this.renderedElement&&(this.updateKoCurrentPage(),i.cleanNode(this.renderedElement),this.isFirstRender||this.updateCurrentPageQuestions(),this.isFirstRender=!1,i.applyBindings(this,this.renderedElement))},t.prototype.updateKoCurrentPage=function(){this.dummyObservable(this.dummyObservable()+1)},t.prototype.updateCurrentPageQuestions=function(){for(var e=this.currentPage?this.currentPage.questions:[],t=0;t-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},e.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"operator",{get:function(){return this.opValue},set:function(t){t&&(t=t.toLowerCase(),e.operators[t]&&(this.opValue=t))},enumerable:!0,configurable:!0}),e.prototype.perform=function(t,n){return void 0===t&&(t=null),void 0===n&&(n=null),t||(t=this.left),n||(n=this.right),e.operators[this.operator](this.getPureValue(t),this.getPureValue(n))},e.prototype.getPureValue=function(e){if(!e||"string"!=typeof e)return e;e.length>0&&("'"==e[0]||'"'==e[0])&&(e=e.substr(1));var t=e.length;return t>0&&("'"==e[t-1]||'"'==e[t-1])&&(e=e.substr(0,t-1)),e},e}();o.operatorsValue=null;var a=function(){function e(){this.connectiveValue="and",this.children=[]}return Object.defineProperty(e.prototype,"connective",{get:function(){return this.connectiveValue},set:function(e){e&&(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e||(this.connectiveValue=e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0==this.children.length},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.children=[],this.connective="and"},e}(),s=function(){function e(e){this.root=new a,this.expression=e,this.processValue=new i.a}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,(new r.a).parse(this.expressionValue,this.root))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){return this.values=e,this.runNode(this.root)},e.prototype.runNode=function(e){for(var t="and"==e.connective,n=0;n-1?this.path.split(";"):this.path.split(","),0==e.length&&e.push(this.path),e},t.prototype.getValue=function(e){return this.valueName?e[this.valueName]:Object.keys(e).length<1?null:e[Object.keys(e)[0]]},t.prototype.getTitle=function(e){return this.titleName?e[this.titleName]:null},t}(i.a);a.a.metaData.addClass("choicesByUrl",["url","path","valueName","titleName"],function(){return new l})},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.getFirstName=function(e){if(!e)return e;for(var t="",n=0;n0;){if(!i&&"["==e[0]){if(!Array.isArray(r))return n;for(var o=1,a="";o=r.length)return n;r=r[o]}else{i||(e=e.substr(1));var s=this.getFirstName(e);if(!s)return n;if(!r[s])return n;r=r[s],e=e.substr(s.length)}i=!1}return n.value=r,n.hasValue=!0,n},e.prototype.getIntValue=function(e){return"0"==e||(0|e)>0&&e%1==0?Number(e):-1},e}()},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(4),a=n(21);n.d(t,"a",function(){return s});var s=function(e){function t(t){void 0===t&&(t="");var n=e.call(this,t)||this;return n.name=t,n.numValue=-1,n.navigationButtonsVisibility="inherit",n}return r.b(t,e),t.prototype.getType=function(){return"page"},Object.defineProperty(t.prototype,"num",{get:function(){return this.numValue},set:function(e){this.numValue!=e&&(this.numValue=e,this.onNumChanged(e))},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){for(var e=0;e0},e}(),c=function(e){function t(n){void 0===n&&(n="");var r=e.call(this)||this;r.name=n,r.dataValue=null,r.rowValues=null,r.conditionRunner=null,r.elementsValue=new Array,r.isQuestionsReady=!1,r.questionsValue=new Array,r.parent=null,r.visibleIf="",r.visibleIndex=-1,r.visibleValue=!0,r.idValue=t.getPanelId(),r.locTitleValue=new u.a(r);var i=r;return r.elementsValue.push=function(e){return i.doOnPushElement(this,e)},r.elementsValue.splice=function(e,t){for(var n=[],r=2;r=e.length||o.push(e[a+t]);var s=(u=Array.prototype.splice).call.apply(u,[e,t,n].concat(r));this.markQuestionListDirty(),r||(r=[]);for(var a=0;a-1){n.updateVisible();break}}},t.prototype.buildRows=function(){for(var e=new Array,t=0;t=this.elements.length?this.elements.push(e):this.elements.splice(t,0,e))},t.prototype.addQuestion=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addPanel=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addNewQuestion=function(e,t){var n=s.a.Instance.createQuestion(e,t);return this.addQuestion(n),n},t.prototype.addNewPanel=function(e){var t=this.createNewPanel(e);return this.addPanel(t),t},t.prototype.createNewPanel=function(e){return new h(e)},t.prototype.removeElement=function(e){var t=this.elements.indexOf(e);if(t<0){for(var n=0;n0&&(e[t]=this.valuesHash[t]);return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visiblePages",{get:function(){if(this.isDesignMode)return this.pages;for(var e=new Array,t=0;t0&&(this.currentPage=e[0]),this.currentPageValue},set:function(e){var t=this.visiblePages;if(!(null!=e&&t.indexOf(e)<0)&&e!=this.currentPageValue){var n=this.currentPageValue;this.currentPageValue=e,this.updateCustomWidgets(e),this.currentPageChanged(e,n)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPageNo",{get:function(){return this.visiblePages.indexOf(this.currentPage)},set:function(e){this.visiblePages;e<0||e>=this.visiblePages.length||(this.currentPage=this.visiblePages[e])},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){this.currentPageValue&&(this.currentPageValue.scrollToTop(),this.currentPageValue.focusFirstQuestion())},Object.defineProperty(t.prototype,"state",{get:function(){return this.isLoading?"loading":this.isCompleted?"completed":this.currentPage?"running":"empty"},enumerable:!0,configurable:!0}),t.prototype.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),e&&(this.data=null,this.variablesHash={}),this.isCompleted=!1,t&&this.visiblePageCount>0&&(this.currentPage=this.visiblePages[0])},t.prototype.mergeValues=function(e,t){if(t&&e)for(var n in e){var r=e[n];r&&"object"==typeof r?(t[n]||(t[n]={}),this.mergeValues(r,t[n])):t[n]=r}},t.prototype.updateCustomWidgets=function(e){if(e)for(var t=0;t-1},enumerable:!0,configurable:!0}),t.prototype.setCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT")},t.prototype.deleteCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=;")},t.prototype.nextPage=function(){return!this.isLastPage&&((!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doNextPage(),!0)))},Object.defineProperty(t.prototype,"isCurrentPageHasErrors",{get:function(){return null==this.currentPage||this.currentPage.hasErrors(!0,!0)},enumerable:!0,configurable:!0}),t.prototype.prevPage=function(){if(this.isFirstPage)return!1;var e=this.visiblePages,t=e.indexOf(this.currentPage);this.currentPage=e[t-1]},t.prototype.completeLastPage=function(){return(!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doComplete(),!0))},Object.defineProperty(t.prototype,"isFirstPage",{get:function(){return null==this.currentPage||0==this.visiblePages.indexOf(this.currentPage)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLastPage",{get:function(){if(null==this.currentPage)return!0;var e=this.visiblePages;return e.indexOf(this.currentPage)==e.length-1},enumerable:!0,configurable:!0}),t.prototype.doComplete=function(){this.clearUnusedValues(),this.setCookie(),this.setCompleted(),this.onComplete.fire(this,null),this.surveyPostId&&this.sendResult()},Object.defineProperty(t.prototype,"isValidatingOnServer",{get:function(){return this.isValidatingOnServerValue},enumerable:!0,configurable:!0}),t.prototype.setIsValidatingOnServer=function(e){e!=this.isValidatingOnServer&&(this.isValidatingOnServerValue=e,this.onIsValidatingOnServerChanged())},t.prototype.onIsValidatingOnServerChanged=function(){},t.prototype.doServerValidation=function(){if(!this.onServerValidateQuestions)return!1;for(var e=this,t={data:{},errors:{},survey:this,complete:function(){e.completeServerValidation(t)}},n=0;n"+this.getLocString("completingSurvey")+""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedLoadingHtml",{get:function(){return"

"+this.getLocString("loadingSurvey")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){if(null==this.currentPage)return"";var e=this.visiblePages,t=e.indexOf(this.currentPage)+1;return this.getLocString("progressText").format(t,e.length)},enumerable:!0,configurable:!0}),t.prototype.afterRenderSurvey=function(e){this.onAfterRenderSurvey.fire(this,{survey:this,htmlElement:e})},t.prototype.afterRenderPage=function(e){this.onAfterRenderPage.isEmpty||this.onAfterRenderPage.fire(this,{page:this.currentPage,htmlElement:e})},t.prototype.afterRenderQuestion=function(e,t){this.onAfterRenderQuestion.fire(this,{question:e,htmlElement:t})},t.prototype.afterRenderPanel=function(e,t){this.onAfterRenderPanel.fire(this,{panel:e,htmlElement:t})},t.prototype.uploadFile=function(e,t,n,r){var i=!0;return this.onUploadFile.fire(this,{name:e,file:t,accept:i}),!!i&&(!n&&this.surveyPostId&&this.uploadFileCore(e,t,r),!0)},t.prototype.uploadFileCore=function(e,t,n){var r=this;n&&n("uploading"),(new l.a).sendFile(this.surveyPostId,t,function(t,i){n&&n(t?"success":"error"),t&&r.setValue(e,i)})},t.prototype.getPage=function(e){return this.pages[e]},t.prototype.addPage=function(e){null!=e&&(this.pages.push(e),this.updateVisibleIndexes())},t.prototype.addNewPage=function(e){var t=this.createNewPage(e);return this.addPage(t),t},t.prototype.removePage=function(e){var t=this.pages.indexOf(e);t<0||(this.pages.splice(t,1),this.currentPageValue==e&&(this.currentPage=this.pages.length>0?this.pages[0]:null),this.updateVisibleIndexes())},t.prototype.getQuestionByName=function(e,t){void 0===t&&(t=!1);var n=this.getAllQuestions();t&&(e=e.toLowerCase());for(var r=0;r0&&(this.jsonErrors=t.errors),this.isLoadingFromJsonValue=!1,this.updateProcessedTextValues(),this.hasCookie&&this.doComplete(),this.doElementsOnLoad(),this.runConditions(),this.updateVisibleIndexes()}},t.prototype.onBeforeCreating=function(){},t.prototype.onCreating=function(){},t.prototype.updateProcessedTextValues=function(){this.processedTextValues={};var e=this;this.processedTextValues.pageno=function(t){return null!=e.currentPage?e.visiblePages.indexOf(e.currentPage)+1:0},this.processedTextValues.pagecount=function(t){return e.visiblePageCount};for(var t=this.getAllQuestions(),n=0;n=0;n--){var r=t[n],i=this.getName(e.substring(r.start+1,r.end));if(this.canProcessName(i)&&(!this.onHasValue||this.onHasValue(i))){var o=this.onProcess(i);null==o&&(o=""),e=e.substr(0,r.start)+o+e.substr(r.end+1)}}return e},e.prototype.getItems=function(e){for(var t=[],n=e.length,i=-1,o="",a=0;a-1){var s=new r;s.start=i,s.end=a,t.push(s)}i=-1}return t},e.prototype.getName=function(e){if(e)return e.trim()},e.prototype.canProcessName=function(e){if(!e)return!1;for(var t=0;tn.value?(n.error=new o.a(this.getErrorText(t)),n):this.maxValue&&this.maxValue0&&e.length0&&e.length>this.maxLength?new u(null,new o.a(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return this.minLength>0&&this.maxLength>0?a.a.getString("textMinMaxLength").format(this.minLength,this.maxLength):this.minLength>0?a.a.getString("textMinLength").format(this.minLength):a.a.getString("textMaxLength").format(this.maxLength)},t}(l),d=function(e){function t(t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=e.call(this)||this;return r.minCount=t,r.maxCount=n,r}return r.b(t,e),t.prototype.getType=function(){return"answercountvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),null==e||e.constructor!=Array)return null;var n=e.length;return this.minCount&&nthis.maxCount?new u(null,new o.a(this.getErrorText(a.a.getString("maxSelectError").format(this.maxCount)))):null},t.prototype.getDefaultErrorText=function(e){return e},t}(l),f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;return n.regex=t,n}return r.b(t,e),t.prototype.getType=function(){return"regexvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),this.regex&&e?new RegExp(this.regex).test(e)?null:new u(e,new o.a(this.getErrorText(t))):null},t}(l),g=function(e){function t(){var t=e.call(this)||this;return t.re=/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,t}return r.b(t,e),t.prototype.getType=function(){return"emailvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),e?this.re.test(e)?null:new u(e,new o.a(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return a.a.getString("invalidEmail")},t}(l);s.a.metaData.addClass("surveyvalidator",["text"]),s.a.metaData.addClass("numericvalidator",["minValue:number","maxValue:number"],function(){return new h},"surveyvalidator"),s.a.metaData.addClass("textvalidator",["minLength:number","maxLength:number"],function(){return new p},"surveyvalidator"),s.a.metaData.addClass("answercountvalidator",["minCount:number","maxCount:number"],function(){return new d},"surveyvalidator"),s.a.metaData.addClass("regexvalidator",["regex"],function(){return new f},"surveyvalidator"),s.a.metaData.addClass("emailvalidator",[],function(){return new g},"surveyvalidator")},function(e,t){},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(20)),a=n(21),s=n(1),u=n(4),l=n(2);n.d(t,"a",function(){return c}),n.d(t,"c",function(){return d}),n.d(t,"b",function(){return f});var c=function(e){function t(t){var n=e.call(this,t)||this;return n.panel=t,n.koVisible=i.observable(n.visible),n.koElements=i.observableArray(),n}return r.b(t,e),t.prototype.addElement=function(t){e.prototype.addElement.call(this,t),this.koElements(this.elements)},t.prototype.onVisibleChanged=function(){this.koVisible(this.visible),e.prototype.onVisibleChanged.call(this)},t.prototype.koAfterRender=function(e,t){for(var n=0;n0?e+". ":"")},t.prototype.onRenderWidthChanged=function(){this.koInnerMargin(this.getIndentSize(this.innerIndent))},t.prototype.getIndentSize=function(e){if(e<1)return"";if(!this.data)return"";var t=this.data.css;return t?e*t.question.indent+"px":""},t}(a.c),f=function(e){function t(t){void 0===t&&(t="");var n=e.call(this,t)||this;return new p(n),n.onCreating(),n}return r.b(t,e),t.prototype.createRow=function(){return new c(this)},t.prototype.createNewPanel=function(e){return new d(e)},t.prototype.onCreating=function(){},t.prototype.onNumChanged=function(e){this.koNo(e>0?e+". ":"")},t}(o.a);s.a.metaData.overrideClassCreatore("panel",function(){return new d}),s.a.metaData.overrideClassCreatore("page",function(){return new f}),l.b.Instance.registerElement("panel",function(e){return new d(e)})},function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"a",function(){return i});var r=n(81),i=function(){function e(){}return e.prototype.addText=function(e,t,n){t=this.getId(t,n),this.text=this.text+'"},e.prototype.replaceText=function(e,t,n){void 0===n&&(n=null);var r=this.getId(t,n),i=this.text.indexOf(r);if(i<0)return void this.addText(e,t,n);if(!((i=this.text.indexOf(">",i))<0)){var o=i+1;i=this.text.indexOf("",o),i<0||(this.text=this.text.substr(0,o)+e+this.text.substr(i))}},e.prototype.getId=function(e,t){var n='id="survey-'+e;return t&&(n+="-"+t),n+'"'},Object.defineProperty(e.prototype,"text",{get:function(){return r},set:function(e){r=e},enumerable:!0,configurable:!0}),e}()},function(e,t,n){"use strict";var r=n(15);n.d(t,"a",function(){return i});var i=function(){function e(){}return e.prototype.parse=function(e,t){return this.text=e,this.root=t,this.root.clear(),this.at=0,this.length=this.text.length,this.parseText()},e.prototype.toString=function(e){return this.root=e,this.nodeToString(e)},e.prototype.toStringCore=function(e){return e?e.children?this.nodeToString(e):e.left?this.conditionToString(e):"":""},e.prototype.nodeToString=function(e){if(e.isEmpty)return"";for(var t="",n=0;n1&&(t="("+t+")"),t},e.prototype.conditionToString=function(e){if(!e.right||!e.operator)return"";var t=e.left;t&&!this.isNumeric(t)&&(t="'"+t+"'");var n=t+" "+this.operationToString(e.operator);if(this.isNoRightOperation(e.operator))return n;var r=e.right;return r&&!this.isNumeric(r)&&(r="'"+r+"'"),n+" "+r},e.prototype.operationToString=function(e){return"equal"==e?"=":"notequal"==e?"!=":"greater"==e?">":"less"==e?"<":"greaterorequal"==e?">=":"lessorequal"==e?"<=":e},e.prototype.isNumeric=function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)},e.prototype.parseText=function(){return this.node=this.root,this.expressionNodes=[],this.expressionNodes.push(this.node),this.readConditions()&&this.at>=this.length},e.prototype.readConditions=function(){var e=this.readCondition();if(!e)return e;var t=this.readConnective();return!t||(this.addConnective(t),this.readConditions())},e.prototype.readCondition=function(){var e=this.readExpression();if(e<0)return!1;if(1==e)return!0;var t=this.readString();if(!t)return!1;var n=this.readOperator();if(!n)return!1;var i=new r.b;if(i.left=t,i.operator=n,!this.isNoRightOperation(n)){var o=this.readString();if(!o)return!1;i.right=o}return this.addCondition(i),!0},e.prototype.readExpression=function(){if(this.skip(),this.at>=this.length||"("!=this.ch)return 0;this.at++,this.pushExpression();var e=this.readConditions();return e?(this.skip(),e=")"==this.ch,this.at++,this.popExpression(),1):-1},Object.defineProperty(e.prototype,"ch",{get:function(){return this.text.charAt(this.at)},enumerable:!0,configurable:!0}),e.prototype.skip=function(){for(;this.at"==e||"<"==e||"="==e||"!"==e},e.prototype.isBrackets=function(e){return"("==e||")"==e},e.prototype.readString=function(){if(this.skip(),this.at>=this.length)return null;var e=this.at,t=this.isQuotes(this.ch);t&&this.at++;for(var n=this.isOperatorChar(this.ch);this.at1&&this.isQuotes(r[0])){var i=r.length-1;this.isQuotes(r[r.length-1])&&i--,r=r.substr(1,i)}return r},e.prototype.isNoRightOperation=function(e){return"empty"==e||"notempty"==e},e.prototype.readOperator=function(){var e=this.readString();return e?(e=e.toLowerCase(),">"==e&&(e="greater"),"<"==e&&(e="less"),">="!=e&&"=>"!=e||(e="greaterorequal"),"<="!=e&&"=<"!=e||(e="lessorequal"),"="!=e&&"=="!=e||(e="equal"),"<>"!=e&&"!="!=e||(e="notequal"),"contain"==e&&(e="contains"),"notcontain"==e&&(e="notcontains"),e):null},e.prototype.readConnective=function(){var e=this.readString();return e?(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e&&(e=null),e):null},e.prototype.pushExpression=function(){var e=new r.c;this.expressionNodes.push(e),this.node=e},e.prototype.popExpression=function(){var e=this.expressionNodes.pop();this.node=this.expressionNodes[this.expressionNodes.length-1],this.node.children.push(e)},e.prototype.addCondition=function(e){this.node.children.push(e)},e.prototype.addConnective=function(e){if(this.node.children.length<2)this.node.connective=e;else if(this.node.connective!=e){var t=this.node.connective,n=this.node.children;this.node.clear(),this.node.connective=e;var i=new r.c;i.connective=t,i.children=n,this.node.children.push(i);var o=new r.c;this.node.children.push(o),this.node=o}},e}()},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.loadSurvey=function(t,n){var r=new XMLHttpRequest;r.open("GET",e.serviceUrl+"/getSurvey?surveyId="+t),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.onload=function(){var e=JSON.parse(r.response);n(200==r.status,e,r.response)},r.send()},e.prototype.sendResult=function(t,n,r,i,o){void 0===i&&(i=null),void 0===o&&(o=!1);var a=new XMLHttpRequest;a.open("POST",e.serviceUrl+"/post/"),a.setRequestHeader("Content-Type","application/json; charset=utf-8");var s={postId:t,surveyResult:JSON.stringify(n)};i&&(s.clientId=i),o&&(s.isPartialCompleted=!0);var u=JSON.stringify(s);a.onload=a.onerror=function(){r&&r(200==a.status,a.response)},a.send(u)},e.prototype.sendFile=function(t,n,r){var i=new XMLHttpRequest;i.onload=i.onerror=function(){r&&r(200==i.status,JSON.parse(i.response))},i.open("POST",e.serviceUrl+"/upload/",!0);var o=new FormData;o.append("file",n),o.append("postId",t),i.send(o)},e.prototype.getResult=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&name="+n;i.open("GET",e.serviceUrl+"/getResult?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null,t=null;if(200==i.status){e=JSON.parse(i.response),t=[];for(var n in e.QuestionResult){var o={name:n,value:e.QuestionResult[n]};t.push(o)}}r(200==i.status,e,t,i.response)},i.send()},e.prototype.isCompleted=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&clientId="+n;i.open("GET",e.serviceUrl+"/isCompleted?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null;200==i.status&&(e=JSON.parse(i.response)),r(200==i.status,e,i.response)},i.send()},e}();r.serviceUrl="https://dxsurveyapi.azurewebsites.net/api/Survey"},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(2),a=n(12);n.d(t,"a",function(){return s});var s=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n}return r.b(t,e),t.prototype.getHasOther=function(e){return!(!e||!Array.isArray(e))&&e.indexOf(this.otherItem.value)>=0},t.prototype.valueFromDataCore=function(e){if(!e||!Array.isArray(e))return e;for(var t=0;t0&&e.size>this.maxSize&&this.errors.push(new s.d(this.maxSize)),(t!=this.errors.length||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback),this.errors.length>0},t.prototype.isFileImage=function(e){if(e&&e.type){return 0==e.type.toLowerCase().indexOf("image")}},t}(i.a);o.a.metaData.addClass("file",["showPreview:boolean","imageHeight","imageWidth","storeDataAsText:boolean","maxSize:number"],function(){return new l("")},"question"),a.a.Instance.registerQuestion("file",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(23),o=n(1),a=n(2),s=n(5);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.locHtmlValue=new s.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"html"},Object.defineProperty(t.prototype,"html",{get:function(){return this.locHtml.text},set:function(e){this.locHtml.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locHtml",{get:function(){return this.locHtmlValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedHtml",{get:function(){return this.survey?this.survey.processHtml(this.html):this.html},enumerable:!0,configurable:!0}),t}(i.a);o.a.metaData.addClass("html",[{name:"html:html",serializationProperty:"locHtml"}],function(){return new u("")},"questionbase"),a.a.Instance.registerQuestion("html",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(10),a=n(9),s=n(1),u=n(3),l=n(8),c=n(2);n.d(t,"a",function(){return h}),n.d(t,"b",function(){return p});var h=function(e){function t(t,n,r,i,o){var a=e.call(this)||this;return a.name=t,a.text=n,a.fullName=r,a.data=i,a.rowValue=o,a}return r.b(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.rowValue},set:function(e){this.rowValue=e,this.data&&this.data.onMatrixRowChanged(this),this.onValueChanged()},enumerable:!0,configurable:!0}),t.prototype.onValueChanged=function(){},t}(i.a),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.isRowChanging=!1,n.isAllRowRequired=!1,n.columnsValue=o.a.createArray(n),n.rowsValue=o.a.createArray(n),n}return r.b(t,e),t.prototype.getType=function(){return"matrix"},Object.defineProperty(t.prototype,"hasRows",{get:function(){return this.rowsValue.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columns",{get:function(){return this.columnsValue},set:function(e){o.a.setData(this.columnsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.rowsValue},set:function(e){o.a.setData(this.rowsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRows",{get:function(){var e=new Array,t=this.value;t||(t={});for(var n=0;nt.MaxRowCount)){if(this.rowCountValue=e,this.value&&this.value.length>e){var n=this.value;n.splice(e),this.value=n}this.fireCallback(this.rowCountChangedCallback)}},enumerable:!0,configurable:!0}),t.prototype.addRow=function(){this.generatedVisibleRows&&this.generatedVisibleRows.push(this.createMatrixRow(null)),this.rowCount++},t.prototype.removeRow=function(e){if(!(e<0||e>=this.rowCount)){if(this.generatedVisibleRows&&ethis.rowCount&&t.splice(this.rowCount-1);for(var n=t.length;n0){n=!1;break}return n?null:e},t.prototype.getRowValueByIndex=function(e,t){return t>=0&&t4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getRows=function(){for(var e=this.colCount,t=this.items,n=[],r=0,i=0;i=e&&(r=0);return n},t.prototype.onValueChanged=function(){e.prototype.onValueChanged.call(this),this.onItemValueChanged()},t.prototype.createTextItem=function(e,t){return new h(e,t)},t.prototype.onItemValueChanged=function(){if(!this.isMultipleItemValueChanging)for(var e=0;e0?this.rateValues:t.defaultRateValues},enumerable:!0,configurable:!0}),t.prototype.getType=function(){return"rating"},t.prototype.supportGoNextPageAutomatic=function(){return!0},t.prototype.supportComment=function(){return!0},t.prototype.supportOther=function(){return!0},Object.defineProperty(t.prototype,"minRateDescription",{get:function(){return this.locMinRateDescription.text},set:function(e){this.locMinRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMinRateDescription",{get:function(){return this.locMinRateDescriptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxRateDescription",{get:function(){return this.locMaxRateDescription.text},set:function(e){this.locMaxRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMaxRateDescription",{get:function(){return this.locMaxRateDescriptionValue},enumerable:!0,configurable:!0}),t}(o.a);l.defaultRateValues=[],i.a.setData(l.defaultRateValues,[1,2,3,4,5]),a.a.metaData.addClass("rating",["hasComment:boolean",{name:"rateValues:itemvalues",onGetValue:function(e){return i.a.getData(e.rateValues)},onSetValue:function(e,t){e.rateValues=t}},{name:"minRateDescription",alternativeName:"mininumRateDescription",serializationProperty:"locMinRateDescription"},{name:"maxRateDescription",alternativeName:"maximumRateDescription",serializationProperty:"locMaxRateDescription"}],function(){return new l("")},"question"),s.a.Instance.registerQuestion("rating",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(1),a=n(9),s=n(5);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.size=25,n.inputType="text",n.locPlaceHolderValue=new s.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"text"},t.prototype.isEmpty=function(){return e.prototype.isEmpty.call(this)||""==this.value},t.prototype.supportGoNextPageAutomatic=function(){return!0},Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),t.prototype.setNewValue=function(t){t=this.correctValueType(t),e.prototype.setNewValue.call(this,t)},t.prototype.correctValueType=function(e){return e&&("number"==this.inputType||"range"==this.inputType)?this.isNumber(e)?parseFloat(e):"":e},t.prototype.isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},t}(a.a);o.a.metaData.addClass("text",[{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]},{name:"size:number",default:25},{name:"placeHolder",serializationProperty:"locPlaceHolder"}],function(){return new u("")},"question"),i.a.Instance.registerQuestion("text",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(24);n.d(t,"a",function(){return a});var a=function(e){function t(t){var n=e.call(this)||this;return n.surveyValue=n.createSurvey(t),n.surveyValue.showTitle=!1,n.windowElement=document.createElement("div"),n}return r.b(t,e),t.prototype.getType=function(){return"window"},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isShowing",{get:function(){return this.isShowingValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpanded",{get:function(){return this.isExpandedValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{get:function(){return this.titleValue?this.titleValue:this.survey.title},set:function(e){this.titleValue=e},enumerable:!0,configurable:!0}),t.prototype.expand=function(){this.expandcollapse(!0)},t.prototype.collapse=function(){this.expandcollapse(!1)},t.prototype.createSurvey=function(e){return new o.a(e)},t.prototype.expandcollapse=function(e){this.isExpandedValue=e},t}(i.a);a.surveyElementName="windowSurveyJS"},function(e,t,n){"use strict";var r=n(16);n.d(t,"a",function(){return i});var i={root:"",header:"panel-heading",body:"panel-body",footer:"panel-footer",navigationButton:"",navigation:{complete:"",prev:"",next:""},progress:"progress center-block",progressBar:"progress-bar",pageTitle:"",row:"",question:{root:"",title:"",comment:"form-control",indent:20},error:{root:"alert alert-danger",icon:"glyphicon glyphicon-exclamation-sign",item:""},checkbox:{root:"form-inline",item:"checkbox",other:""},comment:"form-control",dropdown:{root:"",control:"form-control"},matrix:{root:"table"},matrixdropdown:{root:"table"},matrixdynamic:{root:"table",button:"button"},multipletext:{root:"table",itemTitle:"",itemValue:"form-control"},radiogroup:{root:"form-inline",item:"radio",label:"",other:""},rating:{root:"btn-group",item:"btn btn-default"},text:"form-control",window:{root:"modal-content",body:"modal-body",header:{root:"modal-header panel-title",title:"pull-left",button:"glyphicon pull-right",buttonExpanded:"glyphicon pull-right glyphicon-chevron-up",buttonCollapsed:"glyphicon pull-right glyphicon-chevron-down"}}};r.b.bootstrap=i},function(e,t,n){"use strict";n(83),n(84),n(85),n(86),n(87),n(88),n(89),n(90),n(91),n(92),n(93),n(94)},function(e,t,n){"use strict";var r=n(27),i=(n.n(r),n(26));n.d(t,"b",function(){return i.b}),n.d(t,"c",function(){return i.c}),n.d(t,"d",function(){return i.d}),n.d(t,"e",function(){return i.e}),n.d(t,"f",function(){return i.f}),n.d(t,"g",function(){return i.g}),n.d(t,"h",function(){return i.h}),n.d(t,"i",function(){return i.a});var o=n(4);n.d(t,"j",function(){return o.a}),n.d(t,"k",function(){return o.b}),n.d(t,"l",function(){return o.e});var a=n(10);n.d(t,"m",function(){return a.a});var s=n(5);n.d(t,"n",function(){return s.a});var u=n(18);n.d(t,"o",function(){return u.a});var l=n(15);n.d(t,"p",function(){return l.b}),n.d(t,"q",function(){return l.c}),n.d(t,"r",function(){return l.a});var c=n(30);n.d(t,"s",function(){return c.a});var h=n(19);n.d(t,"t",function(){return h.a});var p=n(8);n.d(t,"u",function(){return p.a}),n.d(t,"v",function(){return p.d}),n.d(t,"w",function(){return p.c});var d=n(1);n.d(t,"x",function(){return d.b}),n.d(t,"y",function(){return d.c}),n.d(t,"z",function(){return d.d}),n.d(t,"A",function(){return d.e}),n.d(t,"B",function(){return d.f}),n.d(t,"C",function(){return d.g}),n.d(t,"D",function(){return d.a}),n.d(t,"E",function(){return d.h}),n.d(t,"F",function(){return d.i}),n.d(t,"G",function(){return d.j});var f=n(13);n.d(t,"H",function(){return f.c}),n.d(t,"I",function(){return f.d}),n.d(t,"J",function(){return f.b}),n.d(t,"K",function(){return f.a});var g=n(38);n.d(t,"L",function(){return g.b}),n.d(t,"M",function(){return g.a});var m=n(39);n.d(t,"N",function(){return m.b}),n.d(t,"O",function(){return m.a});var y=n(37);n.d(t,"P",function(){return y.a}),n.d(t,"Q",function(){return y.b});var v=n(40);n.d(t,"R",function(){return v.a}),n.d(t,"S",function(){return v.b});var b=n(21);n.d(t,"T",function(){return b.c}),n.d(t,"U",function(){return b.a}),n.d(t,"V",function(){return b.b});var C=n(20);n.d(t,"W",function(){return C.a});var w=n(9);n.d(t,"X",function(){return w.a});var x=n(23);n.d(t,"Y",function(){return x.a});var V=n(12);n.d(t,"Z",function(){return V.a}),n.d(t,"_0",function(){return V.b});var P=n(32);n.d(t,"_1",function(){return P.a});var k=n(33);n.d(t,"_2",function(){return k.a});var T=n(34);n.d(t,"_3",function(){return T.a});var q=n(2);n.d(t,"_4",function(){return q.a}),n.d(t,"_5",function(){return q.b});var O=n(35);n.d(t,"_6",function(){return O.a});var R=n(36);n.d(t,"_7",function(){return R.a});var S=n(41);n.d(t,"_8",function(){return S.a});var E=n(42);n.d(t,"_9",function(){return E.a});var N=n(43);n.d(t,"_10",function(){return N.a});var I=n(24);n.d(t,"_11",function(){return I.a});var j=n(95);n.d(t,"_12",function(){return j.a}),n.d(t,"_13",function(){return j.b}),n.d(t,"_14",function(){return j.c}),n.d(t,"_15",function(){return j.d}),n.d(t,"_16",function(){return j.e});var D=n(44);n.d(t,"_17",function(){return D.a});var M=n(25);n.d(t,"_18",function(){return M.a});var A=n(31);n.d(t,"_19",function(){return A.a});var L=n(3);n.d(t,"_20",function(){return L.a}),n.d(t,"_21",function(){return L.b});var z=n(22);n.d(t,"_22",function(){return z.b}),n.d(t,"_23",function(){return z.a}),n.d(t,"a",function(){return Q});var Q;Q="0.12.8"},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(44)),a=n(14);n.d(t,"a",function(){return u});var s=n(82),u=function(e){function t(t){var n=e.call(this,t)||this;n.koExpanded=i.observable(!1),n.koExpandedCss=i.observable(n.getButtonCss());var r=n;return n.doExpand=function(){r.changeExpanded()},n.survey.onComplete.add(function(e){r.onComplete(),r.koExpandedCss(r.getButtonCss())}),n}return r.b(t,e),t.prototype.createSurvey=function(e){return new a.a(e)},t.prototype.expandcollapse=function(t){e.prototype.expandcollapse.call(this,t),this.koExpanded(this.isExpandedValue)},Object.defineProperty(t.prototype,"template",{get:function(){return this.templateValue?this.templateValue:this.getDefaultTemplate()},set:function(e){this.templateValue=e},enumerable:!0,configurable:!0}),t.prototype.show=function(){this.windowElement.innerHTML=this.template,i.cleanNode(this.windowElement),i.applyBindings(this,this.windowElement),document.body.appendChild(this.windowElement),this.survey.render(t.surveyElementName),this.isShowingValue=!0},t.prototype.getDefaultTemplate=function(){return s},t.prototype.hide=function(){document.body.removeChild(this.windowElement),this.windowElement.innerHTML="",this.isShowingValue=!1},Object.defineProperty(t.prototype,"css",{get:function(){return this.survey.css},enumerable:!0,configurable:!0}),t.prototype.changeExpanded=function(){this.expandcollapse(!this.isExpanded)},t.prototype.onComplete=function(){this.hide()},t.prototype.getButtonCss=function(){return this.koExpanded()?this.css.window.header.buttonCollapsed:this.css.window.header.buttonExpanded},t}(o.a)},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(11)),a=n(1),s=n(2),u=n(32);n.d(t,"a",function(){return c});var l=function(e){function t(t){return e.call(this,t)||this}return r.b(t,e),t.prototype.createkoValue=function(){return this.question.value?i.observableArray(this.question.value):i.observableArray()},t.prototype.setkoValue=function(e){e?this.koValue([].concat(e)):this.koValue([])},t}(o.b),c=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new l(n),n}return r.b(t,e),t}(u.a);a.a.metaData.overrideClassCreatore("checkbox",function(){return new c("")}),s.a.Instance.registerQuestion("checkbox",function(e){var t=new c(e);return t.choices=s.a.DefaultChoices,t})},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(2),a=n(33),s=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new s.a(n),n}return r.b(t,e),t}(a.a);i.a.metaData.overrideClassCreatore("comment",function(){return new u("")}),o.a.Instance.registerQuestion("comment",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(34),o=n(1),a=n(2),s=n(11);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new s.a(n),n}return r.b(t,e),t}(i.a);o.a.metaData.overrideClassCreatore("dropdown",function(){return new u("")}),a.a.Instance.registerQuestion("dropdown",function(e){var t=new u(e);return t.choices=a.a.DefaultChoices,t})},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(1)),a=n(2),s=n(35),u=n(7);n.d(t,"a",function(){return c});var l=function(e){function t(t){var n=e.call(this,t)||this,r=n;return n.koDataUpdater=i.observable(0),n.koData=i.computed(function(){return r.koDataUpdater(),r.question.previewValue}),n.koHasValue=i.observable(!1),n.question.koData=n.koData,n.question.koHasValue=n.koHasValue,n.question.previewValueLoadedCallback=function(){r.onLoadPreview()},n.question.dochange=function(e,t){var n=t.target||t.srcElement;r.onChange(n)},n}return r.b(t,e),t.prototype.onChange=function(e){window.FileReader&&(!e||!e.files||e.files.length<1||this.question.loadFile(e.files[0]))},t.prototype.onLoadPreview=function(){this.koDataUpdater(this.koDataUpdater()+1),this.koHasValue(!0)},t}(u.a),c=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new l(n),n}return r.b(t,e),t}(s.a);o.a.metaData.overrideClassCreatore("file",function(){return new c("")}),a.a.Instance.registerQuestion("file",function(e){return new c(e)})},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(2),a=n(17),s=n(36);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new a.a(n),n}return r.b(t,e),t}(s.a);i.a.metaData.overrideClassCreatore("html",function(){return new u("")}),o.a.Instance.registerQuestion("html",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(37)),a=n(7),s=n(1),u=n(2);n.d(t,"a",function(){return l}),n.d(t,"b",function(){return c});var l=function(e){function t(t,n,r,o,a){var s=e.call(this,t,n,r,o,a)||this;s.name=t,s.text=n,s.fullName=r,s.isValueUpdating=!1,s.koValue=i.observable(s.value);var u=s;return s.koValue.subscribe(function(e){u.isValueUpdating,u.value=e}),s}return r.b(t,e),t.prototype.onValueChanged=function(){this.isValueUpdating=!0,this.koValue(this.value),this.isValueUpdating=!1},t}(o.a),c=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new a.a(n),n}return r.b(t,e),t.prototype.createMatrixRow=function(e,t,n,r){return new l(e,t,n,this,r)},t}(o.b);s.a.metaData.overrideClassCreatore("matrix",function(){return new c("")}),u.a.Instance.registerQuestion("matrix",function(e){var t=new c(e);return t.rows=u.a.DefaultRows,t.columns=u.a.DefaultColums,t})},function(e,t,n){"use strict";var r=n(0),i=n(38),o=n(13),a=n(1),s=n(2),u=n(7);n.d(t,"a",function(){return l});var l=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new u.a(n),n}return r.b(t,e),t}(i.a);a.a.metaData.overrideClassCreatore("matrixdropdown",function(){return new l("")}),s.a.Instance.registerQuestion("matrixdropdown",function(e){var t=new l(e);return t.choices=[1,2,3,4,5],t.rows=s.a.DefaultRows,o.a.addDefaultColumns(t),t})},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(1)),a=n(2),s=n(7),u=n(39),l=n(13);n.d(t,"a",function(){return c}),n.d(t,"b",function(){return h});var c=function(e){function t(t){var n=e.call(this,t)||this;n.koRecalc=i.observable(0),n.koRows=i.pureComputed(function(){return this.koRecalc(),this.question.visibleRows},n),n.koOverflowX=i.pureComputed(function(){return this.question.horizontalScroll?"scroll":"none"},n),n.question.koRows=n.koRows;var r=n;return n.koAddRowClick=function(){r.addRow()},n.koRemoveRowClick=function(e){r.removeRow(e)},n.question.koAddRowClick=n.koAddRowClick,n.question.koRemoveRowClick=n.koRemoveRowClick,n.question.koOverflowX=n.koOverflowX,n.question.rowCountChangedCallback=function(){r.onRowCountChanged()},n.question.columnsChangedCallback=function(){r.onColumnChanged()},n.question.updateCellsCallbak=function(){r.onUpdateCells()},n}return r.b(t,e),t.prototype.onUpdateCells=function(){var e=this.question.generatedVisibleRows,t=this.question.columns;e&&e.length>0&&t&&t.length>0&&this.onColumnChanged()},t.prototype.onColumnChanged=function(){this.question.visibleRows;this.onRowCountChanged()},t.prototype.onRowCountChanged=function(){this.koRecalc(this.koRecalc()+1)},t.prototype.addRow=function(){this.question.addRow()},t.prototype.removeRow=function(e){var t=this.question.cachedVisibleRows,n=t.indexOf(e);n>-1&&this.question.removeRow(n)},t}(s.a),h=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new c(n),n}return r.b(t,e),t}(u.a);o.a.metaData.overrideClassCreatore("matrixdynamic",function(){return new h("")}),a.a.Instance.registerQuestion("matrixdynamic",function(e){var t=new h(e);return t.choices=[1,2,3,4,5],t.rowCount=2,l.a.addDefaultColumns(t),t})},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(40)),a=n(7),s=n(1),u=n(2);n.d(t,"a",function(){return l}),n.d(t,"b",function(){return c}),n.d(t,"c",function(){return h});var l=function(e){function t(t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=e.call(this,t,n)||this;r.name=t,r.isKOValueUpdating=!1,r.koValue=i.observable(r.value);var o=r;return r.koValue.subscribe(function(e){o.isKOValueUpdating||(o.value=e)}),r}return r.b(t,e),t.prototype.onValueChanged=function(e){this.isKOValueUpdating=!0,this.koValue(e),this.isKOValueUpdating=!1},t}(o.a),c=function(e){function t(t){var n=e.call(this,t)||this;n.koRows=i.observableArray(n.question.getRows()),n.question.koRows=n.koRows,n.onColCountChanged();var r=n;return n.question.colCountChangedCallback=function(){r.onColCountChanged()},n}return r.b(t,e),t.prototype.onColCountChanged=function(){this.koRows(this.question.getRows())},t}(a.a),h=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new c(n),n}return r.b(t,e),t.prototype.createTextItem=function(e,t){return new l(e,t)},t}(o.b);s.a.metaData.overrideClassCreatore("multipletextitem",function(){return new l("")}),s.a.metaData.overrideClassCreatore("multipletext",function(){return new h("")}),u.a.Instance.registerQuestion("multipletext",function(e){var t=new h(e);return t.addItem("text1"),t.addItem("text2"),t})},function(e,t,n){"use strict";var r=n(0),i=n(41),o=n(1),a=n(2),s=n(11);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new s.b(n),n}return r.b(t,e),t}(i.a);o.a.metaData.overrideClassCreatore("radiogroup",function(){return new u("")}),a.a.Instance.registerQuestion("radiogroup",function(e){var t=new u(e);return t.choices=a.a.DefaultChoices,t})},function(e,t,n){"use strict";var r=n(0),i=n(6),o=(n.n(i),n(7)),a=n(42),s=n(1),u=n(2);n.d(t,"a",function(){return c});var l=function(e){function t(t){var n=e.call(this,t)||this;n.koVisibleRateValues=i.observableArray(n.getValues()),n.question.koVisibleRateValues=n.koVisibleRateValues;var r=n;return n.koChange=function(e){r.koValue(e.itemValue)},n.question.koChange=n.koChange,n.question.rateValuesChangedCallback=function(){r.onRateValuesChanged()},n.question.koGetCss=function(e){var t=r.question.itemCss;return r.question.koValue()==e.value?t+" active":t},n}return r.b(t,e),t.prototype.onRateValuesChanged=function(){this.koVisibleRateValues(this.getValues())},t.prototype.getValues=function(){return this.question.visibleRateValues},t}(o.a),c=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new l(n),n}return r.b(t,e),t.prototype.onSetData=function(){this.itemCss=this.data.css.rating.item},t}(a.a);s.a.metaData.overrideClassCreatore("rating",function(){return new c("")}),u.a.Instance.registerQuestion("rating",function(e){return new c(e)})},function(e,t,n){"use strict";var r=n(0),i=n(43),o=n(1),a=n(2),s=n(7);n.d(t,"a",function(){return l});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.question=t,n}return r.b(t,e),t.prototype.updateValue=function(t){e.prototype.updateValue.call(this,t),t!==this.question.value&&this.koValue(this.question.value)},t}(s.a),l=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,new u(n),n}return r.b(t,e),t}(i.a);o.a.metaData.overrideClassCreatore("text",function(){return new l("")}),a.a.Instance.registerQuestion("text",function(e){return new l(e)})},function(e,t){e.exports=''},function(e,t){e.exports='\r\n\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports='\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports=""},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports="\r\n"},function(e,t,n){e.exports=n(62)+"\n"+n(61)+"\n"+n(63)+"\n"+n(64)+"\n"+n(80)+"\n"+n(65)+"\n"+n(79)+"\n"+n(66)+"\n"+n(67)+"\n"+n(68)+"\n"+n(69)+"\n"+n(70)+"\n"+n(71)+"\n"+n(72)+"\n"+n(73)+"\n"+n(74)+"\n"+n(75)+"\n"+n(76)+"\n"+n(77)+"\n"+n(78)},function(e,t){e.exports='
\n
\n \n \n \n \n
\n
\n
\n
\n
'},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Předchozí",pageNextText:"Další",completeText:"Hotovo",otherItemText:"Jiná odpověď (napište)",progressText:"Strana {0} z {1}",emptySurvey:"Průzkumu neobsahuje žádné otázky.",completingSurvey:"Děkujeme za vyplnění průzkumu!",loadingSurvey:"Probíhá načítání průzkumu...",optionsCaption:"Vyber...",requiredError:"Odpovězte prosím na otázku.",requiredInAllRowsError:"Odpovězte prosím na všechny otázky.",numericError:"V tomto poli lze zadat pouze čísla.",textMinLength:"Zadejte prosím alespoň {0} znaků.",textMaxLength:"Zadejte prosím méně než {0} znaků.",textMinMaxLength:"Zadejte prosím více než {0} a méně než {1} znaků.",minRowCountError:"Vyplňte prosím alespoň {0} řádků.",minSelectError:"Vyberte prosím alespoň {0} varianty.",maxSelectError:"Nevybírejte prosím více než {0} variant.",numericMinMax:"Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}",numericMin:"Odpověď '{0}' by mělo být větší nebo rovno {1}",numericMax:"Odpověď '{0}' by mělo být menší nebo rovno {1}",invalidEmail:"Zadejte prosím platnou e-mailovou adresu.",urlRequestError:"Požadavek vrátil chybu '{0}'. {1}",urlGetChoicesError:"Požadavek nevrátil data nebo cesta je neplatná",exceedMaxSize:"Velikost souboru by neměla být větší než {0}.",otherRequiredError:"Zadejte prosím jinou hodnotu.",uploadingFile:"Váš soubor se nahrává. Zkuste to prosím za několik sekund.",addRow:"Přidat řádek",removeRow:"Odstranit"};r.a.locales.cz=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Tilbage",pageNextText:"Videre",completeText:"Færdig",progressText:"Side {0} af {1}",emptySurvey:"Der er ingen synlige spørgsmål.",completingSurvey:"Mange tak for din besvarelse!",loadingSurvey:"Spørgeskemaet hentes fra serveren...",otherItemText:"Valgfrit svar...",optionsCaption:"Vælg...",requiredError:"Besvar venligst spørgsmålet.",numericError:"Angiv et tal.",textMinLength:"Angiv mindst {0} tegn.",minSelectError:"Vælg venligst mindst {0} svarmulighed(er).",maxSelectError:"Vælg venligst færre {0} svarmuligheder(er).",numericMinMax:"'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}",numericMin:"'{0}' skal være lig med eller større end {1}",numericMax:"'{0}' skal være lig med eller mindre end {1}",invalidEmail:"Angiv venligst en gyldig e-mail adresse.",exceedMaxSize:"Filstørrelsen må ikke overstige {0}.",otherRequiredError:"Angiv en værdi for dit valgfrie svar."};r.a.locales.da=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Vorige",pageNextText:"Volgende",completeText:"Afsluiten",otherItemText:"Andere",progressText:"Pagina {0} van {1}",emptySurvey:"Er is geen zichtbare pagina of vraag in deze vragenlijst",completingSurvey:"Bedankt om deze vragenlijst in te vullen",loadingSurvey:"De vragenlijst is aan het laden...",optionsCaption:"Kies...",requiredError:"Gelieve een antwoord in te vullen",numericError:"Het antwoord moet een getal zijn",textMinLength:"Gelieve minsten {0} karakters in te vullen.",minSelectError:"Gelieve minimum {0} antwoorden te selecteren.",maxSelectError:"Gelieve niet meer dan {0} antwoorden te selecteren.",numericMinMax:"Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}",numericMin:"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}",numericMax:"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}",invalidEmail:"Gelieve een geldig e-mailadres in te vullen.",exceedMaxSize:"De grootte van het bestand mag niet groter zijn dan {0}.",otherRequiredError:"Gelieve het veld 'Andere' in te vullen"};r.a.locales.nl=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Edellinen",pageNextText:"Seuraava",completeText:"Valmis",otherItemText:"Muu (kuvaile)",progressText:"Sivu {0}/{1}",emptySurvey:"Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.",completingSurvey:"Kiitos kyselyyn vastaamisesta!",loadingSurvey:"Kyselyä ladataan palvelimelta...",optionsCaption:"Valitse...",requiredError:"Vastaa kysymykseen, kiitos.",numericError:"Arvon tulee olla numeerinen.",textMinLength:"Ole hyvä ja syötä vähintään {0} merkkiä.",minSelectError:"Ole hyvä ja valitse vähintään {0} vaihtoehtoa.",maxSelectError:"Ole hyvä ja valitse enintään {0} vaihtoehtoa.",numericMinMax:"'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}",numericMin:"'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}",numericMax:"'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}",invalidEmail:"Syötä validi sähköpostiosoite.",otherRequiredError:'Ole hyvä ja syötä "Muu (kuvaile)"'};r.a.locales.fi=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Précédent",pageNextText:"Suivant",completeText:"Terminer",otherItemText:"Autre (préciser)",progressText:"Page {0} sur {1}",emptySurvey:"Il n'y a ni page visible ni question visible dans ce questionnaire",completingSurvey:"Merci d'avoir répondu au questionnaire!",loadingSurvey:"Le questionnaire est en cours de chargement...",optionsCaption:"Choisissez...",requiredError:"La réponse à cette question est obligatoire.",requiredInAllRowsError:"Toutes les lignes sont obligatoires",numericError:"La réponse doit être un nombre.",textMinLength:"Merci d'entrer au moins {0} symboles.",minSelectError:"Merci de sélectionner au moins {0}réponses.",maxSelectError:"Merci de sélectionner au plus {0}réponses.",numericMinMax:"Votre réponse '{0}' doit êtresupérieure ou égale à {1} et inférieure ouégale à {2}",numericMin:"Votre réponse '{0}' doit êtresupérieure ou égale à {1}",numericMax:"Votre réponse '{0}' doit êtreinférieure ou égale à {1}",invalidEmail:"Merci d'entrer une adresse mail valide.",exceedMaxSize:"La taille du fichier ne doit pas excéder {0}.",otherRequiredError:"Merci de préciser le champ 'Autre'."};r.a.locales.fr=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Zurück",pageNextText:"Weiter",completeText:"Fertig",progressText:"Seite {0} von {1}",emptySurvey:"Es gibt keine sichtbare Frage.",completingSurvey:"Vielen Dank für das Ausfüllen des Fragebogens!",loadingSurvey:"Der Fragebogen wird vom Server geladen...",otherItemText:"Benutzerdefinierte Antwort...",optionsCaption:"Wählen...",requiredError:"Bitte antworten Sie auf die Frage.",numericError:"Der Wert sollte eine Zahl sein.",textMinLength:"Bitte geben Sie mindestens {0} Symbole.",minSelectError:"Bitte wählen Sie mindestens {0} Varianten.",maxSelectError:"Bitte wählen Sie nicht mehr als {0} Varianten.",numericMinMax:"'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}",numericMin:"'{0}' sollte gleich oder größer sein als {1}",numericMax:"'{0}' sollte gleich oder kleiner als {1}",invalidEmail:"Bitte geben Sie eine gültige Email-Adresse ein.",exceedMaxSize:"Die Dateigröße soll nicht mehr als {0}.",otherRequiredError:"Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein."};r.a.locales.de=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Προηγούμενο",pageNextText:"Επόμενο",completeText:"Ολοκλήρωση",otherItemText:"Άλλο (παρακαλώ διευκρινίστε)",progressText:"Σελίδα {0} από {1}",emptySurvey:"Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.",completingSurvey:"Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!",loadingSurvey:"Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...",optionsCaption:"Επιλέξτε...",requiredError:"Παρακαλώ απαντήστε στην ερώτηση.",requiredInAllRowsError:"Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.",numericError:"Η τιμή πρέπει να είναι αριθμιτική.",textMinLength:"Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.",minRowCountError:"Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.",minSelectError:"Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.",maxSelectError:"Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.",numericMinMax:"Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}",numericMin:"Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}",numericMax:"Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}",invalidEmail:"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.",urlRequestError:"Η αίτηση επέστρεψε σφάλμα '{0}'. {1}",urlGetChoicesError:"Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη",exceedMaxSize:"Το μέγεθος δεν μπορεί να υπερβένει τα {0}.",otherRequiredError:"Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.",uploadingFile:"Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.",addRow:"Προσθήκη γραμμής",removeRow:"Αφαίρεση"};r.a.locales.gr=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Wstecz",pageNextText:"Dalej",completeText:"Gotowe",otherItemText:"Inna odpowiedź (wpisz)",progressText:"Strona {0} z {1}",emptySurvey:"Nie ma widocznych pytań.",completingSurvey:"Dziękujemy za wypełnienie ankiety!",loadingSurvey:"Trwa wczytywanie ankiety...",optionsCaption:"Wybierz...",requiredError:"Proszę odpowiedzieć na to pytanie.",requiredInAllRowsError:"Proszę odpowiedzieć na wszystkie pytania.",numericError:"W tym polu można wpisać tylko liczby.",textMinLength:"Proszę wpisać co najmniej {0} znaków.",textMaxLength:"Proszę wpisać mniej niż {0} znaków.",textMinMaxLength:"Proszę wpisać więcej niż {0} i mniej niż {1} znaków.",minRowCountError:"Proszę uzupełnić przynajmniej {0} wierszy.",minSelectError:"Proszę wybrać co najmniej {0} pozycji.",maxSelectError:"Proszę wybrać nie więcej niż {0} pozycji.",numericMinMax:"Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}",numericMin:"Odpowiedź '{0}' powinna być większa lub równa {1}",numericMax:"Odpowiedź '{0}' powinna być mniejsza lub równa {1}",invalidEmail:"Proszę podać prawidłowy adres email.",urlRequestError:"Żądanie zwróciło błąd '{0}'. {1}",urlGetChoicesError:"Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa",exceedMaxSize:"Rozmiar przesłanego pliku nie może przekraczać {0}.",otherRequiredError:"Proszę podać inną odpowiedź.",uploadingFile:"Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.",addRow:"Dodaj wiersz",removeRow:"Usuń"};r.a.locales.pl=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Precedent",pageNextText:"Următor",completeText:"Finalizare",otherItemText:"Altul(precizaţi)",progressText:"Pagina {0} din {1}",emptySurvey:"Nu sunt întrebări pentru acest chestionar",completingSurvey:"Vă mulţumim pentru timpul acordat!",loadingSurvey:"Chestionarul se încarcă...",optionsCaption:"Alegeţi...",requiredError:"Răspunsul la această întrebare este obligatoriu.",requiredInAllRowsError:"Toate răspunsurile sunt obligatorii",numericError:"Răspunsul trebuie să fie numeric.",textMinLength:"Trebuie să introduci minim {0} caractere.",minSelectError:"Trebuie să selectezi minim {0} opţiuni.",maxSelectError:"Trebuie să selectezi maxim {0} opţiuni.",numericMinMax:"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}",numericMin:"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}",numericMax:"Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}",invalidEmail:"Trebuie să introduceţi o adresa de email validă.",exceedMaxSize:"Dimensiunea fişierului nu trebuie să depăşească {0}.",otherRequiredError:"Trebuie să completezi câmpul 'Altul'."};r.a.locales.ro=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Назад",pageNextText:"Далее",completeText:"Готово",progressText:"Страница {0} из {1}",emptySurvey:"Нет ни одного вопроса.",completingSurvey:"Благодарим Вас за заполнение анкеты!",loadingSurvey:"Загрузка с сервера...",otherItemText:"Другое (пожалуйста, опишите)",optionsCaption:"Выбрать...",requiredError:"Пожалуйста, ответьте на вопрос.",numericError:"Ответ должен быть числом.",textMinLength:"Пожалуйста, введите хотя бы {0} символов.",minSelectError:"Пожалуйста, выберите хотя бы {0} вариантов.",maxSelectError:"Пожалуйста, выберите не более {0} вариантов.",numericMinMax:"'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}",numericMin:"'{0}' должно быть равным или больше, чем {1}",numericMax:"'{0}' должно быть равным или меньше, чем {1}",invalidEmail:"Пожалуйста, введите действительный адрес электронной почты.",otherRequiredError:'Пожалуйста, введите данные в поле "Другое"'};r.a.locales.ru=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Föregående",pageNextText:"Nästa",completeText:"Färdig",otherItemText:"Annat (beskriv)",progressText:"Sida {0} av {1}",emptySurvey:"Det finns ingen synlig sida eller fråga i enkäten.",completingSurvey:"Tack för att du genomfört enkäten!!",loadingSurvey:"Enkäten laddas...",optionsCaption:"Välj...",requiredError:"Var vänlig besvara frågan.",requiredInAllRowsError:"Var vänlig besvara frågorna på alla rader.",numericError:"Värdet ska vara numeriskt.",textMinLength:"Var vänlig ange minst {0} tecken.",minRowCountError:"Var vänlig fyll i minst {0} rader.",minSelectError:"Var vänlig välj åtminstone {0} varianter.",maxSelectError:"Var vänlig välj inte fler än {0} varianter.",numericMinMax:"'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}",numericMin:"'{0}' ska vara lika med eller mer än {1}",numericMax:"'{0}' ska vara lika med eller mindre än {1}",invalidEmail:"Var vänlig ange en korrekt e-postadress.",urlRequestError:"Förfrågan returnerade felet '{0}'. {1}",urlGetChoicesError:"Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt",exceedMaxSize:"Filstorleken får ej överstiga {0}.",otherRequiredError:"Var vänlig ange det andra värdet.",uploadingFile:"Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.",addRow:"Lägg till rad",removeRow:"Ta bort"};r.a.locales.sv=i},function(e,t,n){"use strict";var r=n(3),i={pagePrevText:"Geri",pageNextText:"İleri",completeText:"Anketi Tamamla",otherItemText:"Diğer (açıklayınız)",progressText:"Sayfa {0} / {1}",emptySurvey:"Ankette görüntülenecek sayfa ya da soru mevcut değil.",completingSurvey:"Anketimizi tamamladığınız için teşekkür ederiz.",loadingSurvey:"Anket sunucudan yükleniyor ...",optionsCaption:"Seçiniz ...",requiredError:"Lütfen soruya cevap veriniz",numericError:"Girilen değer numerik olmalıdır",textMinLength:"En az {0} sembol giriniz.",minRowCountError:"Lütfen en az {0} satırı doldurun.",minSelectError:"Lütfen en az {0} seçeneği seçiniz.",maxSelectError:"Lütfen {0} adetten fazla seçmeyiniz.",numericMinMax:"The '{0}' should be equal or more than {1} and equal or less than {2}",numericMin:"'{0}' değeri {1} değerine eşit veya büyük olmalıdır",numericMax:"'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.",invalidEmail:"Lütfen geçerli bir eposta adresi giriniz.",urlRequestError:"Talebi şu hatayı döndü '{0}'. {1}",urlGetChoicesError:"Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.",exceedMaxSize:"Dosya boyutu {0} değerini geçemez.",otherRequiredError:"Lütfen diğer değerleri giriniz.",uploadingFile:"Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.",addRow:"Satır Ekle",removeRow:"Kaldır"};r.a.locales.tr=i},function(e,t,n){"use strict";var r=n(0),i=n(4),o=n(1);n.d(t,"e",function(){return a}),n.d(t,"a",function(){return s}),n.d(t,"d",function(){return u}),n.d(t,"b",function(){return l}),n.d(t,"c",function(){return c});var a=function(e){function t(){var t=e.call(this)||this;return t.opValue="equal",t}return r.b(t,e),Object.defineProperty(t,"operators",{get:function(){return null!=t.operatorsValue?t.operatorsValue:(t.operatorsValue={empty:function(e,t){return!e},notempty:function(e,t){return!!e},equal:function(e,t){return e==t},notequal:function(e,t){return e!=t},contains:function(e,t){return e&&e.indexOf&&e.indexOf(t)>-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},t.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"operator",{get:function(){return this.opValue},set:function(e){e&&(e=e.toLowerCase(),t.operators[e]&&(this.opValue=e))},enumerable:!0,configurable:!0}),t.prototype.check=function(e){t.operators[this.operator](e,this.value)?this.onSuccess():this.onFailure()},t.prototype.onSuccess=function(){},t.prototype.onFailure=function(){},t}(i.a);a.operatorsValue=null;var s=function(e){function t(){var t=e.call(this)||this;return t.owner=null,t}return r.b(t,e),t.prototype.setOwner=function(e){this.owner=e},Object.defineProperty(t.prototype,"isOnNextPage",{get:function(){return!1},enumerable:!0,configurable:!0}),t}(a),u=function(e){function t(){var t=e.call(this)||this;return t.pages=[],t.questions=[],t}return r.b(t,e),t.prototype.getType=function(){return"visibletrigger"},t.prototype.onSuccess=function(){this.onTrigger(this.onItemSuccess)},t.prototype.onFailure=function(){this.onTrigger(this.onItemFailure)},t.prototype.onTrigger=function(e){if(this.owner)for(var t=this.owner.getObjects(this.pages,this.questions),n=0;n= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyLocalization; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyStrings; }); +var surveyLocalization = { + currentLocale: "", + locales: {}, + getString: function (strName) { + var loc = this.currentLocale ? this.locales[this.currentLocale] : surveyStrings; + if (!loc || !loc[strName]) + loc = surveyStrings; + return loc[strName]; + }, + getLocales: function () { + var res = []; + res.push(""); + for (var key in this.locales) { + res.push(key); + } + res.sort(); + return res; + } +}; +var surveyStrings = { + pagePrevText: "Previous", + pageNextText: "Next", + completeText: "Complete", + otherItemText: "Other (describe)", + progressText: "Page {0} of {1}", + emptySurvey: "There is no visible page or question in the survey.", + completingSurvey: "Thank you for completing the survey!", + loadingSurvey: "Survey is loading...", + optionsCaption: "Choose...", + requiredError: "Please answer the question.", + requiredInAllRowsError: "Please answer questions in all rows.", + numericError: "The value should be numeric.", + textMinLength: "Please enter at least {0} symbols.", + textMaxLength: "Please enter less than {0} symbols.", + textMinMaxLength: "Please enter more than {0} and less than {1} symbols.", + minRowCountError: "Please fill in at least {0} rows.", + minSelectError: "Please select at least {0} variants.", + maxSelectError: "Please select no more than {0} variants.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "The '{0}' should be equal or more than {1}", + numericMax: "The '{0}' should be equal or less than {1}", + invalidEmail: "Please enter a valid e-mail address.", + urlRequestError: "The request returned error '{0}'. {1}", + urlGetChoicesError: "The request returned empty data or the 'path' property is incorrect", + exceedMaxSize: "The file size should not exceed {0}.", + otherRequiredError: "Please enter the other value.", + uploadingFile: "Your file is uploading. Please wait several seconds and try again.", + addRow: "Add row", + removeRow: "Remove", + choices_firstItem: "first item", + choices_secondItem: "second item", + choices_thirdItem: "third item", + matrix_column: "Column", + matrix_row: "Row" +}; +surveyLocalization.locales["en"] = surveyStrings; +if (!String.prototype["format"]) { + String.prototype["format"] = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match; + }); + }; +} + + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return JsonObjectProperty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return JsonMetadataClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return JsonMetadata; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return JsonError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return JsonUnknownPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return JsonMissingTypeErrorBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return JsonMissingTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return JsonIncorrectTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return JsonRequiredPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return JsonObject; }); + +var JsonObjectProperty = (function () { + function JsonObjectProperty(name) { + this.name = name; + this.typeValue = null; + this.choicesValue = null; + this.choicesfunc = null; + this.className = null; + this.alternativeName = null; + this.classNamePart = null; + this.baseClassName = null; + this.defaultValue = null; + this.readOnly = false; + this.visible = true; + this.isLocalizable = false; + this.serializationProperty = null; + this.onGetValue = null; + } + Object.defineProperty(JsonObjectProperty.prototype, "type", { + get: function () { return this.typeValue ? this.typeValue : "string"; }, + set: function (value) { this.typeValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseGetValue", { + get: function () { return this.onGetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.isDefaultValue = function (value) { + return (this.defaultValue) ? (this.defaultValue == value) : !(value); + }; + JsonObjectProperty.prototype.getValue = function (obj) { + if (this.onGetValue) + return this.onGetValue(obj); + if (this.serializationProperty) + return obj[this.serializationProperty].getJson(); + return obj[this.name]; + }; + JsonObjectProperty.prototype.getPropertyValue = function (obj) { + if (this.isLocalizable) + return obj[this.serializationProperty].text; + return this.getValue(obj); + }; + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseSetValue", { + get: function () { return this.onSetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) { + if (this.onSetValue) { + this.onSetValue(obj, value, jsonConv); + } + else { + if (this.serializationProperty) + obj[this.serializationProperty].setJson(value); + else + obj[this.name] = value; + } + }; + JsonObjectProperty.prototype.getObjType = function (objType) { + if (!this.classNamePart) + return objType; + return objType.replace(this.classNamePart, ""); + }; + JsonObjectProperty.prototype.getClassName = function (className) { + return (this.classNamePart && className.indexOf(this.classNamePart) < 0) ? className + this.classNamePart : className; + }; + Object.defineProperty(JsonObjectProperty.prototype, "choices", { + get: function () { + if (this.choicesValue != null) + return this.choicesValue; + if (this.choicesfunc != null) + return this.choicesfunc(); + return null; + }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setChoices = function (value, valueFunc) { + this.choicesValue = value; + this.choicesfunc = valueFunc; + }; + return JsonObjectProperty; +}()); + +var JsonMetadataClass = (function () { + function JsonMetadataClass(name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + this.name = name; + this.creator = creator; + this.parentName = parentName; + this.properties = null; + this.requiredProperties = null; + this.properties = new Array(); + for (var i = 0; i < properties.length; i++) { + var prop = this.createProperty(properties[i]); + if (prop) { + this.properties.push(prop); + } + } + } + JsonMetadataClass.prototype.find = function (name) { + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == name) + return this.properties[i]; + } + return null; + }; + JsonMetadataClass.prototype.createProperty = function (propInfo) { + var propertyName = typeof propInfo === "string" ? propInfo : propInfo.name; + if (!propertyName) + return; + var propertyType = null; + var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol); + if (typeIndex > -1) { + propertyType = propertyName.substring(typeIndex + 1); + propertyName = propertyName.substring(0, typeIndex); + } + propertyName = this.getPropertyName(propertyName); + var prop = new JsonObjectProperty(propertyName); + if (propertyType) { + prop.type = propertyType; + } + if (typeof propInfo === "object") { + if (propInfo.type) { + prop.type = propInfo.type; + } + if (propInfo.default) { + prop.defaultValue = propInfo.default; + } + if (propInfo.visible === false) { + prop.visible = false; + } + if (propInfo.isRequired) { + this.makePropertyRequired(prop.name); + } + if (propInfo.choices) { + var choicesFunc = typeof propInfo.choices === "function" ? propInfo.choices : null; + var choicesValue = typeof propInfo.choices !== "function" ? propInfo.choices : null; + prop.setChoices(choicesValue, choicesFunc); + } + if (propInfo.onGetValue) { + prop.onGetValue = propInfo.onGetValue; + } + if (propInfo.onSetValue) { + prop.onSetValue = propInfo.onSetValue; + } + if (propInfo.serializationProperty) { + prop.serializationProperty = propInfo.serializationProperty; + var s; + if (prop.serializationProperty && prop.serializationProperty.indexOf("loc") == 0) { + prop.isLocalizable = true; + } + } + if (propInfo.isLocalizable) { + prop.isLocalizable = propInfo.isLocalizable; + } + if (propInfo.className) { + prop.className = propInfo.className; + } + if (propInfo.baseClassName) { + prop.baseClassName = propInfo.baseClassName; + } + if (propInfo.classNamePart) { + prop.classNamePart = propInfo.classNamePart; + } + if (propInfo.alternativeName) { + prop.alternativeName = propInfo.alternativeName; + } + } + return prop; + }; + JsonMetadataClass.prototype.getPropertyName = function (propertyName) { + if (propertyName.length == 0 || propertyName[0] != JsonMetadataClass.requiredSymbol) + return propertyName; + propertyName = propertyName.slice(1); + this.makePropertyRequired(propertyName); + return propertyName; + }; + JsonMetadataClass.prototype.makePropertyRequired = function (propertyName) { + if (!this.requiredProperties) { + this.requiredProperties = new Array(); + } + this.requiredProperties.push(propertyName); + }; + return JsonMetadataClass; +}()); + +JsonMetadataClass.requiredSymbol = '!'; +JsonMetadataClass.typeSymbol = ':'; +var JsonMetadata = (function () { + function JsonMetadata() { + this.classes = {}; + this.childrenClasses = {}; + this.classProperties = {}; + this.classRequiredProperties = {}; + } + JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName); + this.classes[name] = metaDataClass; + if (parentName) { + var children = this.childrenClasses[parentName]; + if (!children) { + this.childrenClasses[parentName] = []; + } + this.childrenClasses[parentName].push(metaDataClass); + } + return metaDataClass; + }; + JsonMetadata.prototype.overrideClassCreatore = function (name, creator) { + var metaDataClass = this.findClass(name); + if (metaDataClass) { + metaDataClass.creator = creator; + } + }; + JsonMetadata.prototype.getProperties = function (className) { + var properties = this.classProperties[className]; + if (!properties) { + properties = new Array(); + this.fillProperties(className, properties); + this.classProperties[className] = properties; + } + return properties; + }; + JsonMetadata.prototype.findProperty = function (className, propertyName) { + var properties = this.getProperties(className); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == propertyName) + return properties[i]; + } + return null; + }; + JsonMetadata.prototype.createClass = function (name) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return null; + return metaDataClass.creator(); + }; + JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) { + if (canBeCreated === void 0) { canBeCreated = false; } + var result = []; + this.fillChildrenClasses(name, canBeCreated, result); + return result; + }; + JsonMetadata.prototype.getRequiredProperties = function (name) { + var properties = this.classRequiredProperties[name]; + if (!properties) { + properties = new Array(); + this.fillRequiredProperties(name, properties); + this.classRequiredProperties[name] = properties; + } + return properties; + }; + JsonMetadata.prototype.addProperty = function (className, propertyInfo) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return; + var property = metaDataClass.createProperty(propertyInfo); + if (property) { + this.addPropertyToClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.removeProperty = function (className, propertyName) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return false; + var property = metaDataClass.find(propertyName); + if (property) { + this.removePropertyFromClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) { + if (metaDataClass.find(property.name) != null) + return; + metaDataClass.properties.push(property); + }; + JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) { + var index = metaDataClass.properties.indexOf(property); + if (index < 0) + return; + metaDataClass.properties.splice(index, 1); + if (metaDataClass.requiredProperties) { + index = metaDataClass.requiredProperties.indexOf(property.name); + if (index >= 0) { + metaDataClass.requiredProperties.splice(index, 1); + } + } + }; + JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) { + this.classProperties[metaDataClass.name] = null; + var childClasses = this.getChildrenClasses(metaDataClass.name); + for (var i = 0; i < childClasses.length; i++) { + this.classProperties[childClasses[i].name] = null; + } + }; + JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) { + var children = this.childrenClasses[name]; + if (!children) + return; + for (var i = 0; i < children.length; i++) { + if (!canBeCreated || children[i].creator) { + result.push(children[i]); + } + this.fillChildrenClasses(children[i].name, canBeCreated, result); + } + }; + JsonMetadata.prototype.findClass = function (name) { + return this.classes[name]; + }; + JsonMetadata.prototype.fillProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.parentName) { + this.fillProperties(metaDataClass.parentName, list); + } + for (var i = 0; i < metaDataClass.properties.length; i++) { + this.addPropertyCore(metaDataClass.properties[i], list, list.length); + } + }; + JsonMetadata.prototype.addPropertyCore = function (property, list, endIndex) { + var index = -1; + for (var i = 0; i < endIndex; i++) { + if (list[i].name == property.name) { + index = i; + break; + } + } + if (index < 0) { + list.push(property); + } + else { + list[index] = property; + } + }; + JsonMetadata.prototype.fillRequiredProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.requiredProperties) { + Array.prototype.push.apply(list, metaDataClass.requiredProperties); + } + if (metaDataClass.parentName) { + this.fillRequiredProperties(metaDataClass.parentName, list); + } + }; + return JsonMetadata; +}()); + +var JsonError = (function () { + function JsonError(type, message) { + this.type = type; + this.message = message; + this.description = ""; + this.at = -1; + } + JsonError.prototype.getFullDescription = function () { + return this.message + (this.description ? "\n" + this.description : ""); + }; + return JsonError; +}()); + +var JsonUnknownPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonUnknownPropertyError, _super); + function JsonUnknownPropertyError(propertyName, className) { + var _this = _super.call(this, "unknownproperty", "The property '" + propertyName + "' in class '" + className + "' is unknown.") || this; + _this.propertyName = propertyName; + _this.className = className; + var properties = JsonObject.metaData.getProperties(className); + if (properties) { + _this.description = "The list of available properties are: "; + for (var i = 0; i < properties.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += properties[i].name; + } + _this.description += '.'; + } + return _this; + } + return JsonUnknownPropertyError; +}(JsonError)); + +var JsonMissingTypeErrorBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeErrorBase, _super); + function JsonMissingTypeErrorBase(baseClassName, type, message) { + var _this = _super.call(this, type, message) || this; + _this.baseClassName = baseClassName; + _this.type = type; + _this.message = message; + _this.description = "The following types are available: "; + var types = JsonObject.metaData.getChildrenClasses(baseClassName, true); + for (var i = 0; i < types.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += "'" + types[i].name + "'"; + } + _this.description += "."; + return _this; + } + return JsonMissingTypeErrorBase; +}(JsonError)); + +var JsonMissingTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeError, _super); + function JsonMissingTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "missingtypeproperty", "The property type is missing in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonMissingTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonIncorrectTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonIncorrectTypeError, _super); + function JsonIncorrectTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "incorrecttypeproperty", "The property type is incorrect in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonIncorrectTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonRequiredPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonRequiredPropertyError, _super); + function JsonRequiredPropertyError(propertyName, className) { + var _this = _super.call(this, "requiredproperty", "The property '" + propertyName + "' is required in class '" + className + "'.") || this; + _this.propertyName = propertyName; + _this.className = className; + return _this; + } + return JsonRequiredPropertyError; +}(JsonError)); + +var JsonObject = (function () { + function JsonObject() { + this.errors = new Array(); + } + Object.defineProperty(JsonObject, "metaData", { + get: function () { return JsonObject.metaDataValue; }, + enumerable: true, + configurable: true + }); + JsonObject.prototype.toJsonObject = function (obj) { + return this.toJsonObjectCore(obj, null); + }; + JsonObject.prototype.toObject = function (jsonObj, obj) { + if (!jsonObj) + return; + var properties = null; + if (obj.getType) { + properties = JsonObject.metaData.getProperties(obj.getType()); + } + if (!properties) + return; + for (var key in jsonObj) { + if (key == JsonObject.typePropertyName) + continue; + if (key == JsonObject.positionPropertyName) { + obj[key] = jsonObj[key]; + continue; + } + var property = this.findProperty(properties, key); + if (!property) { + this.addNewError(new JsonUnknownPropertyError(key.toString(), obj.getType()), jsonObj); + continue; + } + this.valueToObj(jsonObj[key], obj, key, property); + } + }; + JsonObject.prototype.toJsonObjectCore = function (obj, property) { + if (!obj.getType) + return obj; + var result = {}; + if (property != null && (!property.className)) { + result[JsonObject.typePropertyName] = property.getObjType(obj.getType()); + } + var properties = JsonObject.metaData.getProperties(obj.getType()); + for (var i = 0; i < properties.length; i++) { + this.valueToJson(obj, result, properties[i]); + } + return result; + }; + JsonObject.prototype.valueToJson = function (obj, result, property) { + var value = property.getValue(obj); + if (value === undefined || value === null) + return; + if (property.isDefaultValue(value)) + return; + if (this.isValueArray(value)) { + var arrValue = []; + for (var i = 0; i < value.length; i++) { + arrValue.push(this.toJsonObjectCore(value[i], property)); + } + value = arrValue.length > 0 ? arrValue : null; + } + else { + value = this.toJsonObjectCore(value, property); + } + if (!property.isDefaultValue(value)) { + result[property.name] = value; + } + }; + JsonObject.prototype.valueToObj = function (value, obj, key, property) { + if (value == null) + return; + if (property != null && property.hasToUseSetValue) { + property.setValue(obj, value, this); + return; + } + if (this.isValueArray(value)) { + this.valueToArray(value, obj, property.name, property); + return; + } + var newObj = this.createNewObj(value, property); + if (newObj.newObj) { + this.toObject(value, newObj.newObj); + value = newObj.newObj; + } + if (!newObj.error) { + obj[property.name] = value; + } + }; + JsonObject.prototype.isValueArray = function (value) { return value && Array.isArray(value); }; + JsonObject.prototype.createNewObj = function (value, property) { + var result = { newObj: null, error: null }; + var className = value[JsonObject.typePropertyName]; + if (!className && property != null && property.className) { + className = property.className; + } + className = property.getClassName(className); + result.newObj = (className) ? JsonObject.metaData.createClass(className) : null; + result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className); + return result; + }; + JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) { + var error = null; + if (newObj) { + var requiredProperties = JsonObject.metaData.getRequiredProperties(className); + if (requiredProperties) { + for (var i = 0; i < requiredProperties.length; i++) { + if (!value[requiredProperties[i]]) { + error = new JsonRequiredPropertyError(requiredProperties[i], className); + break; + } + } + } + } + else { + if (property.baseClassName) { + if (!className) { + error = new JsonMissingTypeError(property.name, property.baseClassName); + } + else { + error = new JsonIncorrectTypeError(property.name, property.baseClassName); + } + } + } + if (error) { + this.addNewError(error, value); + } + return error; + }; + JsonObject.prototype.addNewError = function (error, jsonObj) { + if (jsonObj && jsonObj[JsonObject.positionPropertyName]) { + error.at = jsonObj[JsonObject.positionPropertyName].start; + } + this.errors.push(error); + }; + JsonObject.prototype.valueToArray = function (value, obj, key, property) { + if (obj[key] && value.length > 0) + obj[key].splice(0, obj[key].length); + for (var i = 0; i < value.length; i++) { + var newValue = this.createNewObj(value[i], property); + if (newValue.newObj) { + obj[key].push(newValue.newObj); + this.toObject(value[i], newValue.newObj); + } + else { + if (!newValue.error) { + obj[key].push(value[i]); + } + } + } + }; + JsonObject.prototype.findProperty = function (properties, key) { + if (!properties) + return null; + for (var i = 0; i < properties.length; i++) { + var prop = properties[i]; + if (prop.name == key || prop.alternativeName == key) + return prop; + } + return null; + }; + return JsonObject; +}()); + +JsonObject.typePropertyName = "type"; +JsonObject.positionPropertyName = "pos"; +JsonObject.metaDataValue = new JsonMetadata(); + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_3__; + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ReactQuestionFactory; }); +var ReactQuestionFactory = (function () { + function ReactQuestionFactory() { + this.creatorHash = {}; + } + ReactQuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + ReactQuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ReactQuestionFactory.prototype.createQuestion = function (questionType, params) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(params); + }; + return ReactQuestionFactory; +}()); + +ReactQuestionFactory.Instance = new ReactQuestionFactory(); + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Base; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyPageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return Event; }); +var Base = (function () { + function Base() { + } + Base.prototype.getType = function () { + throw new Error('This method is abstract'); + }; + Base.prototype.isTwoValueEquals = function (x, y) { + if (x === y) + return true; + if (!(x instanceof Object) || !(y instanceof Object)) + return false; + for (var p in x) { + if (!x.hasOwnProperty(p)) + continue; + if (!y.hasOwnProperty(p)) + return false; + if (x[p] === y[p]) + continue; + if (typeof (x[p]) !== "object") + return false; + if (!this.isTwoValueEquals(x[p], y[p])) + return false; + } + for (p in y) { + if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) + return false; + } + return true; + }; + return Base; +}()); + +var SurveyError = (function () { + function SurveyError() { + } + SurveyError.prototype.getText = function () { + throw new Error('This method is abstract'); + }; + return SurveyError; +}()); + +var SurveyPageId; +SurveyPageId = "sq_page"; +var SurveyElement = (function () { + function SurveyElement() { + } + SurveyElement.ScrollElementToTop = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (!el || !el.scrollIntoView) + return false; + var elemTop = el.getBoundingClientRect().top; + if (elemTop < 0) + el.scrollIntoView(); + return elemTop < 0; + }; + SurveyElement.GetFirstNonTextElement = function (elements) { + if (!elements || !elements.length) + return; + for (var i = 0; i < elements.length; i++) { + if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") + return elements[i]; + } + return null; + }; + SurveyElement.FocusElement = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (el) { + el.focus(); + return true; + } + return false; + }; + return SurveyElement; +}()); + +var Event = (function () { + function Event() { + } + Object.defineProperty(Event.prototype, "isEmpty", { + get: function () { return this.callbacks == null || this.callbacks.length == 0; }, + enumerable: true, + configurable: true + }); + Event.prototype.fire = function (sender, options) { + if (this.callbacks == null) + return; + for (var i = 0; i < this.callbacks.length; i++) { + var callResult = this.callbacks[i](sender, options); + } + }; + Event.prototype.add = function (func) { + if (this.callbacks == null) { + this.callbacks = new Array(); + } + this.callbacks.push(func); + }; + Event.prototype.remove = function (func) { + if (this.callbacks == null) + return; + var index = this.callbacks.indexOf(func, 0); + if (index != undefined) { + this.callbacks.splice(index, 1); + } + }; + return Event; +}()); + + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ElementFactory; }); + +//TODO replace completely with ElementFactory +var QuestionFactory = (function () { + function QuestionFactory() { + this.creatorHash = {}; + } + Object.defineProperty(QuestionFactory, "DefaultChoices", { + get: function () { + return ["1|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_firstItem"), "2|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_secondItem"), "3|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_thirdItem")]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultColums", { + get: function () { + var colName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_column") + " "; + return [colName + "1", colName + "2", colName + "3"]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultRows", { + get: function () { + var rowName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_row") + " "; + return [rowName + "1", rowName + "2"]; + }, + enumerable: true, + configurable: true + }); + QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + QuestionFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + QuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + QuestionFactory.prototype.createQuestion = function (questionType, name) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(name); + }; + return QuestionFactory; +}()); + +QuestionFactory.Instance = new QuestionFactory(); +var ElementFactory = (function () { + function ElementFactory() { + this.creatorHash = {}; + } + ElementFactory.prototype.registerElement = function (elementType, elementCreator) { + this.creatorHash[elementType] = elementCreator; + }; + ElementFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + ElementFactory.prototype.getAllTypes = function () { + var result = QuestionFactory.Instance.getAllTypes(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ElementFactory.prototype.createElement = function (elementType, name) { + var creator = this.creatorHash[elementType]; + if (creator == null) + return QuestionFactory.Instance.createQuestion(elementType, name); + return creator(name); + }; + return ElementFactory; +}()); + +ElementFactory.Instance = new ElementFactory(); + + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LocalizableString; }); +var LocalizableString = (function () { + function LocalizableString(owner) { + this.owner = owner; + this.values = {}; + } + Object.defineProperty(LocalizableString.prototype, "locale", { + get: function () { return this.owner ? this.owner.getLocale() : ""; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LocalizableString.prototype, "text", { + get: function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return ""; + var loc = this.locale; + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + if (!res && loc !== LocalizableString.defaultLocale) { + res = this.values[LocalizableString.defaultLocale]; + } + return res ? res : this.values[keys[0]]; + }, + set: function (value) { + this.setLocaleText(this.locale, value); + }, + enumerable: true, + configurable: true + }); + LocalizableString.prototype.getLocaleText = function (loc) { + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + return res ? res : ""; + }; + LocalizableString.prototype.setLocaleText = function (loc, value) { + if (!loc) + loc = LocalizableString.defaultLocale; + if (!value) { + if (this.values[loc]) + delete this.values[loc]; + } + else { + if (typeof value === 'string') { + if (loc != LocalizableString.defaultLocale && value == this.getLocaleText(LocalizableString.defaultLocale)) { + this.setLocaleText(loc, null); + } + else { + this.values[loc] = value; + if (loc == LocalizableString.defaultLocale) { + this.deleteValuesEqualsToDefault(value); + } + } + } + } + }; + LocalizableString.prototype.getJson = function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return null; + if (keys.length == 1 && keys[0] == LocalizableString.defaultLocale) + return this.values[keys[0]]; + return this.values; + }; + LocalizableString.prototype.setJson = function (value) { + this.values = {}; + if (!value) + return; + if (typeof value === 'string') { + this.setLocaleText(null, value); + } + else { + for (var key in value) { + this.setLocaleText(key, value[key]); + } + } + }; + LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) { + var keys = Object.keys(this.values); + for (var i = 0; i < keys.length; i++) { + if (keys[i] == LocalizableString.defaultLocale) + continue; + if (this.values[keys[i]] == defaultValue) + delete this.values[keys[i]]; + } + }; + return LocalizableString; +}()); + +LocalizableString.defaultLocale = "default"; + + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyElementBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionElementBase; }); + + +var SurveyElementBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyElementBase, _super); + function SurveyElementBase(props) { + var _this = _super.call(this, props) || this; + _this.css = props.css; + _this.rootCss = props.rootCss; + _this.isDisplayMode = props.isDisplayMode || false; + return _this; + } + SurveyElementBase.prototype.componentWillReceiveProps = function (nextProps) { + this.css = nextProps.css; + this.rootCss = nextProps.rootCss; + this.isDisplayMode = nextProps.isDisplayMode || false; + }; + return SurveyElementBase; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyQuestionElementBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionElementBase, _super); + function SurveyQuestionElementBase(props) { + var _this = _super.call(this, props) || this; + _this.questionBase = props.question; + _this.creator = props.creator; + return _this; + } + SurveyQuestionElementBase.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.questionBase = nextProps.question; + this.creator = nextProps.creator; + }; + SurveyQuestionElementBase.prototype.shouldComponentUpdate = function () { + return !this.questionBase.customWidget || !!this.questionBase.customWidget.widgetJson.render; + }; + return SurveyQuestionElementBase; +}(SurveyElementBase)); + + + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AnswerRequiredError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return RequreNumericError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ExceedSizeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return CustomError; }); + + + +var AnswerRequiredError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerRequiredError, _super); + function AnswerRequiredError() { + return _super.call(this) || this; + } + AnswerRequiredError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("requiredError"); + }; + return AnswerRequiredError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + +var RequreNumericError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RequreNumericError, _super); + function RequreNumericError() { + return _super.call(this) || this; + } + RequreNumericError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("numericError"); + }; + return RequreNumericError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + +var ExceedSizeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ExceedSizeError, _super); + function ExceedSizeError(maxSize) { + var _this = _super.call(this) || this; + _this.maxSize = maxSize; + return _this; + } + ExceedSizeError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("exceedMaxSize")["format"](this.getTextSize()); + }; + ExceedSizeError.prototype.getTextSize = function () { + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + var fixed = [0, 0, 2, 3, 3]; + if (this.maxSize == 0) + return '0 Byte'; + var i = Math.floor(Math.log(this.maxSize) / Math.log(1024)); + var value = this.maxSize / Math.pow(1024, i); + return value.toFixed(fixed[i]) + ' ' + sizes[i]; + }; + return ExceedSizeError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + +var CustomError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](CustomError, _super); + function CustomError(text) { + var _this = _super.call(this) || this; + _this.text = text; + return _this; + } + CustomError.prototype.getText = function () { + return this.text; + }; + return CustomError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyError */])); + + + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionbase__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__validator__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Question; }); + + + + + + + + + +var Question = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Question, _super); + function Question(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRequiredValue = false; + _this.hasCommentValue = false; + _this.hasOtherValue = false; + _this.readOnlyValue = false; + _this.errors = []; + _this.validators = new Array(); + _this.isvalueChangedCallbackFiring = false; + _this.isValueChangedInSurvey = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + _this.locCommentTextValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(Question.prototype, "hasTitle", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasInput", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "inputId", { + get: function () { return this.id + "i"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "title", { + get: function () { + var res = this.locTitle.text; + return res ? res : this.name; + }, + set: function (newValue) { + this.locTitle.text = newValue; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locCommentText", { + get: function () { return this.locCommentTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "processedTitle", { + get: function () { return this.survey != null ? this.survey.processText(this.title) : this.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "fullTitle", { + get: function () { + if (this.survey && this.survey.questionTitleTemplate) { + if (!this.textPreProcessor) { + var self = this; + this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__["a" /* TextPreProcessor */](); + this.textPreProcessor.onHasValue = function (name) { return self.canProcessedTextValues(name.toLowerCase()); }; + this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + } + return this.textPreProcessor.process(this.survey.questionTitleTemplate); + } + var requireText = this.requiredText; + if (requireText) + requireText += " "; + var no = this.no; + if (no) + no += ". "; + return no + requireText + this.processedTitle; + }, + enumerable: true, + configurable: true + }); + Question.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + __WEBPACK_IMPORTED_MODULE_3__base__["a" /* SurveyElement */].ScrollElementToTop(this.id); + var id = !onError ? this.getFirstInputElementId() : this.getFirstErrorInputElementId(); + if (__WEBPACK_IMPORTED_MODULE_3__base__["a" /* SurveyElement */].FocusElement(id)) { + this.fireCallback(this.focusCallback); + } + }; + Question.prototype.getFirstInputElementId = function () { + return this.inputId; + }; + Question.prototype.getFirstErrorInputElementId = function () { + return this.getFirstInputElementId(); + }; + Question.prototype.canProcessedTextValues = function (name) { + return name == "no" || name == "title" || name == "require"; + }; + Question.prototype.getProcessedTextValue = function (name) { + if (name == "no") + return this.no; + if (name == "title") + return this.processedTitle; + if (name == "require") + return this.requiredText; + return null; + }; + Question.prototype.supportComment = function () { return false; }; + Question.prototype.supportOther = function () { return false; }; + Object.defineProperty(Question.prototype, "isRequired", { + get: function () { return this.isRequiredValue; }, + set: function (val) { + if (this.isRequired == val) + return; + this.isRequiredValue = val; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasComment", { + get: function () { return this.hasCommentValue; }, + set: function (val) { + if (!this.supportComment()) + return; + this.hasCommentValue = val; + if (this.hasComment) + this.hasOther = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "commentText", { + get: function () { + var res = this.locCommentText.text; + return res ? res : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + }, + set: function (value) { + this.locCommentText.text = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasOther", { + get: function () { return this.hasOtherValue; }, + set: function (val) { + if (!this.supportOther() || this.hasOther == val) + return; + this.hasOtherValue = val; + if (this.hasOther) + this.hasComment = false; + this.hasOtherChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.hasOtherChanged = function () { }; + Object.defineProperty(Question.prototype, "isReadOnly", { + get: function () { return this.readOnly || (this.survey && this.survey.isDisplayMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "readOnly", { + get: function () { return this.readOnlyValue; }, + set: function (value) { + if (this.readOnly == value) + return; + this.readOnlyValue = value; + this.readOnlyChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.readOnlyChanged = function () { + this.fireCallback(this.readOnlyChangedCallback); + }; + Object.defineProperty(Question.prototype, "no", { + get: function () { + if (this.visibleIndex < 0) + return ""; + var startIndex = 1; + var isNumeric = true; + var str = ""; + if (this.survey && this.survey.questionStartIndex) { + str = this.survey.questionStartIndex; + if (parseInt(str)) + startIndex = parseInt(str); + else if (str.length == 1) + isNumeric = false; + } + if (isNumeric) + return (this.visibleIndex + startIndex).toString(); + return String.fromCharCode(str.charCodeAt(0) + this.visibleIndex); + }, + enumerable: true, + configurable: true + }); + Question.prototype.onSetData = function () { + _super.prototype.onSetData.call(this); + this.onSurveyValueChanged(this.value); + }; + Object.defineProperty(Question.prototype, "value", { + get: function () { + return this.valueFromData(this.getValueCore()); + }, + set: function (newValue) { + this.setNewValue(newValue); + if (this.isvalueChangedCallbackFiring) + return; + this.isvalueChangedCallbackFiring = true; + this.fireCallback(this.valueChangedCallback); + this.isvalueChangedCallbackFiring = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "comment", { + get: function () { return this.getComment(); }, + set: function (newValue) { + if (this.comment == newValue) + return; + this.setComment(newValue); + this.fireCallback(this.commentChangedCallback); + }, + enumerable: true, + configurable: true + }); + Question.prototype.getComment = function () { return this.data != null ? this.data.getComment(this.name) : this.questionComment; }; + Question.prototype.setComment = function (newValue) { + this.setNewComment(newValue); + }; + Question.prototype.isEmpty = function () { return this.value == null; }; + Question.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + this.checkForErrors(fireCallback); + return this.errors.length > 0; + }; + Object.defineProperty(Question.prototype, "currentErrorCount", { + get: function () { return this.errors.length; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "requiredText", { + get: function () { return this.survey != null && this.isRequired ? this.survey.requiredText : ""; }, + enumerable: true, + configurable: true + }); + Question.prototype.addError = function (error) { + this.errors.push(error); + this.fireCallback(this.errorsChangedCallback); + }; + Question.prototype.checkForErrors = function (fireCallback) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + this.onCheckForErrors(this.errors); + if (this.errors.length == 0 && this.value) { + var error = this.runValidators(); + if (error) { + this.errors.push(error); + } + } + if (this.survey && this.errors.length == 0) { + var error = this.survey.validateQuestion(this.name); + if (error) { + this.errors.push(error); + } + } + if (fireCallback && (errorLength != this.errors.length || errorLength > 0)) { + this.fireCallback(this.errorsChangedCallback); + } + }; + Question.prototype.onCheckForErrors = function (errors) { + if (this.hasRequiredError()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* AnswerRequiredError */]()); + } + }; + Question.prototype.hasRequiredError = function () { + return this.isRequired && this.isEmpty(); + }; + Question.prototype.runValidators = function () { + return new __WEBPACK_IMPORTED_MODULE_6__validator__["a" /* ValidatorRunner */]().run(this); + }; + Question.prototype.setNewValue = function (newValue) { + this.setNewValueInData(newValue); + this.onValueChanged(); + }; + Question.prototype.setNewValueInData = function (newValue) { + if (!this.isValueChangedInSurvey) { + newValue = this.valueToData(newValue); + this.setValueCore(newValue); + } + }; + Question.prototype.getValueCore = function () { + return this.data != null ? this.data.getValue(this.name) : this.questionValue; + }; + Question.prototype.setValueCore = function (newValue) { + if (this.data != null) { + this.data.setValue(this.name, newValue); + } + else { + this.questionValue = newValue; + } + }; + Question.prototype.valueFromData = function (val) { return val; }; + Question.prototype.valueToData = function (val) { return val; }; + Question.prototype.onValueChanged = function () { }; + Question.prototype.setNewComment = function (newValue) { + if (this.data != null) { + this.data.setComment(this.name, newValue); + } + else + this.questionComment = newValue; + }; + //IQuestion + Question.prototype.onSurveyValueChanged = function (newValue) { + this.isValueChangedInSurvey = true; + this.value = this.valueFromData(newValue); + this.fireCallback(this.commentChangedCallback); + this.isValueChangedInSurvey = false; + }; + //IValidatorOwner + Question.prototype.getValidatorTitle = function () { return null; }; + return Question; +}(__WEBPACK_IMPORTED_MODULE_2__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("question", [{ name: "title:text", serializationProperty: "locTitle" }, + { name: "commentText", serializationProperty: "locCommentText" }, + "isRequired:boolean", "readOnly:boolean", { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], null, "questionbase"); + + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemValue; }); + +var ItemValue = (function () { + function ItemValue(value, text) { + if (text === void 0) { text = null; } + this.locTextValue = new __WEBPACK_IMPORTED_MODULE_0__localizablestring__["a" /* LocalizableString */](null); + if (text) + this.locText.text = text; + this.value = value; + } + ItemValue.createArray = function (locOwner) { + var items = []; + ItemValue.setupArray(items, locOwner); + return items; + }; + ItemValue.setupArray = function (items, locOwner) { + items.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = locOwner; + return result; + }; + items.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = locOwner; + } + return result; + var _a; + }; + }; + ItemValue.setData = function (items, values) { + items.length = 0; + for (var i = 0; i < values.length; i++) { + var value = values[i]; + var item = new ItemValue(null); + item.setData(value); + items.push(item); + } + }; + ItemValue.getData = function (items) { + var result = new Array(); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item.hasText) { + result.push({ value: item.value, text: item.locText.getJson() }); + } + else { + result.push(item.value); + } + } + return result; + }; + ItemValue.getItemByValue = function (items, val) { + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return items[i]; + } + return null; + }; + ItemValue.prototype.getType = function () { return "itemvalue"; }; + Object.defineProperty(ItemValue.prototype, "locText", { + get: function () { return this.locTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "locOwner", { + get: function () { return this.locText.owner; }, + set: function (value) { this.locText.owner = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "value", { + get: function () { return this.itemValue; }, + set: function (newValue) { + this.itemValue = newValue; + if (!this.itemValue) + return; + var str = this.itemValue.toString(); + var index = str.indexOf(ItemValue.Separator); + if (index > -1) { + this.itemValue = str.slice(0, index); + this.text = str.slice(index + 1); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "hasText", { + get: function () { return this.locText.text ? true : false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "text", { + get: function () { + if (this.hasText) + return this.locText.text; + if (this.value) + return this.value.toString(); + return null; + }, + set: function (newText) { + this.locText.text = newText; + }, + enumerable: true, + configurable: true + }); + ItemValue.prototype.setData = function (value) { + if (typeof (value.value) !== 'undefined') { + var exception = null; + if (this.isObjItemValue(value)) { + value.itemValue = value.itemValue; + this.locText.setJson(value.locText.getJson()); + exception = ItemValue.itemValueProp; + } + this.copyAttributes(value, exception); + } + else { + this.value = value; + } + }; + ItemValue.prototype.isObjItemValue = function (obj) { return typeof (obj.getType) !== 'undefined' && obj.getType() == 'itemvalue'; }; + ItemValue.prototype.copyAttributes = function (src, exceptons) { + for (var key in src) { + if ((typeof src[key] == 'function')) + continue; + if (exceptons && exceptons.indexOf(key) > -1) + continue; + if (key == "text") { + this.locText.setJson(src[key]); + } + else { + this[key] = src[key]; + } + } + }; + return ItemValue; +}()); + +ItemValue.Separator = '|'; +ItemValue.itemValueProp = ["text", "value", "hasText", "locOwner", "locText"]; + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionComment; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionCommentItem; }); + + + + +var SurveyQuestionComment = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionComment, _super); + function SurveyQuestionComment(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionComment.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionComment.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state = { value: this.question.value || '' }; + }; + SurveyQuestionComment.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionComment.prototype.handleOnBlur = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value || '' }); + }; + SurveyQuestionComment.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css }, this.question.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("textarea", { id: this.question.inputId, className: this.css, type: "text", value: this.state.value, placeholder: this.question.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange, cols: this.question.cols, rows: this.question.rows })); + }; + return SurveyQuestionComment; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionCommentItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCommentItem, _super); + function SurveyQuestionCommentItem(props) { + var _this = _super.call(this, props) || this; + _this.question = props.question; + _this.comment = _this.question.comment; + _this.state = { value: _this.comment }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + SurveyQuestionCommentItem.prototype.handleOnChange = function (event) { + this.comment = event.target.value; + this.setState({ value: this.comment }); + }; + SurveyQuestionCommentItem.prototype.handleOnBlur = function (event) { + this.question.comment = this.comment; + }; + SurveyQuestionCommentItem.prototype.componentWillReceiveProps = function (nextProps) { + this.question = nextProps.question; + }; + SurveyQuestionCommentItem.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.question.comment }, this.comment)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "text", className: this.css.question.comment, value: this.state.value, onChange: this.handleOnChange, onBlur: this.handleOnBlur })); + }; + return SurveyQuestionCommentItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("comment", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionComment, props); +}); + + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionSelectBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxBase; }); + + + + + + + + +var QuestionSelectBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionSelectBase, _super); + function QuestionSelectBase(name) { + var _this = _super.call(this, name) || this; + _this.visibleChoicesCache = null; + _this.otherItemValue = new __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */]("other", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText")); + _this.choicesFromUrl = null; + _this.cachedValueForUrlRequestion = null; + _this.storeOthersAsComment = true; + _this.choicesOrderValue = "none"; + _this.isSettingComment = false; + _this.choicesValues = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.choicesByUrl = _this.createRestfull(); + _this.locOtherTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.locOtherErrorTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.choicesByUrl.getResultCallback = function (items) { self.onLoadChoicesFromUrl(items); }; + return _this; + } + Object.defineProperty(QuestionSelectBase.prototype, "otherItem", { + get: function () { + this.otherItemValue.text = this.otherText ? this.otherText : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + return this.otherItemValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "isOtherSelected", { + get: function () { + return this.getStoreOthersAsComment() ? this.getHasOther(this.value) : this.getHasOther(this.cachedValue); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.getHasOther = function (val) { + return val == this.otherItem.value; + }; + QuestionSelectBase.prototype.createRestfull = function () { return new __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__["a" /* ChoicesRestfull */](); }; + QuestionSelectBase.prototype.getComment = function () { + if (this.getStoreOthersAsComment()) + return _super.prototype.getComment.call(this); + return this.commentValue; + }; + QuestionSelectBase.prototype.setComment = function (newValue) { + if (this.getStoreOthersAsComment()) + _super.prototype.setComment.call(this, newValue); + else { + if (!this.isSettingComment && newValue != this.commentValue) { + this.isSettingComment = true; + this.commentValue = newValue; + if (this.isOtherSelected) { + this.setNewValueInData(this.cachedValue); + } + this.isSettingComment = false; + } + } + }; + QuestionSelectBase.prototype.setNewValue = function (newValue) { + if (newValue) + this.cachedValueForUrlRequestion = newValue; + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionSelectBase.prototype.valueFromData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueFromData.call(this, val); + this.cachedValue = this.valueFromDataCore(val); + return this.cachedValue; + }; + QuestionSelectBase.prototype.valueToData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueToData.call(this, val); + this.cachedValue = val; + return this.valueToDataCore(val); + }; + QuestionSelectBase.prototype.valueFromDataCore = function (val) { + if (!this.hasUnknownValue(val)) + return val; + if (val == this.otherItem.value) + return val; + this.comment = val; + return this.otherItem.value; + }; + QuestionSelectBase.prototype.valueToDataCore = function (val) { + if (val == this.otherItem.value && this.getComment()) { + val = this.getComment(); + } + return val; + }; + QuestionSelectBase.prototype.hasUnknownValue = function (val) { + if (!val) + return false; + var items = this.activeChoices; + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return false; + } + return true; + }; + Object.defineProperty(QuestionSelectBase.prototype, "choices", { + get: function () { return this.choicesValues; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.choicesValues, newValue); + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.hasOtherChanged = function () { + this.onVisibleChoicesChanged(); + }; + Object.defineProperty(QuestionSelectBase.prototype, "choicesOrder", { + get: function () { return this.choicesOrderValue; }, + set: function (newValue) { + if (newValue == this.choicesOrderValue) + return; + this.choicesOrderValue = newValue; + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherText", { + get: function () { return this.locOtherText.text; }, + set: function (value) { + this.locOtherText.text = value; + this.updateOtherItem(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherErrorText", { + get: function () { return this.locOtherErrorText.text; }, + set: function (value) { this.locOtherErrorText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherText", { + get: function () { return this.locOtherTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherErrorText", { + get: function () { return this.locOtherErrorTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "visibleChoices", { + get: function () { + if (!this.hasOther && this.choicesOrder == "none") + return this.activeChoices; + if (!this.visibleChoicesCache) { + this.visibleChoicesCache = this.sortVisibleChoices(this.activeChoices.slice()); + if (this.hasOther) { + this.visibleChoicesCache.push(this.otherItem); + } + } + return this.visibleChoicesCache; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "activeChoices", { + get: function () { return this.choicesFromUrl ? this.choicesFromUrl : this.choices; }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.supportComment = function () { return true; }; + QuestionSelectBase.prototype.supportOther = function () { return true; }; + QuestionSelectBase.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (!this.isOtherSelected || this.comment) + return; + var text = this.otherErrorText; + if (!text) { + text = __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherRequiredError"); + } + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](text)); + }; + QuestionSelectBase.prototype.onLocaleChanged = function () { + _super.prototype.onLocaleChanged.call(this); + this.updateOtherItem(); + }; + QuestionSelectBase.prototype.updateOtherItem = function () { + var item = this.otherItem; // set the correct text + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.getStoreOthersAsComment = function () { return this.storeOthersAsComment && (this.survey != null ? this.survey.storeOthersAsComment : true); }; + QuestionSelectBase.prototype.onSurveyLoad = function () { + if (this.choicesByUrl) + this.choicesByUrl.run(); + }; + QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) { + var errorCount = this.errors.length; + this.errors = []; + if (this.choicesByUrl && this.choicesByUrl.error) { + this.errors.push(this.choicesByUrl.error); + } + if (errorCount > 0 || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + var newChoices = null; + if (array && array.length > 0) { + newChoices = new Array(); + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(newChoices, array); + } + this.choicesFromUrl = newChoices; + this.onVisibleChoicesChanged(); + if (this.cachedValueForUrlRequestion) { + this.value = this.cachedValueForUrlRequestion; + } + }; + QuestionSelectBase.prototype.onVisibleChoicesChanged = function () { + this.visibleChoicesCache = null; + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.sortVisibleChoices = function (array) { + var order = this.choicesOrder.toLowerCase(); + if (order == "asc") + return this.sortArray(array, 1); + if (order == "desc") + return this.sortArray(array, -1); + if (order == "random") + return this.randomizeArray(array); + return array; + }; + QuestionSelectBase.prototype.sortArray = function (array, mult) { + return array.sort(function (a, b) { + if (a.text < b.text) + return -1 * mult; + if (a.text > b.text) + return 1 * mult; + return 0; + }); + }; + QuestionSelectBase.prototype.randomizeArray = function (array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + return array; + }; + QuestionSelectBase.prototype.clearUnusedValues = function () { + _super.prototype.clearUnusedValues.call(this); + if (!this.isOtherSelected) { + this.comment = null; + } + }; + return QuestionSelectBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +var QuestionCheckboxBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxBase, _super); + function QuestionCheckboxBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + return _this; + } + Object.defineProperty(QuestionCheckboxBase.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + return QuestionCheckboxBase; +}(QuestionSelectBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("selectbase", ["hasComment:boolean", "hasOther:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "otherText", serializationProperty: "locOtherText" }, { name: "otherErrorText", serializationProperty: "locOtherErrorText" }, + { name: "storeOthersAsComment:boolean", default: true }], null, "question"); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkboxbase", [{ name: "colCount:number", default: 1, choices: [0, 1, 2, 3, 4] }], null, "selectbase"); + + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestion; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionErrors; }); + + + + +var SurveyQuestion = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestion, _super); + function SurveyQuestion(props) { + var _this = _super.call(this, props) || this; + _this.setQuestion(props.question); + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyQuestion.prototype.componentWillReceiveProps = function (nextProps) { + this.creator = nextProps.creator; + this.css = nextProps.css; + this.setQuestion(nextProps.question); + }; + SurveyQuestion.prototype.setQuestion = function (question) { + this.questionBase = question; + this.question = question instanceof __WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */] ? question : null; + var value = this.question ? this.question.value : null; + this.state = { + visible: this.questionBase.visible, value: value, error: 0, renderWidth: 0, + visibleIndexValue: -1, isReadOnly: this.questionBase.isReadOnly + }; + }; + SurveyQuestion.prototype.componentDidMount = function () { + if (this.questionBase) { + var self = this; + this.questionBase["react"] = self; + this.questionBase.renderWidthChangedCallback = function () { + self.state.renderWidth = self.state.renderWidth + 1; + self.setState(self.state); + }; + this.questionBase.visibleIndexChangedCallback = function () { + self.state.visibleIndexValue = self.questionBase.visibleIndex; + self.setState(self.state); + }; + this.questionBase.readOnlyChangedCallback = function () { + self.state.isReadOnly = self.questionBase.isReadOnly; + self.setState(self.state); + }; + var el = this.refs["root"]; + if (el && this.questionBase.survey) + this.questionBase.survey.afterRenderQuestion(this.questionBase, el); + if (this.questionBase.customWidget) { + el = this.refs["widget"]; + if (el) + this.questionBase.customWidget.afterRender(this.questionBase, el); + } + } + }; + SurveyQuestion.prototype.componentWillUnmount = function () { + var el = this.refs["root"]; + if (this.questionBase) { + this.questionBase["react"] = null; + this.questionBase.renderWidthChangedCallback = null; + this.questionBase.visibleIndexChangedCallback = null; + this.questionBase.readOnlyChangedCallback = null; + } + if (this.questionBase.customWidget) { + el = this.refs["widget"]; + if (el) + this.questionBase.customWidget.willUnmount(this.questionBase, el); + } + }; + SurveyQuestion.prototype.render = function () { + if (!this.questionBase || !this.creator) + return null; + if (!this.questionBase.visible) + return null; + var questionRender = this.renderQuestion(); + var title = this.questionBase.hasTitle ? this.renderTitle() : null; + var titleTop = this.creator.questionTitleLocation() == "top" ? title : null; + var titleBottom = this.creator.questionTitleLocation() == "bottom" ? title : null; + var comment = (this.question && this.question.hasComment) ? this.renderComment() : null; + var errors = this.renderErrors(); + var marginLeft = (this.questionBase.indent > 0) ? this.questionBase.indent * this.css.question.indent + "px" : null; + var paddingRight = (this.questionBase.rightIndent > 0) ? this.questionBase.rightIndent * this.css.question.indent + "px" : null; + var rootStyle = { display: 'inline-block', verticalAlign: 'top' }; + if (this.questionBase.renderWidth) + rootStyle["width"] = this.questionBase.renderWidth; + if (marginLeft) + rootStyle["marginLeft"] = marginLeft; + if (paddingRight) + rootStyle["paddingRight"] = paddingRight; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root", id: this.questionBase.id, className: this.css.question.root, style: rootStyle }, + titleTop, + errors, + questionRender, + comment, + titleBottom)); + }; + SurveyQuestion.prototype.renderQuestion = function () { + var customWidget = this.questionBase.customWidget; + if (!customWidget) + return this.creator.createQuestionElement(this.questionBase); + var widget = null; + if (customWidget.widgetJson.isDefaultRender) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget" }, this.creator.createQuestionElement(this.questionBase)); + } + if (customWidget.widgetJson.render) { + widget = customWidget.widgetJson.render(this.questionBase); + } + else { + if (customWidget.htmlTemplate) { + var htmlValue = { __html: customWidget.htmlTemplate }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget", dangerouslySetInnerHTML: htmlValue })); + } + } + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "widget" }, widget); + }; + SurveyQuestion.prototype.renderTitle = function () { + var titleText = this.question.fullTitle; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h5", { className: this.css.question.title }, titleText)); + }; + SurveyQuestion.prototype.renderComment = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, this.question.commentText), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.css }))); + }; + SurveyQuestion.prototype.renderErrors = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionErrors, { question: this.question, css: this.css, creator: this.creator }); + }; + return SurveyQuestion; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyQuestionErrors = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionErrors, _super); + function SurveyQuestionErrors(props) { + var _this = _super.call(this, props) || this; + _this.setQuestion(props.question); + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyQuestionErrors.prototype.componentWillReceiveProps = function (nextProps) { + this.setQuestion(nextProps.question); + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyQuestionErrors.prototype.setQuestion = function (question) { + this.question = question instanceof __WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */] ? question : null; + if (this.question) { + var self = this; + this.question.errorsChangedCallback = function () { + self.state.error = self.state.error + 1; + self.setState(self.state); + }; + } + this.state = { error: 0 }; + }; + SurveyQuestionErrors.prototype.render = function () { + if (!this.question || this.question.errors.length == 0) + return null; + var errors = []; + for (var i = 0; i < this.question.errors.length; i++) { + var errorText = this.question.errors[i].getText(); + var key = "error" + i; + errors.push(this.creator.renderError(key, errorText)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.error.root }, errors)); + }; + return SurveyQuestionErrors; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__survey__ = __webpack_require__(23); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ReactSurveyModel; }); + + +var ReactSurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ReactSurveyModel, _super); + function ReactSurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + return _super.call(this, jsonObj) || this; + } + ReactSurveyModel.prototype.render = function () { + if (this.renderCallback) { + this.renderCallback(); + } + }; + ReactSurveyModel.prototype.mergeCss = function (src, dest) { + this.mergeValues(src, dest); + }; + ReactSurveyModel.prototype.doAfterRenderSurvey = function (el) { + this.afterRenderSurvey(el); + }; + ReactSurveyModel.prototype.onLoadSurveyFromService = function () { + this.render(); + }; + ReactSurveyModel.prototype.onLoadingSurveyFromService = function () { + this.render(); + }; + return ReactSurveyModel; +}(__WEBPACK_IMPORTED_MODULE_1__survey__["a" /* SurveyModel */])); + + + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditionsParser__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__ = __webpack_require__(20); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Condition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ConditionNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionRunner; }); + + +var Condition = (function () { + function Condition() { + this.opValue = "equal"; + } + Object.defineProperty(Condition, "operators", { + get: function () { + if (Condition.operatorsValue != null) + return Condition.operatorsValue; + Condition.operatorsValue = { + empty: function (left, right) { return !left; }, + notempty: function (left, right) { return !(!left); }, + equal: function (left, right) { return left == right; }, + notequal: function (left, right) { return left != right; }, + contains: function (left, right) { return left && left["indexOf"] && left.indexOf(right) > -1; }, + notcontains: function (left, right) { return !left || !left["indexOf"] || left.indexOf(right) == -1; }, + greater: function (left, right) { return left > right; }, + less: function (left, right) { return left < right; }, + greaterorequal: function (left, right) { return left >= right; }, + lessorequal: function (left, right) { return left <= right; } + }; + return Condition.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Condition.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Condition.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Condition.prototype.perform = function (left, right) { + if (left === void 0) { left = null; } + if (right === void 0) { right = null; } + if (!left) + left = this.left; + if (!right) + right = this.right; + return Condition.operators[this.operator](this.getPureValue(left), this.getPureValue(right)); + }; + Condition.prototype.getPureValue = function (val) { + if (!val || (typeof val != "string")) + return val; + var str = ""; + if (val.length > 0 && (val[0] == "'" || val[0] == '"')) + val = val.substr(1); + var len = val.length; + if (len > 0 && (val[len - 1] == "'" || val[len - 1] == '"')) + val = val.substr(0, len - 1); + return val; + }; + return Condition; +}()); + +Condition.operatorsValue = null; +var ConditionNode = (function () { + function ConditionNode() { + this.connectiveValue = "and"; + this.children = []; + } + Object.defineProperty(ConditionNode.prototype, "connective", { + get: function () { return this.connectiveValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (value == "&" || value == "&&") + value = "and"; + if (value == "|" || value == "||") + value = "or"; + if (value != "and" && value != "or") + return; + this.connectiveValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConditionNode.prototype, "isEmpty", { + get: function () { return this.children.length == 0; }, + enumerable: true, + configurable: true + }); + ConditionNode.prototype.clear = function () { + this.children = []; + this.connective = "and"; + }; + return ConditionNode; +}()); + +var ConditionRunner = (function () { + function ConditionRunner(expression) { + this.root = new ConditionNode(); + this.expression = expression; + this.processValue = new __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__["a" /* ProcessValue */](); + } + Object.defineProperty(ConditionRunner.prototype, "expression", { + get: function () { return this.expressionValue; }, + set: function (value) { + if (this.expression == value) + return; + this.expressionValue = value; + new __WEBPACK_IMPORTED_MODULE_0__conditionsParser__["a" /* ConditionsParser */]().parse(this.expressionValue, this.root); + }, + enumerable: true, + configurable: true + }); + ConditionRunner.prototype.run = function (values) { + this.values = values; + return this.runNode(this.root); + }; + ConditionRunner.prototype.runNode = function (node) { + var onFirstFail = node.connective == "and"; + for (var i = 0; i < node.children.length; i++) { + var res = this.runNodeCondition(node.children[i]); + if (!res && onFirstFail) + return false; + if (res && !onFirstFail) + return true; + } + return onFirstFail; + }; + ConditionRunner.prototype.runNodeCondition = function (value) { + if (!value) + return false; + if (value["children"]) + return this.runNode(value); + if (value["left"]) + return this.runCondition(value); + return false; + }; + ConditionRunner.prototype.runCondition = function (condition) { + var left = condition.left; + var name = this.getValueName(left); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return condition.operator === "empty"; + left = this.processValue.getValue(name, this.values); + } + var right = condition.right; + name = this.getValueName(right); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return false; + right = this.processValue.getValue(name, this.values); + } + return condition.perform(left, right); + }; + ConditionRunner.prototype.getValueName = function (nodeValue) { + if (!nodeValue) + return null; + if (typeof nodeValue !== 'string') + return null; + if (nodeValue.length < 3 || nodeValue[0] != '{' || nodeValue[nodeValue.length - 1] != '}') + return null; + return nodeValue.substr(1, nodeValue.length - 2); + }; + return ConditionRunner; +}()); + + + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultStandardCss; }); +var surveyCss = { + currentType: "", + getCss: function () { + var loc = this.currentType ? this[this.currentType] : defaultStandardCss; + if (!loc) + loc = defaultStandardCss; + return loc; + }, +}; +var defaultStandardCss = { + root: "sv_main", + header: "", + body: "sv_body", + footer: "sv_nav", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "sv_progress", progressBar: "", + pageTitle: "sv_p_title", + row: "sv_row", + question: { root: "sv_q", title: "sv_q_title", comment: "", indent: 20 }, + error: { root: "sv_q_erbox", icon: "", item: "" }, + checkbox: { root: "sv_qcbc", item: "sv_q_checkbox", other: "sv_q_other" }, + comment: "", + dropdown: { root: "", control: "" }, + matrix: { root: "sv_q_matrix" }, + matrixdropdown: { root: "sv_q_matrix" }, + matrixdynamic: { root: "table", button: "" }, + multipletext: { root: "", itemTitle: "", itemValue: "" }, + radiogroup: { root: "sv_qcbc", item: "sv_q_radiogroup", label: "", other: "sv_q_other" }, + rating: { root: "sv_q_rating", item: "sv_q_rating_item" }, + text: "", + window: { + root: "sv_window", body: "sv_window_content", + header: { + root: "sv_window_title", title: "", button: "", buttonExpanded: "", buttonCollapsed: "" + } + } +}; +surveyCss["standard"] = defaultStandardCss; + + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNavigationBase; }); + + +var SurveyNavigationBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyNavigationBase, _super); + function SurveyNavigationBase(props) { + var _this = _super.call(this, props) || this; + _this.updateStateFunction = null; + _this.survey = props.survey; + _this.css = props.css; + _this.state = { update: 0 }; + return _this; + } + SurveyNavigationBase.prototype.componentWillReceiveProps = function (nextProps) { + this.survey = nextProps.survey; + this.css = nextProps.css; + }; + SurveyNavigationBase.prototype.componentDidMount = function () { + if (this.survey) { + var self = this; + this.updateStateFunction = function () { + self.state.update = self.state.update + 1; + self.setState(self.state); + }; + this.survey.onPageVisibleChanged.add(this.updateStateFunction); + } + }; + SurveyNavigationBase.prototype.componentWillUnmount = function () { + if (this.survey && this.updateStateFunction) { + this.survey.onPageVisibleChanged.remove(this.updateStateFunction); + this.updateStateFunction = null; + } + }; + return SurveyNavigationBase; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChoicesRestfull; }); + + + + + + +var ChoicesRestfull = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ChoicesRestfull, _super); + function ChoicesRestfull() { + var _this = _super.call(this) || this; + _this.url = ""; + _this.path = ""; + _this.valueName = ""; + _this.titleName = ""; + _this.error = null; + return _this; + } + ChoicesRestfull.prototype.run = function () { + if (!this.url || !this.getResultCallback) + return; + this.error = null; + var xhr = new XMLHttpRequest(); + xhr.open('GET', this.url); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + if (xhr.status == 200) { + self.onLoad(JSON.parse(xhr.response)); + } + else { + self.onError(xhr.statusText, xhr.responseText); + } + }; + xhr.send(); + }; + ChoicesRestfull.prototype.getType = function () { return "choicesByUrl"; }; + Object.defineProperty(ChoicesRestfull.prototype, "isEmpty", { + get: function () { + return !this.url && !this.path && !this.valueName && !this.titleName; + }, + enumerable: true, + configurable: true + }); + ChoicesRestfull.prototype.setData = function (json) { + this.clear(); + if (json.url) + this.url = json.url; + if (json.path) + this.path = json.path; + if (json.valueName) + this.valueName = json.valueName; + if (json.titleName) + this.titleName = json.titleName; + }; + ChoicesRestfull.prototype.clear = function () { + this.url = ""; + this.path = ""; + this.valueName = ""; + this.titleName = ""; + }; + ChoicesRestfull.prototype.onLoad = function (result) { + var items = []; + result = this.getResultAfterPath(result); + if (result && result["length"]) { + for (var i = 0; i < result.length; i++) { + var itemValue = result[i]; + if (!itemValue) + continue; + var value = this.getValue(itemValue); + var title = this.getTitle(itemValue); + items.push(new __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */](value, title)); + } + } + else { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlGetChoicesError")); + } + this.getResultCallback(items); + }; + ChoicesRestfull.prototype.onError = function (status, response) { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlRequestError")["format"](status, response)); + this.getResultCallback([]); + }; + ChoicesRestfull.prototype.getResultAfterPath = function (result) { + if (!result) + return result; + if (!this.path) + return result; + var pathes = this.getPathes(); + for (var i = 0; i < pathes.length; i++) { + result = result[pathes[i]]; + if (!result) + return null; + } + return result; + }; + ChoicesRestfull.prototype.getPathes = function () { + var pathes = []; + if (this.path.indexOf(';') > -1) { + pathes = this.path.split(';'); + } + else { + pathes = this.path.split(','); + } + if (pathes.length == 0) + pathes.push(this.path); + return pathes; + }; + ChoicesRestfull.prototype.getValue = function (item) { + if (this.valueName) + return item[this.valueName]; + var len = Object.keys(item).length; + if (len < 1) + return null; + return item[Object.keys(item)[0]]; + }; + ChoicesRestfull.prototype.getTitle = function (item) { + if (!this.titleName) + return null; + return item[this.titleName]; + }; + return ChoicesRestfull; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("choicesByUrl", ["url", "path", "valueName", "titleName"], function () { return new ChoicesRestfull(); }); + + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ProcessValue; }); +var ProcessValue = (function () { + function ProcessValue() { + } + ProcessValue.prototype.getFirstName = function (text) { + if (!text) + return text; + var res = ""; + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + if (ch == '.' || ch == '[') + break; + res += ch; + } + return res; + }; + ProcessValue.prototype.hasValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.hasValue; + }; + ProcessValue.prototype.getValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.value; + }; + ProcessValue.prototype.getValueCore = function (text, values) { + var res = { hasValue: false, value: null }; + var curValue = values; + if (!curValue) + return res; + var isFirst = true; + while (text && text.length > 0) { + var isArray = !isFirst && text[0] == '['; + if (!isArray) { + if (!isFirst) + text = text.substr(1); + var curName = this.getFirstName(text); + if (!curName) + return res; + if (!curValue[curName]) + return res; + curValue = curValue[curName]; + text = text.substr(curName.length); + } + else { + if (!Array.isArray(curValue)) + return res; + var index = 1; + var str = ""; + while (index < text.length && text[index] != ']') { + str += text[index]; + index++; + } + text = index < text.length ? text.substr(index + 1) : ""; + index = this.getIntValue(str); + if (index < 0 || index >= curValue.length) + return res; + curValue = curValue[index]; + } + isFirst = false; + } + res.value = curValue; + res.hasValue = true; + return res; + }; + ProcessValue.prototype.getIntValue = function (str) { + if (str == "0" || ((str | 0) > 0 && str % 1 == 0)) + return Number(str); + return -1; + }; + return ProcessValue; +}()); + + + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__question_baseselect__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDropdownColumn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownCell; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return MatrixDropdownRowModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return QuestionMatrixDropdownModelBase; }); + + + + + + + + + + +var MatrixDropdownColumn = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownColumn, _super); + function MatrixDropdownColumn(name, title) { + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.hasOther = false; + _this.minWidth = ""; + _this.cellType = "default"; + _this.inputType = "text"; + _this.choicesOrder = "none"; + _this.locOwner = null; + _this.colCountValue = -1; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.choicesByUrl = new __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__["a" /* ChoicesRestfull */](); + return _this; + } + MatrixDropdownColumn.prototype.getType = function () { return "matrixdropdowncolumn"; }; + Object.defineProperty(MatrixDropdownColumn.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text; }, + set: function (value) { this.locOptionsCaption.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < -1 || value > 4) + return; + this.colCountValue = value; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownColumn.prototype.getLocale = function () { + return this.locOwner ? this.locOwner.getLocale() : ""; + }; + return MatrixDropdownColumn; +}(__WEBPACK_IMPORTED_MODULE_3__base__["b" /* Base */])); + +var MatrixDropdownCell = (function () { + function MatrixDropdownCell(column, row, data) { + this.column = column; + this.row = row; + this.questionValue = data.createQuestion(this.row, this.column); + this.questionValue.setData(row); + } + Object.defineProperty(MatrixDropdownCell.prototype, "question", { + get: function () { return this.questionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownCell.prototype, "value", { + get: function () { return this.question.value; }, + set: function (value) { + this.question.value = value; + }, + enumerable: true, + configurable: true + }); + return MatrixDropdownCell; +}()); + +var MatrixDropdownRowModelBase = (function () { + function MatrixDropdownRowModelBase(data, value) { + this.rowValues = {}; + this.rowComments = {}; + this.isSettingValue = false; + this.cells = []; + this.data = data; + this.value = value; + this.idValue = MatrixDropdownRowModelBase.getId(); + this.buildCells(); + } + MatrixDropdownRowModelBase.getId = function () { return "srow_" + MatrixDropdownRowModelBase.idCounter++; }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "rowName", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "value", { + get: function () { return this.rowValues; }, + set: function (value) { + this.isSettingValue = true; + this.rowValues = {}; + if (value != null) { + for (var key in value) { + this.rowValues[key] = value[key]; + } + } + for (var i = 0; i < this.cells.length; i++) { + this.cells[i].question.onSurveyValueChanged(this.getValue(this.cells[i].column.name)); + } + this.isSettingValue = false; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getValue = function (name) { + return this.rowValues[name]; + }; + MatrixDropdownRowModelBase.prototype.setValue = function (name, newValue) { + if (this.isSettingValue) + return; + if (newValue === "") + newValue = null; + if (newValue != null) { + this.rowValues[name] = newValue; + } + else { + delete this.rowValues[name]; + } + this.data.onRowChanged(this, this.value); + }; + MatrixDropdownRowModelBase.prototype.getComment = function (name) { + return this.rowComments[name]; + }; + MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue) { + this.rowComments[name] = newValue; + }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "isEmpty", { + get: function () { + var val = this.value; + if (!val) + return true; + for (var key in val) + return false; + return true; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + MatrixDropdownRowModelBase.prototype.buildCells = function () { + var columns = this.data.columns; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + this.cells.push(this.createCell(column)); + } + }; + MatrixDropdownRowModelBase.prototype.createCell = function (column) { + return new MatrixDropdownCell(column, this, this.data); + }; + return MatrixDropdownRowModelBase; +}()); + +MatrixDropdownRowModelBase.idCounter = 1; +var QuestionMatrixDropdownModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModelBase, _super); + function QuestionMatrixDropdownModelBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.columnsValue = []; + _this.isRowChanging = false; + _this.generatedVisibleRows = null; + _this.cellTypeValue = "dropdown"; + _this.columnColCountValue = 0; + _this.columnMinWidth = ""; + _this.horizontalScroll = false; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.overrideColumnsMethods(); + return _this; + } + QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) { + var colNames = __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].DefaultColums; + for (var i = 0; i < colNames.length; i++) + matrix.addColumn(colNames[i]); + }; + QuestionMatrixDropdownModelBase.prototype.getType = function () { + return "matrixdropdownbase"; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (value) { + this.columnsValue = value; + this.overrideColumnsMethods(); + this.fireCallback(this.columnsChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.overrideColumnsMethods = function () { + var self = this; + this.columnsValue.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = self; + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + }; + this.columnsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = self; + } + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + var _a; + }; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "cellType", { + get: function () { return this.cellTypeValue; }, + set: function (newValue) { + if (this.cellType == newValue) + return; + this.cellTypeValue = newValue; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columnColCount", { + get: function () { return this.columnColCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.columnColCountValue = value; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.getColumnTitle = function (column) { + var result = column.title; + if (column.isRequired && this.survey) { + var requireText = this.survey.requiredText; + if (requireText) + requireText += " "; + result = requireText + result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) { + return column.minWidth ? column.minWidth : this.columnMinWidth; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) { + if (title === void 0) { title = null; } + var column = new MatrixDropdownColumn(name, title); + this.columnsValue.push(column); + return column; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "visibleRows", { + get: function () { + this.generatedVisibleRows = this.generateRows(); + return this.generatedVisibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.generateRows = function () { return null; }; + QuestionMatrixDropdownModelBase.prototype.createMatrixRow = function (name, text, value) { + return null; + }; + QuestionMatrixDropdownModelBase.prototype.createNewValue = function (curValue) { return !curValue ? {} : curValue; }; + QuestionMatrixDropdownModelBase.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + var result = questionValue[row.rowName] ? questionValue[row.rowName] : null; + if (!result && create) { + result = {}; + questionValue[row.rowName] = result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { + }; + QuestionMatrixDropdownModelBase.prototype.onValueChanged = function () { + if (this.isRowChanging) + return; + this.onBeforeValueChanged(this.value); + if (!(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + this.generatedVisibleRows[i].value = this.getRowValue(row, val); + } + this.isRowChanging = false; + }; + QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + if (!cells) + continue; + for (var colIndex = 0; colIndex < cells.length; colIndex++) { + var question = cells[colIndex].question; + if (question && (!question.supportGoNextPageAutomatic() || !question.value)) + return false; + } + } + return true; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var errosInColumns = this.hasErrorInColumns(fireCallback); + return _super.prototype.hasErrors.call(this, fireCallback) || errosInColumns; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrorInColumns = function (fireCallback) { + if (!this.generatedVisibleRows) + return false; + var res = false; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + res = cells && cells[colIndex] && cells[colIndex].question && cells[colIndex].question.hasErrors(fireCallback) || res; + } + } + return res; + }; + QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () { + var question = this.getFirstCellQuestion(false); + return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () { + var question = this.getFirstCellQuestion(true); + return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) { + if (!this.generatedVisibleRows) + return null; + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + if (!onError) + return cells[colIndex].question; + if (cells[colIndex].question.currentErrorCount > 0) + return cells[colIndex].question; + } + } + return null; + }; + //IMatrixDropdownData + QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) { + var question = this.createQuestionCore(row, column); + question.name = column.name; + question.isRequired = column.isRequired; + question.hasOther = column.hasOther; + question.readOnly = this.readOnly; + question.setData(this.survey); + if (column.hasOther) { + if (question instanceof __WEBPACK_IMPORTED_MODULE_6__question_baseselect__["b" /* QuestionSelectBase */]) { + question.storeOthersAsComment = false; + } + } + return question; + }; + QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) { + var cellType = column.cellType == "default" ? this.cellType : column.cellType; + var name = this.getQuestionName(row, column); + if (cellType == "checkbox") + return this.createCheckbox(name, column); + if (cellType == "radiogroup") + return this.createRadiogroup(name, column); + if (cellType == "text") + return this.createText(name, column); + if (cellType == "comment") + return this.createComment(name, column); + return this.createDropdown(name, column); + }; + QuestionMatrixDropdownModelBase.prototype.getQuestionName = function (row, column) { return row.rowName + "_" + column.name; }; + QuestionMatrixDropdownModelBase.prototype.getColumnChoices = function (column) { + return column.choices && column.choices.length > 0 ? column.choices : this.choices; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnOptionsCaption = function (column) { + return column.optionsCaption ? column.optionsCaption : this.optionsCaption; + }; + QuestionMatrixDropdownModelBase.prototype.createDropdown = function (name, column) { + var q = this.createCellQuestion("dropdown", name); + this.setSelectBaseProperties(q, column); + q.optionsCaption = this.getColumnOptionsCaption(column); + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCheckbox = function (name, column) { + var q = this.createCellQuestion("checkbox", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createRadiogroup = function (name, column) { + var q = this.createCellQuestion("radiogroup", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.setSelectBaseProperties = function (question, column) { + question.choicesOrder = column.choicesOrder; + question.choices = this.getColumnChoices(column); + question.choicesByUrl.setData(column.choicesByUrl); + if (!question.choicesByUrl.isEmpty) { + question.choicesByUrl.run(); + } + }; + QuestionMatrixDropdownModelBase.prototype.createText = function (name, column) { + var q = this.createCellQuestion("text", name); + q.inputType = column.inputType; + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createComment = function (name, column) { + var q = this.createCellQuestion("comment", name); + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCellQuestion = function (questionType, name) { + return __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + }; + QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) { + delete newValue[row.rowName]; + return Object.keys(newValue).length == 0 ? null : newValue; + }; + QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, newRowValue) { + var newValue = this.createNewValue(this.value); + var rowValue = this.getRowValue(row, newValue, true); + for (var key in rowValue) + delete rowValue[key]; + if (newRowValue) { + newRowValue = JSON.parse(JSON.stringify(newRowValue)); + for (var key in newRowValue) + rowValue[key] = newRowValue[key]; + } + if (Object.keys(rowValue).length == 0) { + newValue = this.deleteRowValue(newValue, row); + } + this.isRowChanging = true; + this.setNewValue(newValue); + this.isRowChanging = false; + }; + return QuestionMatrixDropdownModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdowncolumn", ["name", { name: "title", serializationProperty: "locTitle" }, + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, { name: "cellType", default: "default", choices: ["default", "dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "colCount", default: -1, choices: [-1, 0, 1, 2, 3, 4] }, "isRequired:boolean", "hasOther:boolean", "minWidth", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }], function () { return new MatrixDropdownColumn(""); }); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdownbase", [{ name: "columns:matrixdropdowncolumns", className: "matrixdropdowncolumn" }, + "horizontalScroll:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, + { name: "cellType", default: "dropdown", choices: ["dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "columnColCount", default: 0, choices: [0, 1, 2, 3, 4] }, "columnMinWidth"], function () { return new QuestionMatrixDropdownModelBase(""); }, "question"); + + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(16); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionBase; }); + + + + +var QuestionBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionBase, _super); + function QuestionBase(name) { + var _this = _super.call(this) || this; + _this.name = name; + _this.conditionRunner = null; + _this.visibleIf = ""; + _this.visibleValue = true; + _this.startWithNewLineValue = true; + _this.visibleIndexValue = -1; + _this.width = ""; + _this.renderWidthValue = ""; + _this.rightIndentValue = 0; + _this.indent = 0; + _this.idValue = QuestionBase.getQuestionId(); + _this.onCreating(); + return _this; + } + QuestionBase.getQuestionId = function () { + return "sq_" + QuestionBase.questionCounter++; + }; + Object.defineProperty(QuestionBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.fireCallback(this.visibilityChangedCallback); + this.fireCallback(this.rowVisibilityChangedCallback); + if (this.survey) { + this.survey.questionVisibilityChanged(this, this.visible); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isVisible", { + get: function () { return this.visible || (this.survey && this.survey.isDesignMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isReadOnly", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visibleIndex", { + get: function () { return this.visibleIndexValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + return false; + }; + Object.defineProperty(QuestionBase.prototype, "currentErrorCount", { + get: function () { return 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasTitle", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasInput", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasComment", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + }; + QuestionBase.prototype.setData = function (newValue) { + this.data = newValue; + if (newValue && newValue["questionAdded"]) { + this.surveyValue = newValue; + } + this.onSetData(); + }; + Object.defineProperty(QuestionBase.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.fireCallback = function (callback) { + if (callback) + callback(); + }; + QuestionBase.prototype.onSetData = function () { }; + QuestionBase.prototype.onCreating = function () { }; + QuestionBase.prototype.runCondition = function (values) { + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + //IQuestion + QuestionBase.prototype.onSurveyValueChanged = function (newValue) { + }; + QuestionBase.prototype.onSurveyLoad = function () { + }; + QuestionBase.prototype.setVisibleIndex = function (value) { + if (this.visibleIndexValue == value) + return; + this.visibleIndexValue = value; + this.fireCallback(this.visibleIndexChangedCallback); + }; + QuestionBase.prototype.supportGoNextPageAutomatic = function () { return false; }; + QuestionBase.prototype.clearUnusedValues = function () { }; + QuestionBase.prototype.onLocaleChanged = function () { }; + //ILocalizableOwner + QuestionBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + return QuestionBase; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +QuestionBase.questionCounter = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("questionbase", ["!name", { name: "visible:boolean", default: true }, "visibleIf:expression", + { name: "width" }, { name: "startWithNewLine:boolean", default: true }, { name: "indent:number", default: 0, choices: [0, 1, 2, 3] }]); + + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__page__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__ = __webpack_require__(31); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__ = __webpack_require__(34); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyModel; }); + + + + + + + + + + + +var SurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyModel, _super); + function SurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + var _this = _super.call(this) || this; + _this.surveyId = null; + _this.surveyPostId = null; + _this.clientId = null; + _this.cookieName = null; + _this.sendResultOnPageNext = false; + _this.commentPrefix = "-Comment"; + _this.focusFirstQuestionAutomatic = true; + _this.showNavigationButtons = true; + _this.showTitle = true; + _this.showPageTitles = true; + _this.showCompletedPage = true; + _this.requiredText = "*"; + _this.questionStartIndex = ""; + _this.showProgressBar = "off"; + _this.storeOthersAsComment = true; + _this.goNextPageAutomatic = false; + _this.pages = new Array(); + _this.triggers = new Array(); + _this.clearInvisibleValues = false; + _this.currentPageValue = null; + _this.valuesHash = {}; + _this.variablesHash = {}; + _this.showPageNumbersValue = false; + _this.showQuestionNumbersValue = "on"; + _this.questionTitleLocationValue = "top"; + _this.localeValue = ""; + _this.isCompleted = false; + _this.isLoading = false; + _this.processedTextValues = {}; + _this.isValidatingOnServerValue = false; + _this.modeValue = "edit"; + _this.isDesignModeValue = false; + _this.onComplete = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPartialSend = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onCurrentPageChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onValueChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPageVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onQuestionRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onPanelRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onValidateQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onProcessHtml = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onSendResult = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onGetResult = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onUploadFile = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderSurvey = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderPage = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.onAfterRenderPanel = new __WEBPACK_IMPORTED_MODULE_2__base__["d" /* Event */](); + _this.jsonErrors = null; + _this.isLoadingFromJsonValue = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompletedHtmlValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPagePrevTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPageNextTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompleteTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locQuestionTitleTemplateValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__["a" /* TextPreProcessor */](); + _this.textPreProcessor.onHasValue = function (name) { return self.hasProcessedTextValue(name); }; + _this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + _this.pages.push = function (value) { + value.data = self; + return Array.prototype.push.call(this, value); + }; + _this.triggers.push = function (value) { + value.setOwner(self); + return Array.prototype.push.call(this, value); + }; + _this.updateProcessedTextValues(); + _this.onBeforeCreating(); + if (jsonObj) { + _this.setJsonObject(jsonObj); + if (_this.surveyId) { + _this.loadSurveyFromService(_this.surveyId); + } + } + _this.onCreating(); + return _this; + } + SurveyModel.prototype.getType = function () { return "survey"; }; + Object.defineProperty(SurveyModel.prototype, "locale", { + get: function () { return this.localeValue; }, + set: function (value) { + this.localeValue = value; + __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].currentLocale = value; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onLocaleChanged(); + } + }, + enumerable: true, + configurable: true + }); + //ILocalizableOwner + SurveyModel.prototype.getLocale = function () { return this.locale; }; + SurveyModel.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getString(str); }; + Object.defineProperty(SurveyModel.prototype, "emptySurveyText", { + get: function () { return this.getLocString("emptySurvey"); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completedHtml", { + get: function () { return this.locCompletedHtml.text; }, + set: function (value) { this.locCompletedHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompletedHtml", { + get: function () { return this.locCompletedHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pagePrevText", { + get: function () { return this.locPagePrevText.text ? this.locPagePrevText.text : this.getLocString("pagePrevText"); }, + set: function (newValue) { this.locPagePrevText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPagePrevText", { + get: function () { return this.locPagePrevTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pageNextText", { + get: function () { return this.locPageNextText.text ? this.locPageNextText.text : this.getLocString("pageNextText"); }, + set: function (newValue) { this.locPageNextText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPageNextText", { + get: function () { return this.locPageNextTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completeText", { + get: function () { return this.locCompleteText.text ? this.locCompleteText.text : this.getLocString("completeText"); }, + set: function (newValue) { this.locCompleteText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompleteText", { + get: function () { return this.locCompleteTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplate.text; }, + set: function (value) { this.locQuestionTitleTemplate.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locQuestionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplateValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showPageNumbers", { + get: function () { return this.showPageNumbersValue; }, + set: function (value) { + if (value === this.showPageNumbers) + return; + this.showPageNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showQuestionNumbers", { + get: function () { return this.showQuestionNumbersValue; }, + set: function (value) { + if (value === this.showQuestionNumbers) + return; + this.showQuestionNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "processedTitle", { + get: function () { return this.processText(this.title); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleLocation", { + get: function () { return this.questionTitleLocationValue; }, + set: function (value) { + if (value === this.questionTitleLocationValue) + return; + this.questionTitleLocationValue = value; + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "mode", { + get: function () { return this.modeValue; }, + set: function (value) { + if (value == this.mode) + return; + if (value != "edit" && value != "display") + return; + this.modeValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "data", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + result[key] = this.valuesHash[key]; + } + return result; + }, + set: function (data) { + this.valuesHash = {}; + if (data) { + for (var key in data) { + this._setDataValue(data, key); + this.checkTriggers(key, data[key], false); + if (!this.processedTextValues[key.toLowerCase()]) { + this.processedTextValues[key.toLowerCase()] = "value"; + } + } + } + this.notifyAllQuestionsOnValueChanged(); + this.runConditions(); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype._setDataValue = function (data, key) { + this.valuesHash[key] = data[key]; + }; + Object.defineProperty(SurveyModel.prototype, "comments", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + if (key.indexOf(this.commentPrefix) > 0) { + result[key] = this.valuesHash[key]; + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePages", { + get: function () { + if (this.isDesignMode) + return this.pages; + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].isVisible) { + result.push(this.pages[i]); + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEmpty", { + get: function () { return this.pages.length == 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "PageCount", { + get: function () { + return this.pages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePageCount", { + get: function () { + return this.visiblePages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPage", { + get: function () { + var vPages = this.visiblePages; + if (this.currentPageValue != null) { + if (vPages.indexOf(this.currentPageValue) < 0) { + this.currentPage = null; + } + } + if (this.currentPageValue == null && vPages.length > 0) { + this.currentPage = vPages[0]; + } + return this.currentPageValue; + }, + set: function (value) { + var vPages = this.visiblePages; + if (value != null && vPages.indexOf(value) < 0) + return; + if (value == this.currentPageValue) + return; + var oldValue = this.currentPageValue; + this.currentPageValue = value; + this.updateCustomWidgets(value); + this.currentPageChanged(value, oldValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPageNo", { + get: function () { + return this.visiblePages.indexOf(this.currentPage); + }, + set: function (value) { + var vPages = this.visiblePages; + if (value < 0 || value >= this.visiblePages.length) + return; + this.currentPage = this.visiblePages[value]; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.focusFirstQuestion = function () { + if (this.currentPageValue) { + this.currentPageValue.scrollToTop(); + this.currentPageValue.focusFirstQuestion(); + } + }; + Object.defineProperty(SurveyModel.prototype, "state", { + get: function () { + if (this.isLoading) + return "loading"; + if (this.isCompleted) + return "completed"; + return (this.currentPage) ? "running" : "empty"; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.clear = function (clearData, gotoFirstPage) { + if (clearData === void 0) { clearData = true; } + if (gotoFirstPage === void 0) { gotoFirstPage = true; } + if (clearData) { + this.data = null; + this.variablesHash = {}; + } + this.isCompleted = false; + if (gotoFirstPage && this.visiblePageCount > 0) { + this.currentPage = this.visiblePages[0]; + } + }; + SurveyModel.prototype.mergeValues = function (src, dest) { + if (!dest || !src) + return; + for (var key in src) { + var value = src[key]; + if (value && typeof value === 'object') { + if (!dest[key]) + dest[key] = {}; + this.mergeValues(value, dest[key]); + } + else { + dest[key] = value; + } + } + }; + SurveyModel.prototype.updateCustomWidgets = function (page) { + if (!page) + return; + for (var i = 0; i < page.questions.length; i++) { + page.questions[i].customWidget = __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__["a" /* CustomWidgetCollection */].Instance.getCustomWidget(page.questions[i]); + } + }; + SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) { + this.onCurrentPageChanged.fire(this, { 'oldCurrentPage': oldValue, 'newCurrentPage': newValue }); + }; + SurveyModel.prototype.getProgress = function () { + if (this.currentPage == null) + return 0; + var index = this.visiblePages.indexOf(this.currentPage) + 1; + return Math.ceil((index * 100 / this.visiblePageCount)); + }; + Object.defineProperty(SurveyModel.prototype, "isNavigationButtonsShowing", { + get: function () { + if (this.isDesignMode) + return false; + var page = this.currentPage; + if (!page) + return false; + return page.navigationButtonsVisibility == "show" || + (page.navigationButtonsVisibility != "hide" && this.showNavigationButtons); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEditMode", { + get: function () { return this.mode == "edit"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDisplayMode", { + get: function () { return this.mode == "display"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDesignMode", { + get: function () { return this.isDesignModeValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setDesignMode = function (value) { + this.isDesignModeValue = value; + }; + Object.defineProperty(SurveyModel.prototype, "hasCookie", { + get: function () { + if (!this.cookieName) + return false; + var cookies = document.cookie; + return cookies && cookies.indexOf(this.cookieName + "=true") > -1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=true; expires=Fri, 31 Dec 9999 0:0:0 GMT"; + }; + SurveyModel.prototype.deleteCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=;"; + }; + SurveyModel.prototype.nextPage = function () { + if (this.isLastPage) + return false; + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doNextPage(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isCurrentPageHasErrors", { + get: function () { + if (this.currentPage == null) + return true; + return this.currentPage.hasErrors(true, true); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.prevPage = function () { + if (this.isFirstPage) + return false; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index - 1]; + }; + SurveyModel.prototype.completeLastPage = function () { + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doComplete(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isFirstPage", { + get: function () { + if (this.currentPage == null) + return true; + return this.visiblePages.indexOf(this.currentPage) == 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isLastPage", { + get: function () { + if (this.currentPage == null) + return true; + var vPages = this.visiblePages; + return vPages.indexOf(this.currentPage) == vPages.length - 1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.doComplete = function () { + this.clearUnusedValues(); + this.setCookie(); + this.setCompleted(); + this.onComplete.fire(this, null); + if (this.surveyPostId) { + this.sendResult(); + } + }; + Object.defineProperty(SurveyModel.prototype, "isValidatingOnServer", { + get: function () { return this.isValidatingOnServerValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setIsValidatingOnServer = function (val) { + if (val == this.isValidatingOnServer) + return; + this.isValidatingOnServerValue = val; + this.onIsValidatingOnServerChanged(); + }; + SurveyModel.prototype.onIsValidatingOnServerChanged = function () { }; + SurveyModel.prototype.doServerValidation = function () { + if (!this.onServerValidateQuestions) + return false; + var self = this; + var options = { data: {}, errors: {}, survey: this, complete: function () { self.completeServerValidation(options); } }; + for (var i = 0; i < this.currentPage.questions.length; i++) { + var question = this.currentPage.questions[i]; + if (!question.visible) + continue; + var value = this.getValue(question.name); + if (value) + options.data[question.name] = value; + } + this.setIsValidatingOnServer(true); + this.onServerValidateQuestions(this, options); + return true; + }; + SurveyModel.prototype.completeServerValidation = function (options) { + this.setIsValidatingOnServer(false); + if (!options && !options.survey) + return; + var self = options.survey; + var hasErrors = false; + if (options.errors) { + for (var name in options.errors) { + var question = self.getQuestionByName(name); + if (question && question["errors"]) { + hasErrors = true; + question["addError"](new __WEBPACK_IMPORTED_MODULE_8__error__["c" /* CustomError */](options.errors[name])); + } + } + } + if (!hasErrors) { + if (self.isLastPage) + self.doComplete(); + else + self.doNextPage(); + } + }; + SurveyModel.prototype.doNextPage = function () { + this.checkOnPageTriggers(); + if (this.sendResultOnPageNext) { + this.sendResult(this.surveyPostId, this.clientId, true); + } + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index + 1]; + }; + SurveyModel.prototype.setCompleted = function () { + this.isCompleted = true; + }; + Object.defineProperty(SurveyModel.prototype, "processedCompletedHtml", { + get: function () { + if (this.completedHtml) { + return this.processHtml(this.completedHtml); + } + return "

" + this.getLocString("completingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "processedLoadingHtml", { + get: function () { + return "

" + this.getLocString("loadingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "progressText", { + get: function () { + if (this.currentPage == null) + return ""; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage) + 1; + return this.getLocString("progressText")["format"](index, vPages.length); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.afterRenderSurvey = function (htmlElement) { + this.onAfterRenderSurvey.fire(this, { survey: this, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPage = function (htmlElement) { + if (this.onAfterRenderPage.isEmpty) + return; + this.onAfterRenderPage.fire(this, { page: this.currentPage, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) { + this.onAfterRenderQuestion.fire(this, { question: question, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) { + this.onAfterRenderPanel.fire(this, { panel: panel, htmlElement: htmlElement }); + }; + SurveyModel.prototype.uploadFile = function (name, file, storeDataAsText, uploadingCallback) { + var accept = true; + this.onUploadFile.fire(this, { name: name, file: file, accept: accept }); + if (!accept) + return false; + if (!storeDataAsText && this.surveyPostId) { + this.uploadFileCore(name, file, uploadingCallback); + } + return true; + }; + SurveyModel.prototype.uploadFileCore = function (name, file, uploadingCallback) { + var self = this; + if (uploadingCallback) + uploadingCallback("uploading"); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendFile(this.surveyPostId, file, function (success, response) { + if (uploadingCallback) + uploadingCallback(success ? "success" : "error"); + if (success) { + self.setValue(name, response); + } + }); + }; + SurveyModel.prototype.getPage = function (index) { + return this.pages[index]; + }; + SurveyModel.prototype.addPage = function (page) { + if (page == null) + return; + this.pages.push(page); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.addNewPage = function (name) { + var page = this.createNewPage(name); + this.addPage(page); + return page; + }; + SurveyModel.prototype.removePage = function (page) { + var index = this.pages.indexOf(page); + if (index < 0) + return; + this.pages.splice(index, 1); + if (this.currentPageValue == page) { + this.currentPage = this.pages.length > 0 ? this.pages[0] : null; + } + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var questions = this.getAllQuestions(); + if (caseInsensitive) + name = name.toLowerCase(); + for (var i = 0; i < questions.length; i++) { + var questionName = questions[i].name; + if (caseInsensitive) + questionName = questionName.toLowerCase(); + if (questionName == name) + return questions[i]; + } + return null; + }; + SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var question = this.getQuestionByName(names[i], caseInsensitive); + if (question) + result.push(question); + } + return result; + }; + SurveyModel.prototype.getPageByElement = function (element) { + for (var i = 0; i < this.pages.length; i++) { + var page = this.pages[i]; + if (page.containsElement(element)) + return page; + } + return null; + }; + SurveyModel.prototype.getPageByQuestion = function (question) { + return this.getPageByElement(question); + }; + SurveyModel.prototype.getPageByName = function (name) { + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].name == name) + return this.pages[i]; + } + return null; + }; + SurveyModel.prototype.getPagesByNames = function (names) { + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var page = this.getPageByName(names[i]); + if (page) + result.push(page); + } + return result; + }; + SurveyModel.prototype.getAllQuestions = function (visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].addQuestionsToList(result, visibleOnly); + } + return result; + }; + SurveyModel.prototype.createNewPage = function (name) { return new __WEBPACK_IMPORTED_MODULE_3__page__["a" /* PageModel */](name); }; + SurveyModel.prototype.notifyQuestionOnValueChanged = function (name, newValue) { + var questions = this.getAllQuestions(); + var question = null; + for (var i = 0; i < questions.length; i++) { + if (questions[i].name != name) + continue; + question = questions[i]; + this.doSurveyValueChanged(question, newValue); + } + this.onValueChanged.fire(this, { 'name': name, 'question': question, 'value': newValue }); + }; + SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.doSurveyValueChanged(questions[i], this.getValue(questions[i].name)); + } + }; + SurveyModel.prototype.doSurveyValueChanged = function (question, newValue) { + question.onSurveyValueChanged(newValue); + }; + SurveyModel.prototype.checkOnPageTriggers = function () { + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + var question = questions[i]; + var value = this.getValue(question.name); + this.checkTriggers(question.name, value, true); + } + }; + SurveyModel.prototype.getCurrentPageQuestions = function () { + var result = []; + var page = this.currentPage; + if (!page) + return result; + for (var i = 0; i < page.questions.length; i++) { + var question = page.questions[i]; + if (!question.visible || !question.name) + continue; + result.push(question); + } + return result; + }; + SurveyModel.prototype.checkTriggers = function (name, newValue, isOnNextPage) { + for (var i = 0; i < this.triggers.length; i++) { + var trigger = this.triggers[i]; + if (trigger.name == name && trigger.isOnNextPage == isOnNextPage) { + trigger.check(newValue); + } + } + }; + SurveyModel.prototype.doElementsOnLoad = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onSurveyLoad(); + } + }; + SurveyModel.prototype.runConditions = function () { + var pages = this.pages; + for (var i = 0; i < pages.length; i++) { + pages[i].runCondition(this.valuesHash); + } + }; + SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) { + if (postId === void 0) { postId = null; } + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + if (!this.isEditMode) + return; + if (isPartialCompleted && this.onPartialSend) { + this.onPartialSend.fire(this, null); + } + if (!postId && this.surveyPostId) { + postId = this.surveyPostId; + } + if (!postId) + return; + if (clientId) { + this.clientId = clientId; + } + if (isPartialCompleted && !this.clientId) + return; + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendResult(postId, this.data, function (success, response) { + self.onSendResult.fire(self, { success: success, response: response }); + }, this.clientId, isPartialCompleted); + }; + SurveyModel.prototype.getResult = function (resultId, name) { + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().getResult(resultId, name, function (success, data, dataList, response) { + self.onGetResult.fire(self, { success: success, data: data, dataList: dataList, response: response }); + }); + }; + SurveyModel.prototype.loadSurveyFromService = function (surveyId) { + if (surveyId === void 0) { surveyId = null; } + if (surveyId) { + this.surveyId = surveyId; + } + var self = this; + this.isLoading = true; + this.onLoadingSurveyFromService(); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().loadSurvey(this.surveyId, function (success, result, response) { + self.isLoading = false; + if (success && result) { + self.setJsonObject(result); + self.notifyAllQuestionsOnValueChanged(); + self.onLoadSurveyFromService(); + } + }); + }; + SurveyModel.prototype.onLoadingSurveyFromService = function () { + }; + SurveyModel.prototype.onLoadSurveyFromService = function () { + }; + SurveyModel.prototype.checkPageVisibility = function (question, oldQuestionVisible) { + var page = this.getPageByQuestion(question); + if (!page) + return; + var newValue = page.isVisible; + if (newValue != page.getIsPageVisible(question) || oldQuestionVisible) { + this.pageVisibilityChanged(page, newValue); + } + }; + SurveyModel.prototype.updateVisibleIndexes = function () { + this.updatePageVisibleIndexes(this.showPageNumbers); + if (this.showQuestionNumbers == "onPage") { + var visPages = this.visiblePages; + for (var i = 0; i < visPages.length; i++) { + this.updateQuestionVisibleIndexes(visPages[i].questions, true); + } + } + else { + this.updateQuestionVisibleIndexes(this.getAllQuestions(false), this.showQuestionNumbers == "on"); + } + }; + SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) { + var index = 0; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].visibleIndex = this.pages[i].visible ? (index++) : -1; + this.pages[i].num = showIndex && this.pages[i].visible ? this.pages[i].visibleIndex + 1 : -1; + } + }; + SurveyModel.prototype.updateQuestionVisibleIndexes = function (questions, showIndex) { + var index = 0; + for (var i = 0; i < questions.length; i++) { + questions[i].setVisibleIndex(showIndex && questions[i].visible && questions[i].hasTitle ? (index++) : -1); + } + }; + Object.defineProperty(SurveyModel.prototype, "isLoadingFromJson", { + get: function () { return this.isLoadingFromJsonValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setJsonObject = function (jsonObj) { + if (!jsonObj) + return; + this.jsonErrors = null; + this.isLoadingFromJsonValue = true; + var jsonConverter = new __WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */](); + jsonConverter.toObject(jsonObj, this); + if (jsonConverter.errors.length > 0) { + this.jsonErrors = jsonConverter.errors; + } + this.isLoadingFromJsonValue = false; + this.updateProcessedTextValues(); + if (this.hasCookie) { + this.doComplete(); + } + this.doElementsOnLoad(); + this.runConditions(); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.onBeforeCreating = function () { }; + SurveyModel.prototype.onCreating = function () { }; + SurveyModel.prototype.updateProcessedTextValues = function () { + this.processedTextValues = {}; + var self = this; + this.processedTextValues["pageno"] = function (name) { return self.currentPage != null ? self.visiblePages.indexOf(self.currentPage) + 1 : 0; }; + this.processedTextValues["pagecount"] = function (name) { return self.visiblePageCount; }; + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.addQuestionToProcessedTextValues(questions[i]); + } + }; + SurveyModel.prototype.addQuestionToProcessedTextValues = function (question) { + this.processedTextValues[question.name.toLowerCase()] = "question"; + }; + SurveyModel.prototype.hasProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + return this.processedTextValues[firstName.toLowerCase()]; + }; + SurveyModel.prototype.getProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + var val = this.processedTextValues[firstName.toLowerCase()]; + if (!val) + return null; + if (val == "variable") { + return this.getVariable(name.toLowerCase()); + } + if (val == "question") { + var question = this.getQuestionByName(firstName, true); + if (!question) + return null; + name = question.name + name.substr(firstName.length); + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + if (val == "value") { + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + return val(name); + }; + SurveyModel.prototype.clearUnusedValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + questions[i].clearUnusedValues(); + } + if (this.clearInvisibleValues) { + this.clearInvisibleQuestionValues(); + } + }; + SurveyModel.prototype.clearInvisibleQuestionValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].visible) + continue; + this.clearValue(questions[i].name); + } + }; + SurveyModel.prototype.getVariable = function (name) { + if (!name) + return null; + return this.variablesHash[name]; + }; + SurveyModel.prototype.setVariable = function (name, newValue) { + if (!name) + return; + this.variablesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "variable"; + }; + //ISurvey data + SurveyModel.prototype.getUnbindValue = function (value) { + if (value && value instanceof Object) { + //do not return the same object instance!!! + return JSON.parse(JSON.stringify(value)); + } + return value; + }; + SurveyModel.prototype.getValue = function (name) { + if (!name || name.length == 0) + return null; + var value = this.valuesHash[name]; + return this.getUnbindValue(value); + }; + SurveyModel.prototype.setValue = function (name, newValue) { + if (this.isValueEqual(name, newValue)) + return; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + newValue = this.getUnbindValue(newValue); + this.valuesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "value"; + } + this.notifyQuestionOnValueChanged(name, newValue); + this.checkTriggers(name, newValue, false); + this.runConditions(); + this.tryGoNextPageAutomatic(name); + }; + SurveyModel.prototype.isValueEqual = function (name, newValue) { + if (newValue == "") + newValue = null; + var oldValue = this.getValue(name); + if (newValue === null || oldValue === null) + return newValue === oldValue; + return this.isTwoValueEquals(newValue, oldValue); + }; + SurveyModel.prototype.tryGoNextPageAutomatic = function (name) { + if (!this.goNextPageAutomatic || !this.currentPage) + return; + var question = this.getQuestionByName(name); + if (question && (!question.visible || !question.supportGoNextPageAutomatic())) + return; + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].hasInput && !this.getValue(questions[i].name)) + return; + } + if (!this.currentPage.hasErrors(true, false)) { + if (!this.isLastPage) { + this.nextPage(); + } + else { + this.doComplete(); + } + } + }; + SurveyModel.prototype.getComment = function (name) { + var result = this.data[name + this.commentPrefix]; + if (result == null) + result = ""; + return result; + }; + SurveyModel.prototype.setComment = function (name, newValue) { + name = name + this.commentPrefix; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + this.valuesHash[name] = newValue; + this.tryGoNextPageAutomatic(name); + } + }; + SurveyModel.prototype.clearValue = function (name) { + this.setValue(name, null); + this.setComment(name, null); + }; + SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) { + this.updateVisibleIndexes(); + this.onVisibleChanged.fire(this, { 'question': question, 'name': question.name, 'visible': newValue }); + this.checkPageVisibility(question, !newValue); + }; + SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) { + this.updateVisibleIndexes(); + this.onPageVisibleChanged.fire(this, { 'page': page, 'visible': newValue }); + }; + SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.addQuestionToProcessedTextValues(question); + this.onQuestionAdded.fire(this, { 'question': question, 'name': question.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.questionRemoved = function (question) { + this.updateVisibleIndexes(); + this.onQuestionRemoved.fire(this, { 'question': question, 'name': question.name }); + }; + SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.onPanelAdded.fire(this, { 'panel': panel, 'name': panel.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.panelRemoved = function (panel) { + this.updateVisibleIndexes(); + this.onPanelRemoved.fire(this, { 'panel': panel, 'name': panel.name }); + }; + SurveyModel.prototype.validateQuestion = function (name) { + if (this.onValidateQuestion.isEmpty) + return null; + var options = { name: name, value: this.getValue(name), error: null }; + this.onValidateQuestion.fire(this, options); + return options.error ? new __WEBPACK_IMPORTED_MODULE_8__error__["c" /* CustomError */](options.error) : null; + }; + SurveyModel.prototype.processHtml = function (html) { + var options = { html: html }; + this.onProcessHtml.fire(this, options); + return this.processText(options.html); + }; + SurveyModel.prototype.processText = function (text) { + return this.textPreProcessor.process(text); + }; + //ISurveyTriggerOwner + SurveyModel.prototype.getObjects = function (pages, questions) { + var result = []; + Array.prototype.push.apply(result, this.getPagesByNames(pages)); + Array.prototype.push.apply(result, this.getQuestionsByNames(questions)); + return result; + }; + SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) { + if (!name) + return; + if (isVariable) { + this.setVariable(name, value); + } + else { + this.setValue(name, value); + } + }; + return SurveyModel; +}(__WEBPACK_IMPORTED_MODULE_2__base__["b" /* Base */])); + +//Make localizable: completedHtml, pagePrevText, pageNextText, completeText +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("survey", [{ name: "locale", choices: function () { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getLocales(); } }, + { name: "title", serializationProperty: "locTitle" }, { name: "focusFirstQuestionAutomatic:boolean", default: true }, + { name: "completedHtml:html", serializationProperty: "locCompletedHtml" }, { name: "pages", className: "page", visible: false }, + { name: "questions", baseClassName: "question", visible: false, onGetValue: function (obj) { return null; }, onSetValue: function (obj, value, jsonConverter) { var page = obj.addNewPage(""); jsonConverter.toObject({ questions: value }, page); } }, + { name: "triggers:triggers", baseClassName: "surveytrigger", classNamePart: "trigger" }, + "surveyId", "surveyPostId", "cookieName", "sendResultOnPageNext:boolean", + { name: "showNavigationButtons:boolean", default: true }, { name: "showTitle:boolean", default: true }, + { name: "showPageTitles:boolean", default: true }, { name: "showCompletedPage:boolean", default: true }, + "showPageNumbers:boolean", { name: "showQuestionNumbers", default: "on", choices: ["on", "onPage", "off"] }, + { name: "questionTitleLocation", default: "top", choices: ["top", "bottom"] }, + { name: "showProgressBar", default: "off", choices: ["off", "top", "bottom"] }, + { name: "mode", default: "edit", choices: ["edit", "display"] }, + { name: "storeOthersAsComment:boolean", default: true }, "goNextPageAutomatic:boolean", "clearInvisibleValues:boolean", + { name: "pagePrevText", serializationProperty: "locPagePrevText" }, + { name: "pageNextText", serializationProperty: "locPageNextText" }, + { name: "completeText", serializationProperty: "locCompleteText" }, + { name: "requiredText", default: "*" }, "questionStartIndex", { name: "questionTitleTemplate", serializationProperty: "locQuestionTitleTemplate" }]); + + +/***/ }), +/* 24 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TextPreProcessorItem */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TextPreProcessor; }); +var TextPreProcessorItem = (function () { + function TextPreProcessorItem() { + } + return TextPreProcessorItem; +}()); + +var TextPreProcessor = (function () { + function TextPreProcessor() { + } + TextPreProcessor.prototype.process = function (text) { + if (!text) + return text; + if (!this.onProcess) + return text; + var items = this.getItems(text); + for (var i = items.length - 1; i >= 0; i--) { + var item = items[i]; + var name = this.getName(text.substring(item.start + 1, item.end)); + if (!this.canProcessName(name)) + continue; + if (this.onHasValue && !this.onHasValue(name)) + continue; + var value = this.onProcess(name); + if (value == null) + value = ""; + text = text.substr(0, item.start) + value + text.substr(item.end + 1); + } + return text; + }; + TextPreProcessor.prototype.getItems = function (text) { + var items = []; + var length = text.length; + var start = -1; + var ch = ''; + for (var i = 0; i < length; i++) { + ch = text[i]; + if (ch == '{') + start = i; + if (ch == '}') { + if (start > -1) { + var item = new TextPreProcessorItem(); + item.start = start; + item.end = i; + items.push(item); + } + start = -1; + } + } + return items; + }; + TextPreProcessor.prototype.getName = function (name) { + if (!name) + return; + return name.trim(); + }; + TextPreProcessor.prototype.canProcessName = function (name) { + if (!name) + return false; + for (var i = 0; i < name.length; i++) { + var ch = name[i]; + //TODO + if (ch == ' ' || ch == '-' || ch == '&') + return false; + } + return true; + }; + return TextPreProcessor; +}()); + + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return ValidatorResult; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return SurveyValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ValidatorRunner; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return NumericValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return TextValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AnswerCountValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return RegexValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return EmailValidator; }); + + + + + +var ValidatorResult = (function () { + function ValidatorResult(value, error) { + if (error === void 0) { error = null; } + this.value = value; + this.error = error; + } + return ValidatorResult; +}()); + +var SurveyValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyValidator, _super); + function SurveyValidator() { + var _this = _super.call(this) || this; + _this.text = ""; + return _this; + } + SurveyValidator.prototype.getErrorText = function (name) { + if (this.text) + return this.text; + return this.getDefaultErrorText(name); + }; + SurveyValidator.prototype.getDefaultErrorText = function (name) { + return ""; + }; + SurveyValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + return null; + }; + return SurveyValidator; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var ValidatorRunner = (function () { + function ValidatorRunner() { + } + ValidatorRunner.prototype.run = function (owner) { + for (var i = 0; i < owner.validators.length; i++) { + var validatorResult = owner.validators[i].validate(owner.value, owner.getValidatorTitle()); + if (validatorResult != null) { + if (validatorResult.error) + return validatorResult.error; + if (validatorResult.value) { + owner.value = validatorResult.value; + } + } + } + return null; + }; + return ValidatorRunner; +}()); + +var NumericValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](NumericValidator, _super); + function NumericValidator(minValue, maxValue) { + if (minValue === void 0) { minValue = null; } + if (maxValue === void 0) { maxValue = null; } + var _this = _super.call(this) || this; + _this.minValue = minValue; + _this.maxValue = maxValue; + return _this; + } + NumericValidator.prototype.getType = function () { return "numericvalidator"; }; + NumericValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value || !this.isNumber(value)) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["b" /* RequreNumericError */]()); + } + var result = new ValidatorResult(parseFloat(value)); + if (this.minValue && this.minValue > result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name)); + return result; + } + if (this.maxValue && this.maxValue < result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name)); + return result; + } + return (typeof value === 'number') ? null : result; + }; + NumericValidator.prototype.getDefaultErrorText = function (name) { + var vName = name ? name : "value"; + if (this.minValue && this.maxValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMinMax")["format"](vName, this.minValue, this.maxValue); + } + else { + if (this.minValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMin")["format"](vName, this.minValue); + } + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMax")["format"](vName, this.maxValue); + } + }; + NumericValidator.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return NumericValidator; +}(SurveyValidator)); + +var TextValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](TextValidator, _super); + function TextValidator(minLength, maxLength) { + if (minLength === void 0) { minLength = 0; } + if (maxLength === void 0) { maxLength = 0; } + var _this = _super.call(this) || this; + _this.minLength = minLength; + _this.maxLength = maxLength; + return _this; + } + TextValidator.prototype.getType = function () { return "textvalidator"; }; + TextValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (this.minLength > 0 && value.length < this.minLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + } + if (this.maxLength > 0 && value.length > this.maxLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + } + return null; + }; + TextValidator.prototype.getDefaultErrorText = function (name) { + if (this.minLength > 0 && this.maxLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinMaxLength")["format"](this.minLength, this.maxLength); + if (this.minLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinLength")["format"](this.minLength); + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMaxLength")["format"](this.maxLength); + }; + return TextValidator; +}(SurveyValidator)); + +var AnswerCountValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerCountValidator, _super); + function AnswerCountValidator(minCount, maxCount) { + if (minCount === void 0) { minCount = null; } + if (maxCount === void 0) { maxCount = null; } + var _this = _super.call(this) || this; + _this.minCount = minCount; + _this.maxCount = maxCount; + return _this; + } + AnswerCountValidator.prototype.getType = function () { return "answercountvalidator"; }; + AnswerCountValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (value == null || value.constructor != Array) + return null; + var count = value.length; + if (this.minCount && count < this.minCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("minSelectError")["format"](this.minCount)))); + } + if (this.maxCount && count > this.maxCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("maxSelectError")["format"](this.maxCount)))); + } + return null; + }; + AnswerCountValidator.prototype.getDefaultErrorText = function (name) { + return name; + }; + return AnswerCountValidator; +}(SurveyValidator)); + +var RegexValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RegexValidator, _super); + function RegexValidator(regex) { + if (regex === void 0) { regex = null; } + var _this = _super.call(this) || this; + _this.regex = regex; + return _this; + } + RegexValidator.prototype.getType = function () { return "regexvalidator"; }; + RegexValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!this.regex || !value) + return null; + var re = new RegExp(this.regex); + if (re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + }; + return RegexValidator; +}(SurveyValidator)); + +var EmailValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](EmailValidator, _super); + function EmailValidator() { + var _this = _super.call(this) || this; + _this.re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; + return _this; + } + EmailValidator.prototype.getType = function () { return "emailvalidator"; }; + EmailValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value) + return null; + if (this.re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* CustomError */](this.getErrorText(name))); + }; + EmailValidator.prototype.getDefaultErrorText = function (name) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("invalidEmail"); + }; + return EmailValidator; +}(SurveyValidator)); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("surveyvalidator", ["text"]); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("numericvalidator", ["minValue:number", "maxValue:number"], function () { return new NumericValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("textvalidator", ["minLength:number", "maxLength:number"], function () { return new TextValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("answercountvalidator", ["minCount:number", "maxCount:number"], function () { return new AnswerCountValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("regexvalidator", ["regex"], function () { return new RegexValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("emailvalidator", [], function () { return new EmailValidator(); }, "surveyvalidator"); + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactpage__ = __webpack_require__(29); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactSurveyNavigation__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__reactquestionfactory__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__reactSurveyProgress__ = __webpack_require__(28); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__base__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Survey; }); + + + + + + + + + +var Survey = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Survey, _super); + function Survey(props) { + var _this = _super.call(this, props) || this; + _this.isCurrentPageChanged = false; + _this.updateSurvey(props); + return _this; + } + Object.defineProperty(Survey, "cssType", { + get: function () { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["b" /* surveyCss */].currentType; }, + set: function (value) { __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["b" /* surveyCss */].currentType = value; }, + enumerable: true, + configurable: true + }); + Survey.prototype.componentWillReceiveProps = function (nextProps) { + this.updateSurvey(nextProps); + }; + Survey.prototype.componentDidUpdate = function () { + if (this.isCurrentPageChanged) { + this.isCurrentPageChanged = false; + if (this.survey.focusFirstQuestionAutomatic) { + this.survey.focusFirstQuestion(); + } + } + }; + Survey.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.doAfterRenderSurvey(el); + }; + Survey.prototype.render = function () { + if (this.survey.state == "completed") + return this.renderCompleted(); + if (this.survey.state == "loading") + return this.renderLoading(); + return this.renderSurvey(); + }; + Object.defineProperty(Survey.prototype, "css", { + get: function () { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssstandard__["b" /* surveyCss */].getCss(); }, + set: function (value) { + this.survey.mergeCss(value, this.css); + }, + enumerable: true, + configurable: true + }); + Survey.prototype.renderCompleted = function () { + if (!this.survey.showCompletedPage) + return null; + var htmlValue = { __html: this.survey.processedCompletedHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + Survey.prototype.renderLoading = function () { + var htmlValue = { __html: this.survey.processedLoadingHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + Survey.prototype.renderSurvey = function () { + var title = this.survey.title && this.survey.showTitle ? this.renderTitle() : null; + var currentPage = this.survey.currentPage ? this.renderPage() : null; + var topProgress = this.survey.showProgressBar == "top" ? this.renderProgress(true) : null; + var bottomProgress = this.survey.showProgressBar == "bottom" ? this.renderProgress(false) : null; + var buttons = (currentPage && this.survey.showNavigationButtons) ? this.renderNavigation() : null; + if (!currentPage) { + currentPage = this.renderEmptySurvey(); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root", className: this.css.root }, + title, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: __WEBPACK_IMPORTED_MODULE_8__base__["e" /* SurveyPageId */], className: this.css.body }, + topProgress, + currentPage, + bottomProgress), + buttons)); + }; + Survey.prototype.renderTitle = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.header }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h3", null, this.survey.processedTitle)); + }; + Survey.prototype.renderPage = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactpage__["a" /* SurveyPage */], { survey: this.survey, page: this.survey.currentPage, css: this.css, creator: this }); + }; + Survey.prototype.renderProgress = function (isTop) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_7__reactSurveyProgress__["a" /* SurveyProgress */], { survey: this.survey, css: this.css, isTop: isTop }); + }; + Survey.prototype.renderNavigation = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_4__reactSurveyNavigation__["a" /* SurveyNavigation */], { survey: this.survey, css: this.css }); + }; + Survey.prototype.renderEmptySurvey = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.survey.emptySurveyText)); + }; + Survey.prototype.updateSurvey = function (newProps) { + if (newProps) { + if (newProps.model) { + this.survey = newProps.model; + } + else { + if (newProps.json) { + this.survey = new __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__["a" /* ReactSurveyModel */](newProps.json); + } + } + } + else { + this.survey = new __WEBPACK_IMPORTED_MODULE_2__reactsurveymodel__["a" /* ReactSurveyModel */](); + } + if (newProps) { + if (newProps.clientId) + this.survey.clientId = newProps.clientId; + if (newProps.data) + this.survey.data = newProps.data; + if (newProps.css) + this.survey.mergeCss(newProps.css, this.css); + } + //set the first page + var dummy = this.survey.currentPage; + this.state = { pageIndexChange: 0, isCompleted: false, modelChanged: 0 }; + this.setSurveyEvents(newProps); + }; + Survey.prototype.setSurveyEvents = function (newProps) { + var self = this; + this.survey.renderCallback = function () { + self.state.modelChanged = self.state.modelChanged + 1; + self.setState(self.state); + }; + this.survey.onComplete.add(function (sender) { self.state.isCompleted = true; self.setState(self.state); }); + this.survey.onPartialSend.add(function (sender) { self.setState(self.state); }); + this.survey.onCurrentPageChanged.add(function (sender, options) { + self.isCurrentPageChanged = true; + self.state.pageIndexChange = self.state.pageIndexChange + 1; + self.setState(self.state); + if (newProps && newProps.onCurrentPageChanged) + newProps.onCurrentPageChanged(sender, options); + }); + this.survey.onVisibleChanged.add(function (sender, options) { + if (options.question && options.question.react) { + var state = options.question.react.state; + state.visible = options.question.visible; + options.question.react.setState(state); + } + }); + this.survey.onValueChanged.add(function (sender, options) { + if (options.question && options.question.react) { + var state = options.question.react.state; + state.value = options.value; + options.question.react.setState(state); + } + }); + if (!newProps) + return; + this.survey.onValueChanged.add(function (sender, options) { + if (newProps.data) + newProps.data[options.name] = options.value; + if (newProps.onValueChanged) + newProps.onValueChanged(sender, options); + }); + if (newProps.onComplete) { + this.survey.onComplete.add(function (sender) { newProps.onComplete(sender); }); + } + if (newProps.onPartialSend) { + this.survey.onPartialSend.add(function (sender) { newProps.onPartialSend(sender); }); + } + this.survey.onPageVisibleChanged.add(function (sender, options) { if (newProps.onPageVisibleChanged) + newProps.onPageVisibleChanged(sender, options); }); + if (newProps.onServerValidateQuestions) { + this.survey.onServerValidateQuestions = newProps.onServerValidateQuestions; + } + if (newProps.onQuestionAdded) { + this.survey.onQuestionAdded.add(function (sender, options) { newProps.onQuestionAdded(sender, options); }); + } + if (newProps.onQuestionRemoved) { + this.survey.onQuestionRemoved.add(function (sender, options) { newProps.onQuestionRemoved(sender, options); }); + } + if (newProps.onValidateQuestion) { + this.survey.onValidateQuestion.add(function (sender, options) { newProps.onValidateQuestion(sender, options); }); + } + if (newProps.onSendResult) { + this.survey.onSendResult.add(function (sender, options) { newProps.onSendResult(sender, options); }); + } + if (newProps.onGetResult) { + this.survey.onGetResult.add(function (sender, options) { newProps.onGetResult(sender, options); }); + } + if (newProps.onProcessHtml) { + this.survey.onProcessHtml.add(function (sender, options) { newProps.onProcessHtml(sender, options); }); + } + if (newProps.onAfterRenderSurvey) { + this.survey.onAfterRenderSurvey.add(function (sender, options) { newProps.onAfterRenderSurvey(sender, options); }); + } + if (newProps.onAfterRenderPage) { + this.survey.onAfterRenderPage.add(function (sender, options) { newProps.onAfterRenderPage(sender, options); }); + } + if (newProps.onAfterRenderQuestion) { + this.survey.onAfterRenderQuestion.add(function (sender, options) { newProps.onAfterRenderQuestion(sender, options); }); + } + }; + //ISurveyCreator + Survey.prototype.createQuestionElement = function (question) { + var questionCss = this.css[question.getType()]; + return __WEBPACK_IMPORTED_MODULE_5__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.createQuestion(question.getType(), { + question: question, css: questionCss, rootCss: this.css, isDisplayMode: question.isReadOnly, creator: this + }); + }; + Survey.prototype.renderError = function (key, errorText) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { key: key, className: this.css.error.item }, errorText); + }; + Survey.prototype.questionTitleLocation = function () { return this.survey.questionTitleLocation; }; + return Survey; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__ = __webpack_require__(18); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNavigation; }); + + + +var SurveyNavigation = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyNavigation, _super); + function SurveyNavigation(props) { + var _this = _super.call(this, props) || this; + _this.handlePrevClick = _this.handlePrevClick.bind(_this); + _this.handleNextClick = _this.handleNextClick.bind(_this); + _this.handleCompleteClick = _this.handleCompleteClick.bind(_this); + return _this; + } + SurveyNavigation.prototype.handlePrevClick = function (event) { + this.survey.prevPage(); + }; + SurveyNavigation.prototype.handleNextClick = function (event) { + this.survey.nextPage(); + }; + SurveyNavigation.prototype.handleCompleteClick = function (event) { + this.survey.completeLastPage(); + }; + SurveyNavigation.prototype.render = function () { + if (!this.survey || !this.survey.isNavigationButtonsShowing) + return null; + var prevButton = !this.survey.isFirstPage ? this.renderButton(this.handlePrevClick, this.survey.pagePrevText, this.css.navigation.prev) : null; + var nextButton = !this.survey.isLastPage ? this.renderButton(this.handleNextClick, this.survey.pageNextText, this.css.navigation.next) : null; + var completeButton = this.survey.isLastPage && this.survey.isEditMode ? this.renderButton(this.handleCompleteClick, this.survey.completeText, this.css.navigation.complete) : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.footer }, + prevButton, + nextButton, + completeButton)); + }; + SurveyNavigation.prototype.renderButton = function (click, text, btnClassName) { + var style = { marginRight: "5px" }; + var className = this.css.navigationButton + (btnClassName ? ' ' + btnClassName : ""); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: className, style: style, type: "button", onClick: click, value: text }); + }; + return SurveyNavigation; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__["a" /* SurveyNavigationBase */])); + + + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__ = __webpack_require__(18); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyProgress; }); + + + +var SurveyProgress = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyProgress, _super); + function SurveyProgress(props) { + var _this = _super.call(this, props) || this; + _this.isTop = props.isTop; + return _this; + } + SurveyProgress.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.isTop = nextProps.isTop; + }; + Object.defineProperty(SurveyProgress.prototype, "progress", { + get: function () { return this.survey.getProgress(); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyProgress.prototype, "progressText", { + get: function () { return this.survey.progressText; }, + enumerable: true, + configurable: true + }); + SurveyProgress.prototype.render = function () { + var style = this.isTop ? { width: "60%" } : { width: "60%", marginTop: "10px" }; + var progressStyle = { width: this.progress + "%" }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.progress, style: style }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: progressStyle, className: this.css.progressBar, role: "progressbar", "aria-valuemin": "0", "aria-valuemax": "100" }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.progressText)))); + }; + return SurveyProgress; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurveyNavigationBase__["a" /* SurveyNavigationBase */])); + + + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestion__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPage; }); +/* unused harmony export SurveyPanel */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyRow; }); + + + +var SurveyPage = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyPage, _super); + function SurveyPage(props) { + var _this = _super.call(this, props) || this; + _this.page = props.page; + _this.survey = props.survey; + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyPage.prototype.componentWillReceiveProps = function (nextProps) { + this.page = nextProps.page; + this.survey = nextProps.survey; + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyPage.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.afterRenderPage(el); + }; + SurveyPage.prototype.render = function () { + if (this.page == null || this.survey == null || this.creator == null) + return null; + var title = this.renderTitle(); + var rows = []; + var questionRows = this.page.rows; + for (var i = 0; i < questionRows.length; i++) { + rows.push(this.createRow(questionRows[i], i)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root" }, + title, + rows)); + }; + SurveyPage.prototype.createRow = function (row, index) { + var rowName = "row" + (index + 1); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyRow, { key: rowName, row: row, survey: this.survey, creator: this.creator, css: this.css }); + }; + SurveyPage.prototype.renderTitle = function () { + if (!this.page.title || !this.survey.showPageTitles) + return null; + var text = this.page.processedTitle; + if (this.page.num > 0) { + text = this.page.num + ". " + text; + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h4", { className: this.css.pageTitle }, text)); + }; + return SurveyPage; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyPanel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyPanel, _super); + function SurveyPanel(props) { + var _this = _super.call(this, props) || this; + _this.panel = props.panel; + _this.survey = props.survey; + _this.creator = props.creator; + _this.css = props.css; + return _this; + } + SurveyPanel.prototype.componentWillReceiveProps = function (nextProps) { + this.panel = nextProps.panel; + this.survey = nextProps.survey; + this.creator = nextProps.creator; + this.css = nextProps.css; + }; + SurveyPanel.prototype.componentDidMount = function () { + var el = this.refs["root"]; + if (el && this.survey) + this.survey.afterRenderPage(el); + }; + SurveyPanel.prototype.render = function () { + if (this.panel == null || this.survey == null || this.creator == null) + return null; + var title = this.renderTitle(); + var rows = []; + var questionRows = this.panel.rows; + for (var i = 0; i < questionRows.length; i++) { + rows.push(this.createRow(questionRows[i], i)); + } + var style = { "marginLeft": this.panel.innerIndent * this.css.question.indent + 'px' }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { ref: "root" }, + title, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: style }, rows))); + }; + SurveyPanel.prototype.createRow = function (row, index) { + var rowName = "row" + (index + 1); + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyRow, { key: rowName, row: row, survey: this.survey, creator: this.creator, css: this.css }); + }; + SurveyPanel.prototype.renderTitle = function () { + if (!this.panel.title) + return null; + var text = this.panel.processedTitle; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("h4", { className: this.css.pageTitle }, text)); + }; + return SurveyPanel; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + +var SurveyRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyRow, _super); + function SurveyRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyRow.prototype.componentWillReceiveProps = function (nextProps) { + this.setProperties(nextProps); + }; + SurveyRow.prototype.setProperties = function (props) { + this.row = props.row; + if (this.row) { + var self = this; + this.row.visibilityChangedCallback = function () { self.setState({ visible: self.row.visible }); }; + } + this.survey = props.survey; + this.creator = props.creator; + this.css = props.css; + }; + SurveyRow.prototype.render = function () { + if (this.row == null || this.survey == null || this.creator == null) + return null; + var questions = null; + if (this.row.visible) { + questions = []; + for (var i = 0; i < this.row.elements.length; i++) { + var question = this.row.elements[i]; + questions.push(this.createQuestion(question)); + } + } + var style = this.row.visible ? {} : { display: "none" }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.row, style: style }, questions)); + }; + SurveyRow.prototype.createQuestion = function (question) { + if (question.isPanel) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyPanel, { key: question.name, panel: question, creator: this.creator, survey: this.survey, css: this.css }); + } + else { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_2__reactquestion__["a" /* SurveyQuestion */], { key: question.name, question: question, creator: this.creator, css: this.css }); + } + }; + return SurveyRow; +}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"])); + + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditions__ = __webpack_require__(16); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionsParser; }); + +var ConditionsParser = (function () { + function ConditionsParser() { + } + ConditionsParser.prototype.parse = function (text, root) { + this.text = text; + this.root = root; + this.root.clear(); + this.at = 0; + this.length = this.text.length; + var res = this.parseText(); + return res; + }; + ConditionsParser.prototype.toString = function (root) { + this.root = root; + return this.nodeToString(root); + }; + ConditionsParser.prototype.toStringCore = function (value) { + if (!value) + return ""; + if (value["children"]) + return this.nodeToString(value); + if (value["left"]) + return this.conditionToString(value); + return ""; + }; + ConditionsParser.prototype.nodeToString = function (node) { + if (node.isEmpty) + return ""; + var res = ""; + for (var i = 0; i < node.children.length; i++) { + var nodeText = this.toStringCore(node.children[i]); + if (nodeText) { + if (res) + res += ' ' + node.connective + ' '; + res += nodeText; + } + } + if (node != this.root && node.children.length > 1) { + res = '(' + res + ')'; + } + return res; + }; + ConditionsParser.prototype.conditionToString = function (condition) { + if (!condition.right || !condition.operator) + return ""; + var left = condition.left; + if (left && !this.isNumeric(left)) + left = "'" + left + "'"; + var res = left + ' ' + this.operationToString(condition.operator); + if (this.isNoRightOperation(condition.operator)) + return res; + var right = condition.right; + if (right && !this.isNumeric(right)) + right = "'" + right + "'"; + return res + ' ' + right; + }; + ConditionsParser.prototype.operationToString = function (op) { + if (op == "equal") + return "="; + if (op == "notequal") + return "!="; + if (op == "greater") + return ">"; + if (op == "less") + return "<"; + if (op == "greaterorequal") + return ">="; + if (op == "lessorequal") + return "<="; + return op; + }; + ConditionsParser.prototype.isNumeric = function (value) { + var val = parseFloat(value); + if (isNaN(val)) + return false; + return isFinite(val); + }; + ConditionsParser.prototype.parseText = function () { + this.node = this.root; + this.expressionNodes = []; + this.expressionNodes.push(this.node); + var res = this.readConditions(); + return res && this.at >= this.length; + }; + ConditionsParser.prototype.readConditions = function () { + var res = this.readCondition(); + if (!res) + return res; + var connective = this.readConnective(); + if (connective) { + this.addConnective(connective); + return this.readConditions(); + } + return true; + }; + ConditionsParser.prototype.readCondition = function () { + var expRes = this.readExpression(); + if (expRes < 0) + return false; + if (expRes == 1) + return true; + var left = this.readString(); + if (!left) + return false; + var op = this.readOperator(); + if (!op) + return false; + var c = new __WEBPACK_IMPORTED_MODULE_0__conditions__["b" /* Condition */](); + c.left = left; + c.operator = op; + if (!this.isNoRightOperation(op)) { + var right = this.readString(); + if (!right) + return false; + c.right = right; + } + this.addCondition(c); + return true; + }; + ConditionsParser.prototype.readExpression = function () { + this.skip(); + if (this.at >= this.length || this.ch != '(') + return 0; + this.at++; + this.pushExpression(); + var res = this.readConditions(); + if (res) { + this.skip(); + res = this.ch == ')'; + this.at++; + this.popExpression(); + return 1; + } + return -1; + }; + Object.defineProperty(ConditionsParser.prototype, "ch", { + get: function () { return this.text.charAt(this.at); }, + enumerable: true, + configurable: true + }); + ConditionsParser.prototype.skip = function () { + while (this.at < this.length && this.isSpace(this.ch)) + this.at++; + }; + ConditionsParser.prototype.isSpace = function (c) { + return c == ' ' || c == '\n' || c == '\t' || c == '\r'; + }; + ConditionsParser.prototype.isQuotes = function (c) { + return c == "'" || c == '"'; + }; + ConditionsParser.prototype.isOperatorChar = function (c) { + return c == '>' || c == '<' || c == '=' || c == '!'; + }; + ConditionsParser.prototype.isBrackets = function (c) { + return c == '(' || c == ')'; + }; + ConditionsParser.prototype.readString = function () { + this.skip(); + if (this.at >= this.length) + return null; + var start = this.at; + var hasQuotes = this.isQuotes(this.ch); + if (hasQuotes) + this.at++; + var isFirstOpCh = this.isOperatorChar(this.ch); + while (this.at < this.length) { + if (!hasQuotes && this.isSpace(this.ch)) + break; + if (this.isQuotes(this.ch)) { + if (hasQuotes) + this.at++; + break; + } + if (!hasQuotes) { + if (isFirstOpCh != this.isOperatorChar(this.ch)) + break; + if (this.isBrackets(this.ch)) + break; + } + this.at++; + } + if (this.at <= start) + return null; + var res = this.text.substr(start, this.at - start); + if (res) { + if (res.length > 1 && this.isQuotes(res[0])) { + var len = res.length - 1; + if (this.isQuotes(res[res.length - 1])) + len--; + res = res.substr(1, len); + } + } + return res; + }; + ConditionsParser.prototype.isNoRightOperation = function (op) { + return op == "empty" || op == "notempty"; + }; + ConditionsParser.prototype.readOperator = function () { + var op = this.readString(); + if (!op) + return null; + op = op.toLowerCase(); + if (op == '>') + op = "greater"; + if (op == '<') + op = "less"; + if (op == '>=' || op == '=>') + op = "greaterorequal"; + if (op == '<=' || op == '=<') + op = "lessorequal"; + if (op == '=' || op == '==') + op = "equal"; + if (op == '<>' || op == '!=') + op = "notequal"; + if (op == 'contain') + op = "contains"; + if (op == 'notcontain') + op = "notcontains"; + return op; + }; + ConditionsParser.prototype.readConnective = function () { + var con = this.readString(); + if (!con) + return null; + con = con.toLowerCase(); + if (con == "&" || con == "&&") + con = "and"; + if (con == "|" || con == "||") + con = "or"; + if (con != "and" && con != "or") + con = null; + return con; + }; + ConditionsParser.prototype.pushExpression = function () { + var node = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.expressionNodes.push(node); + this.node = node; + }; + ConditionsParser.prototype.popExpression = function () { + var node = this.expressionNodes.pop(); + this.node = this.expressionNodes[this.expressionNodes.length - 1]; + this.node.children.push(node); + }; + ConditionsParser.prototype.addCondition = function (c) { + this.node.children.push(c); + }; + ConditionsParser.prototype.addConnective = function (con) { + if (this.node.children.length < 2) { + this.node.connective = con; + } + else { + if (this.node.connective != con) { + var oldCon = this.node.connective; + var oldChildren = this.node.children; + this.node.clear(); + this.node.connective = con; + var oldNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + oldNode.connective = oldCon; + oldNode.children = oldChildren; + this.node.children.push(oldNode); + var newNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.node.children.push(newNode); + this.node = newNode; + } + } + }; + return ConditionsParser; +}()); + + + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return dxSurveyService; }); +var dxSurveyService = (function () { + //public static serviceUrl: string = "http://localhost:50488/api/Survey"; + function dxSurveyService() { + } + dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', dxSurveyService.serviceUrl + '/getSurvey?surveyId=' + surveyId); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.onload = function () { + var result = JSON.parse(xhr.response); + onLoad(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) { + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + var xhr = new XMLHttpRequest(); + xhr.open('POST', dxSurveyService.serviceUrl + '/post/'); + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + var data = { postId: postId, surveyResult: JSON.stringify(result) }; + if (clientId) + data['clientId'] = clientId; + if (isPartialCompleted) + data['isPartialCompleted'] = true; + var dataStringify = JSON.stringify(data); + var self = this; + xhr.onload = xhr.onerror = function () { + if (!onSendResult) + return; + onSendResult(xhr.status == 200, xhr.response); + }; + xhr.send(dataStringify); + }; + dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) { + var xhr = new XMLHttpRequest(); + xhr.onload = xhr.onerror = function () { + if (!onSendFile) + return; + onSendFile(xhr.status == 200, JSON.parse(xhr.response)); + }; + xhr.open("POST", dxSurveyService.serviceUrl + '/upload/', true); + var formData = new FormData(); + formData.append("file", file); + formData.append("postId", postId); + xhr.send(formData); + }; + dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&name=' + name; + xhr.open('GET', dxSurveyService.serviceUrl + '/getResult?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + var list = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + list = []; + for (var key in result.QuestionResult) { + var el = { name: key, value: result.QuestionResult[key] }; + list.push(el); + } + } + onGetResult(xhr.status == 200, result, list, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&clientId=' + clientId; + xhr.open('GET', dxSurveyService.serviceUrl + '/isCompleted?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + } + onIsCompleted(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + return dxSurveyService; +}()); + +dxSurveyService.serviceUrl = "https://dxsurveyapi.azurewebsites.net/api/Survey"; + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(33); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PageModel; }); + + + + +var PageModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PageModel, _super); + function PageModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.numValue = -1; + _this.navigationButtonsVisibility = "inherit"; + return _this; + } + PageModel.prototype.getType = function () { return "page"; }; + Object.defineProperty(PageModel.prototype, "num", { + get: function () { return this.numValue; }, + set: function (value) { + if (this.numValue == value) + return; + this.numValue = value; + this.onNumChanged(value); + }, + enumerable: true, + configurable: true + }); + PageModel.prototype.focusFirstQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + var question = this.questions[i]; + if (!question.visible || !question.hasInput) + continue; + this.questions[i].focus(); + break; + } + }; + PageModel.prototype.focusFirstErrorQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + if (!this.questions[i].visible || this.questions[i].currentErrorCount == 0) + continue; + this.questions[i].focus(true); + break; + } + }; + PageModel.prototype.scrollToTop = function () { + __WEBPACK_IMPORTED_MODULE_2__base__["a" /* SurveyElement */].ScrollElementToTop(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyPageId */]); + }; + PageModel.prototype.onNumChanged = function (value) { + }; + PageModel.prototype.onVisibleChanged = function () { + _super.prototype.onVisibleChanged.call(this); + if (this.data != null) { + this.data.pageVisibilityChanged(this, this.visible); + } + }; + return PageModel; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["a" /* PanelModelBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("page", [{ name: "navigationButtonsVisibility", default: "inherit", choices: ["iherit", "show", "hide"] }], function () { return new PageModel(); }, "panel"); + + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return QuestionRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanelModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PanelModel; }); + + + + + + +var QuestionRowModel = (function () { + function QuestionRowModel(panel) { + this.panel = panel; + this.elements = []; + this.visibleValue = panel.data && panel.data.isDesignMode; + } + Object.defineProperty(QuestionRowModel.prototype, "questions", { + //TODO remove after updating react and vue + get: function () { return this.elements; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRowModel.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionRowModel.prototype.updateVisible = function () { + this.visible = this.calcVisible(); + this.setWidth(); + }; + QuestionRowModel.prototype.addElement = function (q) { + this.elements.push(q); + this.updateVisible(); + }; + QuestionRowModel.prototype.onVisibleChanged = function () { + if (this.visibilityChangedCallback) + this.visibilityChangedCallback(); + }; + QuestionRowModel.prototype.setWidth = function () { + var visCount = this.getVisibleCount(); + if (visCount == 0) + return; + var counter = 0; + for (var i = 0; i < this.elements.length; i++) + if (this.elements[i].isVisible) { + var q = this.elements[i]; + q.renderWidth = q.width ? q.width : Math.floor(100 / visCount) + '%'; + q.rightIndent = counter < visCount - 1 ? 1 : 0; + counter++; + } + }; + QuestionRowModel.prototype.getVisibleCount = function () { + var res = 0; + for (var i = 0; i < this.elements.length; i++) { + if (this.elements[i].isVisible) + res++; + } + return res; + }; + QuestionRowModel.prototype.calcVisible = function () { return this.getVisibleCount() > 0; }; + return QuestionRowModel; +}()); + +var PanelModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModelBase, _super); + function PanelModelBase(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this) || this; + _this.name = name; + _this.dataValue = null; + _this.rowValues = null; + _this.conditionRunner = null; + _this.elementsValue = new Array(); + _this.isQuestionsReady = false; + _this.questionsValue = new Array(); + _this.parent = null; + _this.visibleIf = ""; + _this.visibleIndex = -1; + _this.visibleValue = true; + _this.idValue = PanelModelBase.getPanelId(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.elementsValue.push = function (value) { return self.doOnPushElement(this, value); }; + _this.elementsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + return self.doSpliceElements.apply(self, [this, start, deleteCount].concat(items)); + }; + return _this; + } + PanelModelBase.getPanelId = function () { + return "sp_" + PanelModelBase.panelCounter++; + }; + Object.defineProperty(PanelModelBase.prototype, "data", { + get: function () { return this.dataValue; }, + set: function (value) { + if (this.dataValue === value) + return; + this.dataValue = value; + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].setData(value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (newValue) { + this.locTitle.text = newValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + Object.defineProperty(PanelModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "questions", { + get: function () { + if (!this.isQuestionsReady) { + this.questionsValue = []; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel) { + var qs = el.questions; + for (var j = 0; j < qs.length; j++) { + this.questionsValue.push(qs[j]); + } + } + else { + this.questionsValue.push(el); + } + } + this.isQuestionsReady = true; + } + return this.questionsValue; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.markQuestionListDirty = function () { + this.isQuestionsReady = false; + if (this.parent) + this.parent.markQuestionListDirty(); + }; + Object.defineProperty(PanelModelBase.prototype, "elements", { + get: function () { return this.elementsValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.containsElement = function (element) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el == element) + return true; + if (el.isPanel) { + if (el.containsElement(element)) + return true; + } + } + return false; + }; + PanelModelBase.prototype.hasErrors = function (fireCallback, focuseOnFirstError) { + if (fireCallback === void 0) { fireCallback = true; } + if (focuseOnFirstError === void 0) { focuseOnFirstError = false; } + var result = false; + var firstErrorQuestion = null; + var visibleQuestions = []; + this.addQuestionsToList(visibleQuestions, true); + for (var i = 0; i < visibleQuestions.length; i++) { + var question = visibleQuestions[i]; + if (question.isReadOnly) + continue; + if (question.hasErrors(fireCallback)) { + if (focuseOnFirstError && firstErrorQuestion == null) { + firstErrorQuestion = question; + } + result = true; + } + } + if (firstErrorQuestion) + firstErrorQuestion.focus(true); + return result; + }; + PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + if (visibleOnly && !this.visible) + return; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (visibleOnly && !el.visible) + continue; + if (el.isPanel) { + el.addQuestionsToList(list, visibleOnly); + } + else { + list.push(el); + } + } + }; + Object.defineProperty(PanelModelBase.prototype, "rows", { + get: function () { + if (!this.rowValues) { + this.rowValues = this.buildRows(); + } + return this.rowValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isActive", { + get: function () { return (!this.data) || this.data.currentPage == this.root; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "root", { + get: function () { + var res = this; + while (res.parent) + res = res.parent; + return res; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.createRow = function () { return new QuestionRowModel(this); }; + PanelModelBase.prototype.onSurveyLoad = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onSurveyLoad(); + } + if (this.rowsChangedCallback) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isLoadingFromJson", { + get: function () { return this.data && this.data.isLoadingFromJson; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onRowsChanged = function () { + this.rowValues = null; + if (this.rowsChangedCallback && !this.isLoadingFromJson) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isDesignMode", { + get: function () { return this.data && this.data.isDesignMode; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.doOnPushElement = function (list, value) { + var result = Array.prototype.push.call(list, value); + this.markQuestionListDirty(); + this.onAddElement(value, list.length); + this.onRowsChanged(); + return result; + }; + PanelModelBase.prototype.doSpliceElements = function (list, start, deleteCount) { + var items = []; + for (var _i = 3; _i < arguments.length; _i++) { + items[_i - 3] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var deletedQuestions = []; + for (var i = 0; i < deleteCount; i++) { + if (i + start >= list.length) + continue; + deletedQuestions.push(list[i + start]); + } + var result = (_a = Array.prototype.splice).call.apply(_a, [list, start, deleteCount].concat(items)); + this.markQuestionListDirty(); + if (!items) + items = []; + for (var i = 0; i < deletedQuestions.length; i++) { + this.onRemoveElement(deletedQuestions[i]); + } + for (var i = 0; i < items.length; i++) { + this.onAddElement(items[i], start + i); + } + this.onRowsChanged(); + return result; + var _a; + }; + PanelModelBase.prototype.onAddElement = function (element, index) { + if (element.isPanel) { + var p = element; + p.data = this.data; + p.parent = this; + if (this.data) { + this.data.panelAdded(p, index, this, this.root); + } + } + else { + if (this.data) { + var q = element; + q.setData(this.data); + this.data.questionAdded(q, index, this, this.root); + } + } + var self = this; + element.rowVisibilityChangedCallback = function () { self.onElementVisibilityChanged(element); }; + element.startWithNewLineChangedCallback = function () { self.onElementStartWithNewLineChanged(element); }; + }; + PanelModelBase.prototype.onRemoveElement = function (element) { + if (!element.isPanel) { + if (this.data) + this.data.questionRemoved(element); + } + else { + if (this.data) + this.data.panelRemoved(element); + } + }; + PanelModelBase.prototype.onElementVisibilityChanged = function (element) { + if (this.rowValues) { + this.updateRowsVisibility(element); + } + if (this.parent) { + this.parent.onElementVisibilityChanged(this); + } + }; + PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) { + this.onRowsChanged(); + }; + PanelModelBase.prototype.updateRowsVisibility = function (element) { + for (var i = 0; i < this.rowValues.length; i++) { + var row = this.rowValues[i]; + if (row.elements.indexOf(element) > -1) { + row.updateVisible(); + break; + } + } + }; + PanelModelBase.prototype.buildRows = function () { + var result = new Array(); + var lastRowVisibleIndex = -1; + var self = this; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + var isNewRow = i == 0 || el.startWithNewLine; + var row = isNewRow ? this.createRow() : result[result.length - 1]; + if (isNewRow) + result.push(row); + row.addElement(el); + } + for (var i = 0; i < result.length; i++) { + result[i].updateVisible(); + } + return result; + }; + Object.defineProperty(PanelModelBase.prototype, "processedTitle", { + get: function () { + var str = this.title; + if (!str && this.isPanel && this.isDesignMode) + return "[" + this.name + "]"; + return this.data != null ? this.data.processText(str) : str; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (value) { + if (value === this.visible) + return; + this.visibleValue = value; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onVisibleChanged = function () { + }; + Object.defineProperty(PanelModelBase.prototype, "isVisible", { + get: function () { return (this.data && this.data.isDesignMode) || this.getIsPageVisible(null); }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) { + if (!this.visible) + return false; + for (var i = 0; i < this.questions.length; i++) { + if (this.questions[i] == exceptionQuestion) + continue; + if (this.questions[i].visible) + return true; + } + return false; + }; + PanelModelBase.prototype.addElement = function (element, index) { + if (index === void 0) { index = -1; } + if (element == null) + return; + if (index < 0 || index >= this.elements.length) { + this.elements.push(element); + } + else { + this.elements.splice(index, 0, element); + } + }; + PanelModelBase.prototype.addQuestion = function (question, index) { + if (index === void 0) { index = -1; } + this.addElement(question, index); + }; + PanelModelBase.prototype.addPanel = function (panel, index) { + if (index === void 0) { index = -1; } + this.addElement(panel, index); + }; + PanelModelBase.prototype.addNewQuestion = function (questionType, name) { + var question = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + this.addQuestion(question); + return question; + }; + PanelModelBase.prototype.addNewPanel = function (name) { + var panel = this.createNewPanel(name); + this.addPanel(panel); + return panel; + }; + PanelModelBase.prototype.createNewPanel = function (name) { + return new PanelModel(name); + }; + PanelModelBase.prototype.removeElement = function (element) { + var index = this.elements.indexOf(element); + if (index < 0) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel && el.removeElement(element)) + return true; + } + return false; + } + this.elements.splice(index, 1); + return true; + }; + PanelModelBase.prototype.removeQuestion = function (question) { + this.removeElement(question); + }; + PanelModelBase.prototype.runCondition = function (values) { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].runCondition(values); + } + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + PanelModelBase.prototype.onLocaleChanged = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onLocaleChanged(); + } + }; + return PanelModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__base__["b" /* Base */])); + +PanelModelBase.panelCounter = 100; +//export class +var PanelModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModel, _super); + function PanelModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.innerIndentValue = 0; + _this.startWithNewLineValue = true; + return _this; + } + PanelModel.prototype.getType = function () { return "panel"; }; + PanelModel.prototype.setData = function (newValue) { + this.data = newValue; + }; + Object.defineProperty(PanelModel.prototype, "isPanel", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "innerIndent", { + get: function () { return this.innerIndentValue; }, + set: function (val) { + if (val == this.innerIndentValue) + return; + this.innerIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + PanelModel.prototype.onVisibleChanged = function () { + if (this.rowVisibilityChangedCallback) + this.rowVisibilityChangedCallback(); + }; + return PanelModel; +}(PanelModelBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("panel", ["name", { name: "elements", alternativeName: "questions", baseClassName: "question", visible: false }, + { name: "visible:boolean", default: true }, "visibleIf:expression", { name: "title:text", serializationProperty: "locTitle" }, + { name: "innerIndent:number", default: 0, choices: [0, 1, 2, 3] }], function () { return new PanelModel(); }); + + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(5); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionCustomWidget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomWidgetCollection; }); + +var QuestionCustomWidget = (function () { + function QuestionCustomWidget(name, widgetJson) { + this.name = name; + this.widgetJson = widgetJson; + this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : ""; + } + QuestionCustomWidget.prototype.afterRender = function (question, el) { + if (this.widgetJson.afterRender) + this.widgetJson.afterRender(question, el); + }; + QuestionCustomWidget.prototype.willUnmount = function (question, el) { + if (this.widgetJson.willUnmount) + this.widgetJson.willUnmount(question, el); + }; + QuestionCustomWidget.prototype.isFit = function (question) { + if (this.widgetJson.isFit) + return this.widgetJson.isFit(question); + return false; + }; + return QuestionCustomWidget; +}()); + +var CustomWidgetCollection = (function () { + function CustomWidgetCollection() { + this.widgetsValues = []; + this.onCustomWidgetAdded = new __WEBPACK_IMPORTED_MODULE_0__base__["d" /* Event */](); + } + Object.defineProperty(CustomWidgetCollection.prototype, "widgets", { + get: function () { return this.widgetsValues; }, + enumerable: true, + configurable: true + }); + CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson) { + var name = widgetJson.name; + if (!name) { + name = "widget_" + this.widgets.length + 1; + } + var customWidget = new QuestionCustomWidget(name, widgetJson); + this.widgetsValues.push(customWidget); + this.onCustomWidgetAdded.fire(customWidget, null); + }; + CustomWidgetCollection.prototype.clear = function () { this.widgetsValues = []; }; + CustomWidgetCollection.prototype.getCustomWidget = function (question) { + for (var i = 0; i < this.widgetsValues.length; i++) { + if (this.widgetsValues[i].isFit(question)) + return this.widgetsValues[i]; + } + return null; + }; + return CustomWidgetCollection; +}()); + +CustomWidgetCollection.Instance = new CustomWidgetCollection(); + + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(17); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultBootstrapCss; }); + +var defaultBootstrapCss = { + root: "", + header: "panel-heading", + body: "panel-body", + footer: "panel-footer", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "progress center-block", progressBar: "progress-bar", + pageTitle: "", + row: "", + question: { root: "", title: "", comment: "form-control", indent: 20 }, + error: { root: "alert alert-danger", icon: "glyphicon glyphicon-exclamation-sign", item: "" }, + checkbox: { root: "form-inline", item: "checkbox", other: "" }, + comment: "form-control", + dropdown: { root: "", control: "form-control" }, + matrix: { root: "table" }, + matrixdropdown: { root: "table" }, + matrixdynamic: { root: "table", button: "button" }, + multipletext: { root: "table", itemTitle: "", itemValue: "form-control" }, + radiogroup: { root: "form-inline", item: "radio", label: "", other: "" }, + rating: { root: "btn-group", item: "btn btn-default" }, + text: "form-control", + window: { + root: "modal-content", body: "modal-body", + header: { + root: "modal-header panel-title", title: "pull-left", button: "glyphicon pull-right", + buttonExpanded: "glyphicon pull-right glyphicon-chevron-up", buttonCollapsed: "glyphicon pull-right glyphicon-chevron-down" + } + } +}; +__WEBPACK_IMPORTED_MODULE_0__cssstandard__["b" /* surveyCss */]["bootstrap"] = defaultBootstrapCss; + + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_czech__ = __webpack_require__(51); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localization_danish__ = __webpack_require__(52); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localization_dutch__ = __webpack_require__(53); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__localization_finnish__ = __webpack_require__(54); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_french__ = __webpack_require__(55); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localization_german__ = __webpack_require__(56); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localization_greek__ = __webpack_require__(57); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localization_polish__ = __webpack_require__(58); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localization_romanian__ = __webpack_require__(59); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localization_russian__ = __webpack_require__(60); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localization_swedish__ = __webpack_require__(61); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localization_turkish__ = __webpack_require__(62); + + + + + + + + + + + + + + +/***/ }), +/* 37 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(50); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__validator__ = __webpack_require__(25); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(5); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__ = __webpack_require__(19); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditions__ = __webpack_require__(16); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__conditionsParser__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_7__conditionsParser__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__ = __webpack_require__(20); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__error__ = __webpack_require__(9); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__jsonobject__ = __webpack_require__(2); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["i"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["j"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__ = __webpack_require__(21); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["d"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__ = __webpack_require__(69); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__ = __webpack_require__(70); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__question_matrix__ = __webpack_require__(68); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__question_multipletext__ = __webpack_require__(71); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__panel__ = __webpack_require__(33); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__page__ = __webpack_require__(32); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_17__page__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__question__ = __webpack_require__(10); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_18__question__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__questionbase__ = __webpack_require__(22); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_19__questionbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__question_baseselect__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__question_checkbox__ = __webpack_require__(63); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_21__question_checkbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__question_comment__ = __webpack_require__(64); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_22__question_comment__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__question_dropdown__ = __webpack_require__(65); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_23__question_dropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__questionfactory__ = __webpack_require__(6); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__question_file__ = __webpack_require__(66); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_25__question_file__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__question_html__ = __webpack_require__(67); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_26__question_html__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__ = __webpack_require__(72); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__question_rating__ = __webpack_require__(73); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_28__question_rating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__question_text__ = __webpack_require__(74); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_29__question_text__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__survey__ = __webpack_require__(23); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_30__survey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__trigger__ = __webpack_require__(76); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__surveyWindow__ = __webpack_require__(75); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__ = __webpack_require__(24); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__ = __webpack_require__(31); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__surveyStrings__ = __webpack_require__(1); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__ = __webpack_require__(34); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_23", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["a"]; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Version; }); +// styles + +var Version; +Version = "" + "0.12.8"; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//Uncomment to include the "date" question type. +//export {default as QuestionDateModel} from "../../plugins/question_date"; + + +/***/ }), +/* 38 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactSurvey__ = __webpack_require__(26); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindow; }); + + + +var SurveyWindow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindow, _super); + function SurveyWindow(props) { + var _this = _super.call(this, props) || this; + _this.handleOnExpanded = _this.handleOnExpanded.bind(_this); + return _this; + } + SurveyWindow.prototype.handleOnExpanded = function (event) { + this.state.expanded = !this.state.expanded; + this.setState(this.state); + }; + SurveyWindow.prototype.render = function () { + if (this.state.hidden) + return null; + var header = this.renderHeader(); + var body = this.state.expanded ? this.renderBody() : null; + var style = { position: "fixed", bottom: "3px", right: "10px" }; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.root, style: style }, + header, + body); + }; + SurveyWindow.prototype.renderHeader = function () { + var styleA = { width: "100%" }; + var styleTitle = { paddingRight: "10px" }; + var glyphClassName = this.state.expanded ? this.css.window.header.buttonCollapsed : this.css.window.header.buttonExpanded; + glyphClassName = "glyphicon pull-right " + glyphClassName; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.header.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("a", { href: "#", onClick: this.handleOnExpanded, style: styleA }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: this.css.window.header.title, style: styleTitle }, this.title), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: glyphClassName, "aria-hidden": "true" }))); + }; + SurveyWindow.prototype.renderBody = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.window.body }, this.renderSurvey()); + }; + SurveyWindow.prototype.updateSurvey = function (newProps) { + _super.prototype.updateSurvey.call(this, newProps); + this.title = newProps.title ? newProps.title : this.survey.title; + var hasExpanded = newProps["expanded"] ? newProps.expanded : false; + this.state = { expanded: hasExpanded, hidden: false }; + var self = this; + this.survey.onComplete.add(function (s) { + self.state.hidden = true; + self.setState(self.state); + }); + }; + return SurveyWindow; +}(__WEBPACK_IMPORTED_MODULE_2__reactSurvey__["a" /* Survey */])); + + + +/***/ }), +/* 39 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionCheckbox; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionCheckboxItem; }); + + + + + +var SurveyQuestionCheckbox = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCheckbox, _super); + function SurveyQuestionCheckbox(props) { + var _this = _super.call(this, props) || this; + _this.state = { choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + return _this; + } + Object.defineProperty(SurveyQuestionCheckbox.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckbox.prototype.render = function () { + if (!this.question) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, this.getItems())); + }; + SurveyQuestionCheckbox.prototype.getItems = function () { + var items = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + items.push(this.renderItem(key, item, i == 0)); + } + return items; + }; + Object.defineProperty(SurveyQuestionCheckbox.prototype, "textStyle", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckbox.prototype.renderItem = function (key, item, isFirst) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionCheckboxItem, { key: key, question: this.question, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, item: item, textStyle: this.textStyle, isFirst: isFirst }); + }; + return SurveyQuestionCheckbox; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionCheckboxItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionCheckboxItem, _super); + function SurveyQuestionCheckboxItem(props) { + var _this = _super.call(this, props) || this; + _this.item = props.item; + _this.question = props.question; + _this.textStyle = props.textStyle; + _this.isFirst = props.isFirst; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + SurveyQuestionCheckboxItem.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.item = nextProps.item; + this.textStyle = nextProps.textStyle; + this.question = nextProps.question; + this.isFirst = nextProps.isFirst; + }; + SurveyQuestionCheckboxItem.prototype.handleOnChange = function (event) { + var newValue = this.question.value; + if (!newValue) { + newValue = []; + } + var index = newValue.indexOf(this.item.value); + if (event.target.checked) { + if (index < 0) { + newValue.push(this.item.value); + } + } + else { + if (index > -1) { + newValue.splice(index, 1); + } + } + this.question.value = newValue; + this.setState({ value: this.question.value }); + }; + SurveyQuestionCheckboxItem.prototype.render = function () { + if (!this.item || !this.question) + return null; + var itemWidth = this.question.colCount > 0 ? (100 / this.question.colCount) + "%" : ""; + var marginRight = this.question.colCount == 0 ? "5px" : "0px"; + var divStyle = { marginRight: marginRight }; + if (itemWidth) { + divStyle["width"] = itemWidth; + } + var isChecked = (this.question.value && this.question.value.indexOf(this.item.value) > -1) || false; + var otherItem = (this.item.value === this.question.otherItem.value && isChecked) ? this.renderOther() : null; + return this.renderCheckbox(isChecked, divStyle, otherItem); + }; + Object.defineProperty(SurveyQuestionCheckboxItem.prototype, "inputStyle", { + get: function () { return { marginRight: "3px" }; }, + enumerable: true, + configurable: true + }); + SurveyQuestionCheckboxItem.prototype.renderCheckbox = function (isChecked, divStyle, otherItem) { + var id = this.isFirst ? this.question.inputId : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.item, style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { className: this.css.item }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "checkbox", id: id, style: this.inputStyle, disabled: this.isDisplayMode, checked: isChecked, onChange: this.handleOnChange }), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, this.item.text)), + otherItem)); + }; + SurveyQuestionCheckboxItem.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionCheckboxItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("checkbox", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionCheckbox, props); +}); + + +/***/ }), +/* 40 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils__ = __webpack_require__(77); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionDropdown; }); + + + + + + +var SurveyQuestionDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionDropdown, _super); + function SurveyQuestionDropdown(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value, choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionDropdown.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionDropdown.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state.value = this.question.value; + }; + SurveyQuestionDropdown.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionDropdown.prototype.render = function () { + if (!this.question) + return null; + var comment = this.question.value === this.question.otherItem.value ? this.renderOther() : null; + var select = this.renderSelect(); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, + select, + comment)); + }; + SurveyQuestionDropdown.prototype.renderSelect = function () { + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css.control }, this.question.value)); + var options = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + var option = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("option", { key: key, value: item.value }, item.text); + options.push(option); + } + var onChange = null; + if (__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].msie || (__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].firefox && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils__["b" /* compareVersions */])(__WEBPACK_IMPORTED_MODULE_5__utils__["a" /* browser */].version, '51') < 0)) { + onChange = this.handleOnChange; + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("select", { id: this.question.inputId, className: this.css.control, value: this.state.value, onChange: onChange, onInput: this.handleOnChange }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("option", { value: "" }, this.question.optionsCaption), + options)); + }; + SurveyQuestionDropdown.prototype.renderOther = function () { + var style = { marginTop: "3px" }; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: style }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode })); + }; + return SurveyQuestionDropdown; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("dropdown", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionDropdown, props); +}); + + +/***/ }), +/* 41 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionFile; }); + + + + +var SurveyQuestionFile = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionFile, _super); + function SurveyQuestionFile(props) { + var _this = _super.call(this, props) || this; + _this.state = { fileLoaded: 0 }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionFile.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionFile.prototype.handleOnChange = function (event) { + var src = event.target || event.srcElement; + if (!window["FileReader"]) + return; + if (!src || !src.files || src.files.length < 1) + return; + this.question.loadFile(src.files[0]); + this.setState({ fileLoaded: this.state.fileLoaded + 1 }); + }; + SurveyQuestionFile.prototype.render = function () { + if (!this.question) + return null; + var img = this.renderImage(); + var fileInput = null; + if (!this.isDisplayMode) { + fileInput = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.question.inputId, type: "file", onChange: this.handleOnChange }); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + fileInput, + img)); + }; + SurveyQuestionFile.prototype.renderImage = function () { + if (!this.question.previewValue) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + " ", + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("img", { src: this.question.previewValue, height: this.question.imageHeight, width: this.question.imageWidth }))); + }; + return SurveyQuestionFile; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("file", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionFile, props); +}); + + +/***/ }), +/* 42 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionHtml; }); + + + + +var SurveyQuestionHtml = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionHtml, _super); + function SurveyQuestionHtml(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionHtml.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionHtml.prototype.render = function () { + if (!this.question || !this.question.html) + return null; + var htmlValue = { __html: this.question.processedHtml }; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue })); + }; + return SurveyQuestionHtml; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("html", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionHtml, props); +}); + + +/***/ }), +/* 43 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrix; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixRow; }); + + + + +var SurveyQuestionMatrix = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrix, _super); + function SurveyQuestionMatrix(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMatrix.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrix.prototype.render = function () { + if (!this.question) + return null; + var firstTH = this.question.hasRows ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null) : null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key }, column.text)); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + var key = "row" + i; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixRow, { key: key, question: this.question, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, row: row, isFirst: i == 0 })); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + firstTH, + headers)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))); + }; + return SurveyQuestionMatrix; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixRow, _super); + function SurveyQuestionMatrixRow(props) { + var _this = _super.call(this, props) || this; + _this.question = props.question; + _this.row = props.row; + _this.isFirst = props.isFirst; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + SurveyQuestionMatrixRow.prototype.handleOnChange = function (event) { + this.row.value = event.target.value; + this.setState({ value: this.row.value }); + }; + SurveyQuestionMatrixRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.question = nextProps.question; + this.row = nextProps.row; + this.isFirst = nextProps.isFirst; + }; + SurveyQuestionMatrixRow.prototype.render = function () { + if (!this.row) + return null; + var firstTD = this.question.hasRows ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", null, this.row.text) : null; + var tds = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "value" + i; + var isChecked = this.row.value == column.value; + var inputId = this.isFirst && i == 0 ? this.question.inputId : null; + var td = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: key }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: inputId, type: "radio", name: this.row.fullName, value: column.value, disabled: this.isDisplayMode, checked: isChecked, onChange: this.handleOnChange })); + tds.push(td); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + firstTD, + tds)); + }; + return SurveyQuestionMatrixRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrix", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrix, props); +}); + + +/***/ }), +/* 44 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestion__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrixDropdown; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixDropdownRow; }); + + + + + +var SurveyQuestionMatrixDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDropdown, _super); + function SurveyQuestionMatrixDropdown(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMatrixDropdown.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrixDropdown.prototype.render = function () { + if (!this.question) + return null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + var minWidth = this.question.getColumnWidth(column); + var columnStyle = minWidth ? { minWidth: minWidth } : {}; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key, style: columnStyle }, this.question.getColumnTitle(column))); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDropdownRow, { row: row, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, creator: this.creator })); + } + var divStyle = this.question.horizontalScroll ? { overflowX: 'scroll' } : {}; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null), + headers)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows)))); + }; + return SurveyQuestionMatrixDropdown; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixDropdownRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDropdownRow, _super); + function SurveyQuestionMatrixDropdownRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyQuestionMatrixDropdownRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDropdownRow.prototype.setProperties = function (nextProps) { + this.row = nextProps.row; + this.creator = nextProps.creator; + }; + SurveyQuestionMatrixDropdownRow.prototype.render = function () { + if (!this.row) + return null; + var tds = []; + for (var i = 0; i < this.row.cells.length; i++) { + var cell = this.row.cells[i]; + var errors = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestion__["b" /* SurveyQuestionErrors */], { question: cell.question, css: this.rootCss, creator: this.creator }); + var select = this.renderSelect(cell); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + i }, + errors, + select)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", null, this.row.text), + tds)); + }; + SurveyQuestionMatrixDropdownRow.prototype.renderSelect = function (cell) { + return this.creator.createQuestionElement(cell.question); + }; + return SurveyQuestionMatrixDropdownRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrixdropdown", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDropdown, props); +}); + + +/***/ }), +/* 45 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestion__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMatrixDynamic; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMatrixDynamicRow; }); + + + + + +var SurveyQuestionMatrixDynamic = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDynamic, _super); + function SurveyQuestionMatrixDynamic(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + Object.defineProperty(SurveyQuestionMatrixDynamic.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMatrixDynamic.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDynamic.prototype.setProperties = function (nextProps) { + var self = this; + this.state = { rowCounter: 0 }; + this.question.rowCountChangedCallback = function () { + self.state.rowCounter = self.state.rowCounter + 1; + self.setState(self.state); + }; + this.handleOnRowAddClick = this.handleOnRowAddClick.bind(this); + }; + SurveyQuestionMatrixDynamic.prototype.handleOnRowAddClick = function (event) { + this.question.addRow(); + }; + SurveyQuestionMatrixDynamic.prototype.render = function () { + if (!this.question) + return null; + var headers = []; + for (var i = 0; i < this.question.columns.length; i++) { + var column = this.question.columns[i]; + var key = "column" + i; + var minWidth = this.question.getColumnWidth(column); + var columnStyle = minWidth ? { minWidth: minWidth } : {}; + headers.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", { key: key, style: columnStyle }, this.question.getColumnTitle(column))); + } + var rows = []; + var visibleRows = this.question.visibleRows; + for (var i = 0; i < visibleRows.length; i++) { + var row = visibleRows[i]; + rows.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDynamicRow, { row: row, question: this.question, index: i, css: this.css, rootCss: this.rootCss, isDisplayMode: this.isDisplayMode, creator: this.creator })); + } + var divStyle = this.question.horizontalScroll ? { overflowX: 'scroll' } : {}; + var btnDeleteTD = !this.isDisplayMode ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("th", null) : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("thead", null, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, + headers, + btnDeleteTD)), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))), + this.renderAddRowButton())); + }; + SurveyQuestionMatrixDynamic.prototype.renderAddRowButton = function () { + if (this.isDisplayMode) + return null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: this.css.button, type: "button", onClick: this.handleOnRowAddClick, value: this.question.addRowText }); + }; + return SurveyQuestionMatrixDynamic; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMatrixDynamicRow = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMatrixDynamicRow, _super); + function SurveyQuestionMatrixDynamicRow(props) { + var _this = _super.call(this, props) || this; + _this.setProperties(props); + return _this; + } + SurveyQuestionMatrixDynamicRow.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.setProperties(nextProps); + }; + SurveyQuestionMatrixDynamicRow.prototype.setProperties = function (nextProps) { + this.row = nextProps.row; + this.question = nextProps.question; + this.index = nextProps.index; + this.creator = nextProps.creator; + this.handleOnRowRemoveClick = this.handleOnRowRemoveClick.bind(this); + }; + SurveyQuestionMatrixDynamicRow.prototype.handleOnRowRemoveClick = function (event) { + this.question.removeRow(this.index); + }; + SurveyQuestionMatrixDynamicRow.prototype.render = function () { + if (!this.row) + return null; + var tds = []; + for (var i = 0; i < this.row.cells.length; i++) { + var cell = this.row.cells[i]; + var errors = __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestion__["b" /* SurveyQuestionErrors */], { question: cell.question, css: this.rootCss, creator: this.creator }); + var select = this.renderQuestion(cell); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + i }, + errors, + select)); + } + if (!this.isDisplayMode) { + var removeButton = this.renderButton(); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "row" + this.row.cells.length + 1 }, removeButton)); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", null, tds)); + }; + SurveyQuestionMatrixDynamicRow.prototype.renderQuestion = function (cell) { + return this.creator.createQuestionElement(cell.question); + }; + SurveyQuestionMatrixDynamicRow.prototype.renderButton = function () { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { className: this.css.button, type: "button", onClick: this.handleOnRowRemoveClick, value: this.question.removeRowText }); + }; + return SurveyQuestionMatrixDynamicRow; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("matrixdynamic", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMatrixDynamic, props); +}); + + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionMultipleText; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionMultipleTextItem; }); + + + + +var SurveyQuestionMultipleText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMultipleText, _super); + function SurveyQuestionMultipleText(props) { + return _super.call(this, props) || this; + } + Object.defineProperty(SurveyQuestionMultipleText.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionMultipleText.prototype.render = function () { + if (!this.question) + return null; + var tableRows = this.question.getRows(); + var rows = []; + for (var i = 0; i < tableRows.length; i++) { + rows.push(this.renderRow("item" + i, tableRows[i])); + } + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("table", { className: this.css.root }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tbody", null, rows))); + }; + SurveyQuestionMultipleText.prototype.renderRow = function (key, items) { + var tds = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "label" + i }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { className: this.css.itemTitle }, item.fullTitle))); + tds.push(__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("td", { key: "value" + i }, this.renderItem(item, i == 0))); + } + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("tr", { key: key }, tds); + }; + SurveyQuestionMultipleText.prototype.renderItem = function (item, isFirst) { + var inputId = isFirst ? this.question.inputId : null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMultipleTextItem, { item: item, css: this.css, isDisplayMode: this.isDisplayMode, inputId: inputId }); + }; + return SurveyQuestionMultipleText; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +var SurveyQuestionMultipleTextItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionMultipleTextItem, _super); + function SurveyQuestionMultipleTextItem(props) { + var _this = _super.call(this, props) || this; + _this.item = props.item; + _this.inputId = props.inputId; + _this.state = { value: _this.item.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + SurveyQuestionMultipleTextItem.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionMultipleTextItem.prototype.handleOnBlur = function (event) { + this.item.value = event.target.value; + this.setState({ value: this.item.value }); + }; + SurveyQuestionMultipleTextItem.prototype.componentWillReceiveProps = function (nextProps) { + this.item = nextProps.item; + this.css = nextProps.css; + }; + SurveyQuestionMultipleTextItem.prototype.render = function () { + if (!this.item) + return null; + var style = { float: "left" }; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.inputId, className: this.css.itemValue, style: style }, this.item.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.inputId, className: this.css.itemValue, style: style, type: "text", value: this.state.value, placeholder: this.item.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange })); + }; + Object.defineProperty(SurveyQuestionMultipleTextItem.prototype, "mainClassName", { + get: function () { return ""; }, + enumerable: true, + configurable: true + }); + return SurveyQuestionMultipleTextItem; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["a" /* SurveyElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("multipletext", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionMultipleText, props); +}); + + +/***/ }), +/* 47 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionRadiogroup; }); + + + + + +var SurveyQuestionRadiogroup = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionRadiogroup, _super); + function SurveyQuestionRadiogroup(props) { + var _this = _super.call(this, props) || this; + _this.state = { choicesChanged: 0 }; + var self = _this; + _this.question.choicesChangedCallback = function () { + self.state.choicesChanged = self.state.choicesChanged + 1; + self.setState(self.state); + }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionRadiogroup.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRadiogroup.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.handleOnChange = this.handleOnChange.bind(this); + }; + SurveyQuestionRadiogroup.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionRadiogroup.prototype.render = function () { + if (!this.question) + return null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, this.getItems())); + }; + SurveyQuestionRadiogroup.prototype.getItems = function () { + var items = []; + for (var i = 0; i < this.question.visibleChoices.length; i++) { + var item = this.question.visibleChoices[i]; + var key = "item" + i; + items.push(this.renderItem(key, item, i == 0)); + } + return items; + }; + Object.defineProperty(SurveyQuestionRadiogroup.prototype, "textStyle", { + get: function () { return { marginLeft: "3px" }; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRadiogroup.prototype.renderItem = function (key, item, isFirst) { + var itemWidth = this.question.colCount > 0 ? (100 / this.question.colCount) + "%" : ""; + var marginRight = this.question.colCount == 0 ? "5px" : "0px"; + var divStyle = { marginRight: marginRight }; + if (itemWidth) { + divStyle["width"] = itemWidth; + } + var isChecked = this.question.value == item.value; + var otherItem = (isChecked && item.value === this.question.otherItem.value) ? this.renderOther() : null; + return this.renderRadio(key, item, isChecked, divStyle, otherItem, isFirst); + }; + SurveyQuestionRadiogroup.prototype.renderRadio = function (key, item, isChecked, divStyle, otherItem, isFirst) { + var id = isFirst ? this.question.inputId : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { key: key, className: this.css.item, style: divStyle }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { className: this.css.label }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: id, type: "radio", name: this.question.name + "_" + this.questionBase.id, checked: isChecked, value: item.value, disabled: this.isDisplayMode, onChange: this.handleOnChange }), + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", { style: this.textStyle }, item.text)), + otherItem)); + }; + SurveyQuestionRadiogroup.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionRadiogroup; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("radiogroup", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionRadiogroup, props); +}); + + +/***/ }), +/* 48 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionRating; }); + + + + + +var SurveyQuestionRating = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionRating, _super); + function SurveyQuestionRating(props) { + var _this = _super.call(this, props) || this; + _this.handleOnChange = _this.handleOnChange.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionRating.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionRating.prototype.handleOnChange = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value }); + }; + SurveyQuestionRating.prototype.render = function () { + if (!this.question) + return null; + var values = []; + var minText = this.question.minRateDescription ? this.question.minRateDescription + " " : ""; + var maxText = this.question.maxRateDescription ? " " + this.question.maxRateDescription : ""; + for (var i = 0; i < this.question.visibleRateValues.length; i++) { + var minTextValue = i == 0 ? minText : ""; + var maxTextValue = i == this.question.visibleRateValues.length - 1 ? maxText : ""; + values.push(this.renderItem("value" + i, this.question.visibleRateValues[i], minTextValue, maxTextValue)); + } + var comment = this.question.hasOther ? this.renderOther() : null; + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.root }, + values, + comment)); + }; + SurveyQuestionRating.prototype.renderItem = function (key, item, minText, maxText) { + var isChecked = this.question.value == item.value; + var className = this.css.item; + if (isChecked) + className += " active"; + var min = minText ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, minText) : null; + var max = maxText ? __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, maxText) : null; + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("label", { key: key, className: className }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { type: "radio", style: { display: "none" }, name: this.question.name, value: item.value, disabled: this.isDisplayMode, checked: this.question.value == item.value, onChange: this.handleOnChange }), + min, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("span", null, item.text), + max); + }; + SurveyQuestionRating.prototype.renderOther = function () { + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { className: this.css.other }, + __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](__WEBPACK_IMPORTED_MODULE_3__reactquestioncomment__["a" /* SurveyQuestionCommentItem */], { question: this.question, css: this.rootCss, isDisplayMode: this.isDisplayMode }))); + }; + return SurveyQuestionRating; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_4__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("rating", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionRating, props); +}); + + +/***/ }), +/* 49 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reactquestionelement__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionText; }); + + + + +var SurveyQuestionText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyQuestionText, _super); + function SurveyQuestionText(props) { + var _this = _super.call(this, props) || this; + _this.state = { value: _this.question.value || '' }; + _this.handleOnChange = _this.handleOnChange.bind(_this); + _this.handleOnBlur = _this.handleOnBlur.bind(_this); + return _this; + } + Object.defineProperty(SurveyQuestionText.prototype, "question", { + get: function () { return this.questionBase; }, + enumerable: true, + configurable: true + }); + SurveyQuestionText.prototype.componentWillReceiveProps = function (nextProps) { + _super.prototype.componentWillReceiveProps.call(this, nextProps); + this.state = { value: this.question.value || '' }; + }; + SurveyQuestionText.prototype.handleOnChange = function (event) { + this.setState({ value: event.target.value }); + }; + SurveyQuestionText.prototype.handleOnBlur = function (event) { + this.question.value = event.target.value; + this.setState({ value: this.question.value || '' }); + }; + SurveyQuestionText.prototype.render = function () { + if (!this.question) + return null; + if (this.isDisplayMode) + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("div", { id: this.question.inputId, className: this.css }, this.question.value)); + return (__WEBPACK_IMPORTED_MODULE_1_react__["createElement"]("input", { id: this.question.inputId, className: this.css, type: this.question.inputType, value: this.state.value, size: this.question.size, placeholder: this.question.placeHolder, onBlur: this.handleOnBlur, onChange: this.handleOnChange })); + }; + return SurveyQuestionText; +}(__WEBPACK_IMPORTED_MODULE_2__reactquestionelement__["b" /* SurveyQuestionElementBase */])); + +__WEBPACK_IMPORTED_MODULE_3__reactquestionfactory__["a" /* ReactQuestionFactory */].Instance.registerQuestion("text", function (props) { + return __WEBPACK_IMPORTED_MODULE_1_react__["createElement"](SurveyQuestionText, props); +}); + + +/***/ }), +/* 50 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 51 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export czechSurveyStrings */ + +var czechSurveyStrings = { + pagePrevText: "Předchozí", + pageNextText: "Další", + completeText: "Hotovo", + otherItemText: "Jiná odpověď (napište)", + progressText: "Strana {0} z {1}", + emptySurvey: "Průzkumu neobsahuje žádné otázky.", + completingSurvey: "Děkujeme za vyplnění průzkumu!", + loadingSurvey: "Probíhá načítání průzkumu...", + optionsCaption: "Vyber...", + requiredError: "Odpovězte prosím na otázku.", + requiredInAllRowsError: "Odpovězte prosím na všechny otázky.", + numericError: "V tomto poli lze zadat pouze čísla.", + textMinLength: "Zadejte prosím alespoň {0} znaků.", + textMaxLength: "Zadejte prosím méně než {0} znaků.", + textMinMaxLength: "Zadejte prosím více než {0} a méně než {1} znaků.", + minRowCountError: "Vyplňte prosím alespoň {0} řádků.", + minSelectError: "Vyberte prosím alespoň {0} varianty.", + maxSelectError: "Nevybírejte prosím více než {0} variant.", + numericMinMax: "Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}", + numericMin: "Odpověď '{0}' by mělo být větší nebo rovno {1}", + numericMax: "Odpověď '{0}' by mělo být menší nebo rovno {1}", + invalidEmail: "Zadejte prosím platnou e-mailovou adresu.", + urlRequestError: "Požadavek vrátil chybu '{0}'. {1}", + urlGetChoicesError: "Požadavek nevrátil data nebo cesta je neplatná", + exceedMaxSize: "Velikost souboru by neměla být větší než {0}.", + otherRequiredError: "Zadejte prosím jinou hodnotu.", + uploadingFile: "Váš soubor se nahrává. Zkuste to prosím za několik sekund.", + addRow: "Přidat řádek", + removeRow: "Odstranit" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["cz"] = czechSurveyStrings; + + +/***/ }), +/* 52 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export danishSurveyStrings */ + +var danishSurveyStrings = { + pagePrevText: "Tilbage", + pageNextText: "Videre", + completeText: "Færdig", + progressText: "Side {0} af {1}", + emptySurvey: "Der er ingen synlige spørgsmål.", + completingSurvey: "Mange tak for din besvarelse!", + loadingSurvey: "Spørgeskemaet hentes fra serveren...", + otherItemText: "Valgfrit svar...", + optionsCaption: "Vælg...", + requiredError: "Besvar venligst spørgsmålet.", + numericError: "Angiv et tal.", + textMinLength: "Angiv mindst {0} tegn.", + minSelectError: "Vælg venligst mindst {0} svarmulighed(er).", + maxSelectError: "Vælg venligst færre {0} svarmuligheder(er).", + numericMinMax: "'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}", + numericMin: "'{0}' skal være lig med eller større end {1}", + numericMax: "'{0}' skal være lig med eller mindre end {1}", + invalidEmail: "Angiv venligst en gyldig e-mail adresse.", + exceedMaxSize: "Filstørrelsen må ikke overstige {0}.", + otherRequiredError: "Angiv en værdi for dit valgfrie svar." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["da"] = danishSurveyStrings; + + +/***/ }), +/* 53 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export dutchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var dutchSurveyStrings = { + pagePrevText: "Vorige", + pageNextText: "Volgende", + completeText: "Afsluiten", + otherItemText: "Andere", + progressText: "Pagina {0} van {1}", + emptySurvey: "Er is geen zichtbare pagina of vraag in deze vragenlijst", + completingSurvey: "Bedankt om deze vragenlijst in te vullen", + loadingSurvey: "De vragenlijst is aan het laden...", + optionsCaption: "Kies...", + requiredError: "Gelieve een antwoord in te vullen", + numericError: "Het antwoord moet een getal zijn", + textMinLength: "Gelieve minsten {0} karakters in te vullen.", + minSelectError: "Gelieve minimum {0} antwoorden te selecteren.", + maxSelectError: "Gelieve niet meer dan {0} antwoorden te selecteren.", + numericMinMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}", + numericMin: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + numericMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + invalidEmail: "Gelieve een geldig e-mailadres in te vullen.", + exceedMaxSize: "De grootte van het bestand mag niet groter zijn dan {0}.", + otherRequiredError: "Gelieve het veld 'Andere' in te vullen" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["nl"] = dutchSurveyStrings; + + +/***/ }), +/* 54 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export finnishSurveyStrings */ + +var finnishSurveyStrings = { + pagePrevText: "Edellinen", + pageNextText: "Seuraava", + completeText: "Valmis", + otherItemText: "Muu (kuvaile)", + progressText: "Sivu {0}/{1}", + emptySurvey: "Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.", + completingSurvey: "Kiitos kyselyyn vastaamisesta!", + loadingSurvey: "Kyselyä ladataan palvelimelta...", + optionsCaption: "Valitse...", + requiredError: "Vastaa kysymykseen, kiitos.", + numericError: "Arvon tulee olla numeerinen.", + textMinLength: "Ole hyvä ja syötä vähintään {0} merkkiä.", + minSelectError: "Ole hyvä ja valitse vähintään {0} vaihtoehtoa.", + maxSelectError: "Ole hyvä ja valitse enintään {0} vaihtoehtoa.", + numericMinMax: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}", + numericMin: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}", + numericMax: "'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}", + invalidEmail: "Syötä validi sähköpostiosoite.", + otherRequiredError: "Ole hyvä ja syötä \"Muu (kuvaile)\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fi"] = finnishSurveyStrings; + + +/***/ }), +/* 55 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export frenchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var frenchSurveyStrings = { + pagePrevText: "Pr\u00e9c\u00e9dent", + pageNextText: "Suivant", + completeText: "Terminer", + otherItemText: "Autre (pr\u00e9ciser)", + progressText: "Page {0} sur {1}", + emptySurvey: "Il n'y a ni page visible ni question visible dans ce questionnaire", + completingSurvey: "Merci d'avoir r\u00e9pondu au questionnaire!", + loadingSurvey: "Le questionnaire est en cours de chargement...", + optionsCaption: "Choisissez...", + requiredError: "La r\u00e9ponse \u00e0 cette question est obligatoire.", + requiredInAllRowsError: "Toutes les lignes sont obligatoires", + numericError: "La r\u00e9ponse doit \u00eatre un nombre.", + textMinLength: "Merci d'entrer au moins {0} symboles.", + minSelectError: "Merci de s\u00e9lectionner au moins {0}r\u00e9ponses.", + maxSelectError: "Merci de s\u00e9lectionner au plus {0}r\u00e9ponses.", + numericMinMax: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1} et inf\u00e9rieure ou\u00e9gale \u00e0 {2}", + numericMin: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1}", + numericMax: "Votre r\u00e9ponse '{0}' doit \u00eatreinf\u00e9rieure ou \u00e9gale \u00e0 {1}", + invalidEmail: "Merci d'entrer une adresse mail valide.", + exceedMaxSize: "La taille du fichier ne doit pas exc\u00e9der {0}.", + otherRequiredError: "Merci de pr\u00e9ciser le champ 'Autre'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fr"] = frenchSurveyStrings; + + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export germanSurveyStrings */ + +var germanSurveyStrings = { + pagePrevText: "Zurück", + pageNextText: "Weiter", + completeText: "Fertig", + progressText: "Seite {0} von {1}", + emptySurvey: "Es gibt keine sichtbare Frage.", + completingSurvey: "Vielen Dank für das Ausfüllen des Fragebogens!", + loadingSurvey: "Der Fragebogen wird vom Server geladen...", + otherItemText: "Benutzerdefinierte Antwort...", + optionsCaption: "Wählen...", + requiredError: "Bitte antworten Sie auf die Frage.", + numericError: "Der Wert sollte eine Zahl sein.", + textMinLength: "Bitte geben Sie mindestens {0} Symbole.", + minSelectError: "Bitte wählen Sie mindestens {0} Varianten.", + maxSelectError: "Bitte wählen Sie nicht mehr als {0} Varianten.", + numericMinMax: "'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}", + numericMin: "'{0}' sollte gleich oder größer sein als {1}", + numericMax: "'{0}' sollte gleich oder kleiner als {1}", + invalidEmail: "Bitte geben Sie eine gültige Email-Adresse ein.", + exceedMaxSize: "Die Dateigröße soll nicht mehr als {0}.", + otherRequiredError: "Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["de"] = germanSurveyStrings; + + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export greekSurveyStrings */ +//Created by https://github.com/agelospanagiotakis + +var greekSurveyStrings = { + pagePrevText: "Προηγούμενο", + pageNextText: "Επόμενο", + completeText: "Ολοκλήρωση", + otherItemText: "Άλλο (παρακαλώ διευκρινίστε)", + progressText: "Σελίδα {0} από {1}", + emptySurvey: "Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.", + completingSurvey: "Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!", + loadingSurvey: "Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...", + optionsCaption: "Επιλέξτε...", + requiredError: "Παρακαλώ απαντήστε στην ερώτηση.", + requiredInAllRowsError: "Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.", + numericError: "Η τιμή πρέπει να είναι αριθμιτική.", + textMinLength: "Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.", + minRowCountError: "Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.", + minSelectError: "Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.", + maxSelectError: "Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.", + numericMinMax: "Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}", + numericMin: "Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}", + numericMax: "Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}", + invalidEmail: "Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.", + urlRequestError: "Η αίτηση επέστρεψε σφάλμα '{0}'. {1}", + urlGetChoicesError: "Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη", + exceedMaxSize: "Το μέγεθος δεν μπορεί να υπερβένει τα {0}.", + otherRequiredError: "Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.", + uploadingFile: "Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.", + addRow: "Προσθήκη γραμμής", + removeRow: "Αφαίρεση" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["gr"] = greekSurveyStrings; + + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export polishSurveyStrings */ + +var polishSurveyStrings = { + pagePrevText: "Wstecz", + pageNextText: "Dalej", + completeText: "Gotowe", + otherItemText: "Inna odpowiedź (wpisz)", + progressText: "Strona {0} z {1}", + emptySurvey: "Nie ma widocznych pytań.", + completingSurvey: "Dziękujemy za wypełnienie ankiety!", + loadingSurvey: "Trwa wczytywanie ankiety...", + optionsCaption: "Wybierz...", + requiredError: "Proszę odpowiedzieć na to pytanie.", + requiredInAllRowsError: "Proszę odpowiedzieć na wszystkie pytania.", + numericError: "W tym polu można wpisać tylko liczby.", + textMinLength: "Proszę wpisać co najmniej {0} znaków.", + textMaxLength: "Proszę wpisać mniej niż {0} znaków.", + textMinMaxLength: "Proszę wpisać więcej niż {0} i mniej niż {1} znaków.", + minRowCountError: "Proszę uzupełnić przynajmniej {0} wierszy.", + minSelectError: "Proszę wybrać co najmniej {0} pozycji.", + maxSelectError: "Proszę wybrać nie więcej niż {0} pozycji.", + numericMinMax: "Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}", + numericMin: "Odpowiedź '{0}' powinna być większa lub równa {1}", + numericMax: "Odpowiedź '{0}' powinna być mniejsza lub równa {1}", + invalidEmail: "Proszę podać prawidłowy adres email.", + urlRequestError: "Żądanie zwróciło błąd '{0}'. {1}", + urlGetChoicesError: "Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa", + exceedMaxSize: "Rozmiar przesłanego pliku nie może przekraczać {0}.", + otherRequiredError: "Proszę podać inną odpowiedź.", + uploadingFile: "Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.", + addRow: "Dodaj wiersz", + removeRow: "Usuń" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["pl"] = polishSurveyStrings; + + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export romanianSurveyStrings */ + +var romanianSurveyStrings = { + pagePrevText: "Precedent", + pageNextText: "Următor", + completeText: "Finalizare", + otherItemText: "Altul(precizaţi)", + progressText: "Pagina {0} din {1}", + emptySurvey: "Nu sunt întrebări pentru acest chestionar", + completingSurvey: "Vă mulţumim pentru timpul acordat!", + loadingSurvey: "Chestionarul se încarcă...", + optionsCaption: "Alegeţi...", + requiredError: "Răspunsul la această întrebare este obligatoriu.", + requiredInAllRowsError: "Toate răspunsurile sunt obligatorii", + numericError: "Răspunsul trebuie să fie numeric.", + textMinLength: "Trebuie să introduci minim {0} caractere.", + minSelectError: "Trebuie să selectezi minim {0} opţiuni.", + maxSelectError: "Trebuie să selectezi maxim {0} opţiuni.", + numericMinMax: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}", + numericMin: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}", + numericMax: "Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}", + invalidEmail: "Trebuie să introduceţi o adresa de email validă.", + exceedMaxSize: "Dimensiunea fişierului nu trebuie să depăşească {0}.", + otherRequiredError: "Trebuie să completezi câmpul 'Altul'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ro"] = romanianSurveyStrings; + + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export russianSurveyStrings */ + +var russianSurveyStrings = { + pagePrevText: "Назад", + pageNextText: "Далее", + completeText: "Готово", + progressText: "Страница {0} из {1}", + emptySurvey: "Нет ни одного вопроса.", + completingSurvey: "Благодарим Вас за заполнение анкеты!", + loadingSurvey: "Загрузка с сервера...", + otherItemText: "Другое (пожалуйста, опишите)", + optionsCaption: "Выбрать...", + requiredError: "Пожалуйста, ответьте на вопрос.", + numericError: "Ответ должен быть числом.", + textMinLength: "Пожалуйста, введите хотя бы {0} символов.", + minSelectError: "Пожалуйста, выберите хотя бы {0} вариантов.", + maxSelectError: "Пожалуйста, выберите не более {0} вариантов.", + numericMinMax: "'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}", + numericMin: "'{0}' должно быть равным или больше, чем {1}", + numericMax: "'{0}' должно быть равным или меньше, чем {1}", + invalidEmail: "Пожалуйста, введите действительный адрес электронной почты.", + otherRequiredError: "Пожалуйста, введите данные в поле \"Другое\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ru"] = russianSurveyStrings; + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export swedishSurveyStrings */ +//Create by Mattias Asplund + +var swedishSurveyStrings = { + pagePrevText: "Föregående", + pageNextText: "Nästa", + completeText: "Färdig", + otherItemText: "Annat (beskriv)", + progressText: "Sida {0} av {1}", + emptySurvey: "Det finns ingen synlig sida eller fråga i enkäten.", + completingSurvey: "Tack för att du genomfört enkäten!!", + loadingSurvey: "Enkäten laddas...", + optionsCaption: "Välj...", + requiredError: "Var vänlig besvara frågan.", + requiredInAllRowsError: "Var vänlig besvara frågorna på alla rader.", + numericError: "Värdet ska vara numeriskt.", + textMinLength: "Var vänlig ange minst {0} tecken.", + minRowCountError: "Var vänlig fyll i minst {0} rader.", + minSelectError: "Var vänlig välj åtminstone {0} varianter.", + maxSelectError: "Var vänlig välj inte fler än {0} varianter.", + numericMinMax: "'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}", + numericMin: "'{0}' ska vara lika med eller mer än {1}", + numericMax: "'{0}' ska vara lika med eller mindre än {1}", + invalidEmail: "Var vänlig ange en korrekt e-postadress.", + urlRequestError: "Förfrågan returnerade felet '{0}'. {1}", + urlGetChoicesError: "Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt", + exceedMaxSize: "Filstorleken får ej överstiga {0}.", + otherRequiredError: "Var vänlig ange det andra värdet.", + uploadingFile: "Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.", + addRow: "Lägg till rad", + removeRow: "Ta bort" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["sv"] = swedishSurveyStrings; + + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export turkishSurveyStrings */ + +var turkishSurveyStrings = { + pagePrevText: "Geri", + pageNextText: "İleri", + completeText: "Anketi Tamamla", + otherItemText: "Diğer (açıklayınız)", + progressText: "Sayfa {0} / {1}", + emptySurvey: "Ankette görüntülenecek sayfa ya da soru mevcut değil.", + completingSurvey: "Anketimizi tamamladığınız için teşekkür ederiz.", + loadingSurvey: "Anket sunucudan yükleniyor ...", + optionsCaption: "Seçiniz ...", + requiredError: "Lütfen soruya cevap veriniz", + numericError: "Girilen değer numerik olmalıdır", + textMinLength: "En az {0} sembol giriniz.", + minRowCountError: "Lütfen en az {0} satırı doldurun.", + minSelectError: "Lütfen en az {0} seçeneği seçiniz.", + maxSelectError: "Lütfen {0} adetten fazla seçmeyiniz.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "'{0}' değeri {1} değerine eşit veya büyük olmalıdır", + numericMax: "'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.", + invalidEmail: "Lütfen geçerli bir eposta adresi giriniz.", + urlRequestError: "Talebi şu hatayı döndü '{0}'. {1}", + urlGetChoicesError: "Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.", + exceedMaxSize: "Dosya boyutu {0} değerini geçemez.", + otherRequiredError: "Lütfen diğer değerleri giriniz.", + uploadingFile: "Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.", + addRow: "Satır Ekle", + removeRow: "Kaldır" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["tr"] = turkishSurveyStrings; + + +/***/ }), +/* 63 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxModel; }); + + + + +var QuestionCheckboxModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxModel, _super); + function QuestionCheckboxModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionCheckboxModel.prototype.getHasOther = function (val) { + if (!val || !Array.isArray(val)) + return false; + return val.indexOf(this.otherItem.value) >= 0; + }; + QuestionCheckboxModel.prototype.valueFromDataCore = function (val) { + if (!val || !Array.isArray(val)) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) + return val; + if (this.hasUnknownValue(val[i])) { + this.comment = val[i]; + var newVal = val.slice(); + newVal[i] = this.otherItem.value; + return newVal; + } + } + return val; + }; + QuestionCheckboxModel.prototype.valueToDataCore = function (val) { + if (!val || !val.length) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) { + if (this.getComment()) { + var newVal = val.slice(); + newVal[i] = this.getComment(); + return newVal; + } + } + } + return val; + }; + QuestionCheckboxModel.prototype.getType = function () { + return "checkbox"; + }; + return QuestionCheckboxModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkbox", [], function () { return new QuestionCheckboxModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("checkbox", function (name) { var q = new QuestionCheckboxModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 64 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCommentModel; }); + + + + + +var QuestionCommentModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCommentModel, _super); + function QuestionCommentModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rows = 4; + _this.cols = 50; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionCommentModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionCommentModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionCommentModel.prototype.getType = function () { + return "comment"; + }; + QuestionCommentModel.prototype.isEmpty = function () { + return _super.prototype.isEmpty.call(this) || this.value == ""; + }; + return QuestionCommentModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("comment", [{ name: "cols:number", default: 50 }, { name: "rows:number", default: 4 }, + { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionCommentModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("comment", function (name) { return new QuestionCommentModel(name); }); + + +/***/ }), +/* 65 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionDropdownModel; }); + + + + + + +var QuestionDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionDropdownModel, _super); + function QuestionDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionDropdownModel.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionDropdownModel.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionDropdownModel.prototype.getType = function () { + return "dropdown"; + }; + QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["b" /* QuestionSelectBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("dropdown", [{ name: "optionsCaption", serializationProperty: "locOptionsCaption" }], function () { return new QuestionDropdownModel(""); }, "selectbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("dropdown", function (name) { var q = new QuestionDropdownModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 66 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFileModel; }); + + + + + + +var QuestionFileModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFileModel, _super); + function QuestionFileModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.showPreviewValue = false; + _this.isUploading = false; + return _this; + } + QuestionFileModel.prototype.getType = function () { + return "file"; + }; + Object.defineProperty(QuestionFileModel.prototype, "showPreview", { + get: function () { return this.showPreviewValue; }, + set: function (value) { this.showPreviewValue = value; }, + enumerable: true, + configurable: true + }); + QuestionFileModel.prototype.loadFile = function (file) { + var self = this; + if (this.survey && !this.survey.uploadFile(this.name, file, this.storeDataAsText, function (status) { self.isUploading = status == "uploading"; })) + return; + this.setFileValue(file); + }; + QuestionFileModel.prototype.setFileValue = function (file) { + if (!FileReader) + return; + if (!this.showPreview && !this.storeDataAsText) + return; + if (this.checkFileForErrors(file)) + return; + var fileReader = new FileReader(); + var self = this; + fileReader.onload = function (e) { + if (self.showPreview) { + self.previewValue = self.isFileImage(file) ? fileReader.result : null; + self.fireCallback(self.previewValueLoadedCallback); + } + if (self.storeDataAsText) { + self.value = fileReader.result; + } + }; + fileReader.readAsDataURL(file); + }; + QuestionFileModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.isUploading) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("uploadingFile"))); + } + }; + QuestionFileModel.prototype.checkFileForErrors = function (file) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + if (this.maxSize > 0 && file.size > this.maxSize) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["d" /* ExceedSizeError */](this.maxSize)); + } + if (errorLength != this.errors.length || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + return this.errors.length > 0; + }; + QuestionFileModel.prototype.isFileImage = function (file) { + if (!file || !file.type) + return; + var str = file.type.toLowerCase(); + return str.indexOf("image") == 0; + }; + return QuestionFileModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("file", ["showPreview:boolean", "imageHeight", "imageWidth", "storeDataAsText:boolean", "maxSize:number"], function () { return new QuestionFileModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("file", function (name) { return new QuestionFileModel(name); }); + + +/***/ }), +/* 67 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionbase__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionHtmlModel; }); + + + + + +var QuestionHtmlModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionHtmlModel, _super); + function QuestionHtmlModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locHtmlValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionHtmlModel.prototype.getType = function () { + return "html"; + }; + Object.defineProperty(QuestionHtmlModel.prototype, "html", { + get: function () { return this.locHtml.text; }, + set: function (value) { this.locHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "locHtml", { + get: function () { return this.locHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "processedHtml", { + get: function () { return this.survey ? this.survey.processHtml(this.html) : this.html; }, + enumerable: true, + configurable: true + }); + return QuestionHtmlModel; +}(__WEBPACK_IMPORTED_MODULE_1__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("html", [{ name: "html:html", serializationProperty: "locHtml" }], function () { return new QuestionHtmlModel(""); }, "questionbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("html", function (name) { return new QuestionHtmlModel(name); }); + + +/***/ }), +/* 68 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixModel; }); + + + + + + + + +var MatrixRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixRowModel, _super); + function MatrixRowModel(name, text, fullName, data, value) { + var _this = _super.call(this) || this; + _this.name = name; + _this.text = text; + _this.fullName = fullName; + _this.data = data; + _this.rowValue = value; + return _this; + } + Object.defineProperty(MatrixRowModel.prototype, "value", { + get: function () { return this.rowValue; }, + set: function (newValue) { + this.rowValue = newValue; + if (this.data) + this.data.onMatrixRowChanged(this); + this.onValueChanged(); + }, + enumerable: true, + configurable: true + }); + MatrixRowModel.prototype.onValueChanged = function () { + }; + return MatrixRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var QuestionMatrixModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixModel, _super); + function QuestionMatrixModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRowChanging = false; + _this.isAllRowRequired = false; + _this.columnsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixModel.prototype.getType = function () { + return "matrix"; + }; + Object.defineProperty(QuestionMatrixModel.prototype, "hasRows", { + get: function () { + return this.rowsValue.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.columnsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "visibleRows", { + get: function () { + var result = new Array(); + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, this.name + '_' + this.rows[i].value.toString(), val[this.rows[i].value])); + } + if (result.length == 0) { + result.push(this.createMatrixRow(null, "", this.name, val)); + } + this.generatedVisibleRows = result; + return result; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () { return this.hasValuesInAllRows(); }; + QuestionMatrixModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("requiredInAllRowsError"))); + } + }; + QuestionMatrixModel.prototype.hasErrorInRows = function () { + if (!this.isAllRowRequired) + return false; + return !this.hasValuesInAllRows(); + }; + QuestionMatrixModel.prototype.hasValuesInAllRows = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var val = rows[i].value; + if (!val) + return false; + } + return true; + }; + QuestionMatrixModel.prototype.createMatrixRow = function (name, text, fullName, value) { + return new MatrixRowModel(name, text, fullName, this, value); + }; + QuestionMatrixModel.prototype.onValueChanged = function () { + if (this.isRowChanging || !(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.value; + if (!val) + val = {}; + if (this.rows.length == 0) { + this.generatedVisibleRows[0].value = val; + } + else { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + var rowVal = val[row.name] ? val[row.name] : null; + this.generatedVisibleRows[i].value = rowVal; + } + } + this.isRowChanging = false; + }; + //IMatrixData + QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) { + if (this.isRowChanging) + return; + this.isRowChanging = true; + if (!this.hasRows) { + this.setNewValue(row.value); + } + else { + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[row.name] = row.value; + this.setNewValue(newValue); + } + this.isRowChanging = false; + }; + return QuestionMatrixModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("matrix", [{ name: "columns:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.columns); }, onSetValue: function (obj, value) { obj.columns = value; } }, + { name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }, + "isAllRowRequired:boolean"], function () { return new QuestionMatrixModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrix", function (name) { var q = new QuestionMatrixModel(name); q.rows = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultRows; q.columns = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultColums; return q; }); + + +/***/ }), +/* 69 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDropdownModel; }); + + + + + +var MatrixDropdownRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownRowModel, _super); + function MatrixDropdownRowModel(name, text, data, value) { + var _this = _super.call(this, data, value) || this; + _this.name = name; + _this.text = text; + return _this; + } + Object.defineProperty(MatrixDropdownRowModel.prototype, "rowName", { + get: function () { return this.name; }, + enumerable: true, + configurable: true + }); + return MatrixDropdownRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModel, _super); + function QuestionMatrixDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixDropdownModel.prototype.getType = function () { + return "matrixdropdown"; + }; + Object.defineProperty(QuestionMatrixDropdownModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModel.prototype.generateRows = function () { + var result = new Array(); + if (!this.rows || this.rows.length === 0) + return result; + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, val[this.rows[i].value])); + } + return result; + }; + QuestionMatrixDropdownModel.prototype.createMatrixRow = function (name, text, value) { + return new MatrixDropdownRowModel(name, text, this, value); + }; + return QuestionMatrixDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdown", [{ name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }], function () { return new QuestionMatrixDropdownModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdropdown", function (name) { var q = new QuestionMatrixDropdownModel(name); q.choices = [1, 2, 3, 4, 5]; q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultColums; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 70 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDynamicRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDynamicModel; }); + + + + + + + +var MatrixDynamicRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDynamicRowModel, _super); + function MatrixDynamicRowModel(index, data, value) { + var _this = _super.call(this, data, value) || this; + _this.index = index; + return _this; + } + Object.defineProperty(MatrixDynamicRowModel.prototype, "rowName", { + get: function () { return "row" + this.index; }, + enumerable: true, + configurable: true + }); + return MatrixDynamicRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDynamicModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamicModel, _super); + function QuestionMatrixDynamicModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowCounter = 0; + _this.rowCountValue = 2; + _this.minRowCount = 0; + _this.locAddRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + _this.locRemoveRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionMatrixDynamicModel.prototype.getType = function () { + return "matrixdynamic"; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "rowCount", { + get: function () { return this.rowCountValue; }, + set: function (val) { + if (val < 0 || val > QuestionMatrixDynamicModel.MaxRowCount) + return; + this.rowCountValue = val; + if (this.value && this.value.length > val) { + var qVal = this.value; + qVal.splice(val); + this.value = qVal; + } + this.fireCallback(this.rowCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.addRow = function () { + if (this.generatedVisibleRows) { + this.generatedVisibleRows.push(this.createMatrixRow(null)); + } + this.rowCount++; + }; + QuestionMatrixDynamicModel.prototype.removeRow = function (index) { + if (index < 0 || index >= this.rowCount) + return; + if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) { + this.generatedVisibleRows.splice(index, 1); + } + if (this.value) { + var val = this.createNewValue(this.value); + val.splice(index, 1); + val = this.deleteRowValue(val, null); + this.value = val; + } + this.rowCount--; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "addRowText", { + get: function () { return this.locAddRowText.text ? this.locAddRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("addRow"); }, + set: function (value) { this.locAddRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locAddRowText", { + get: function () { return this.locAddRowTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "removeRowText", { + get: function () { return this.locRemoveRowText.text ? this.locRemoveRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("removeRow"); }, + set: function (value) { this.locRemoveRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locRemoveRowText", { + get: function () { return this.locRemoveRowTextValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () { return false; }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "cachedVisibleRows", { + get: function () { + if (this.generatedVisibleRows && this.generatedVisibleRows.length == this.rowCount) + return this.generatedVisibleRows; + return this.visibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["c" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("minRowCountError")["format"](this.minRowCount))); + } + }; + QuestionMatrixDynamicModel.prototype.hasErrorInRows = function () { + if (this.minRowCount <= 0 || !this.generatedVisibleRows) + return false; + var res = false; + var setRowCount = 0; + for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) { + var row = this.generatedVisibleRows[rowIndex]; + if (!row.isEmpty) + setRowCount++; + } + return setRowCount < this.minRowCount; + }; + QuestionMatrixDynamicModel.prototype.generateRows = function () { + var result = new Array(); + if (this.rowCount === 0) + return result; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.rowCount; i++) { + result.push(this.createMatrixRow(this.getRowValueByIndex(val, i))); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) { + return new MatrixDynamicRowModel(this.rowCounter++, this, value); + }; + QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) { + var newRowCount = val && Array.isArray(val) ? val.length : 0; + if (newRowCount <= this.rowCount) + return; + this.rowCountValue = newRowCount; + if (this.generatedVisibleRows) { + this.generatedVisibleRows = this.visibleRows; + } + }; + QuestionMatrixDynamicModel.prototype.createNewValue = function (curValue) { + var result = curValue; + if (!result) + result = []; + var r = []; + if (result.length > this.rowCount) + result.splice(this.rowCount - 1); + for (var i = result.length; i < this.rowCount; i++) { + result.push({}); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) { + var isEmpty = true; + for (var i = 0; i < newValue.length; i++) { + if (Object.keys(newValue[i]).length > 0) { + isEmpty = false; + break; + } + } + return isEmpty ? null : newValue; + }; + QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) { + return index >= 0 && index < questionValue.length ? questionValue[index] : null; + }; + QuestionMatrixDynamicModel.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + return this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row)); + }; + return QuestionMatrixDynamicModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +QuestionMatrixDynamicModel.MaxRowCount = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdynamic", [{ name: "rowCount:number", default: 2 }, { name: "minRowCount:number", default: 0 }, + { name: "addRowText", serializationProperty: "locAddRowText" }, { name: "removeRowText", serializationProperty: "locRemoveRowText" }], function () { return new QuestionMatrixDynamicModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdynamic", function (name) { var q = new QuestionMatrixDynamicModel(name); q.choices = [1, 2, 3, 4, 5]; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 71 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__validator__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MultipleTextItemModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMultipleTextModel; }); + + + + + + + + +var MultipleTextItemModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleTextItemModel, _super); + function MultipleTextItemModel(name, title) { + if (name === void 0) { name = null; } + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.validators = new Array(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.title = title; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + MultipleTextItemModel.prototype.getType = function () { + return "multipletextitem"; + }; + MultipleTextItemModel.prototype.setData = function (data) { + this.data = data; + }; + Object.defineProperty(MultipleTextItemModel.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "fullTitle", { + get: function () { + var res = this.title; + if (this.isRequired && this.data) + res = this.data.getIsRequiredText() + ' ' + res; + return res; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "value", { + get: function () { + return this.data ? this.data.getMultipleTextValue(this.name) : null; + }, + set: function (value) { + if (this.data != null) { + this.data.setMultipleTextValue(this.name, value); + } + }, + enumerable: true, + configurable: true + }); + MultipleTextItemModel.prototype.onValueChanged = function (newValue) { + }; + //IValidatorOwner + MultipleTextItemModel.prototype.getValidatorTitle = function () { return this.title; }; + //ILocalizableOwner + MultipleTextItemModel.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + return MultipleTextItemModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var QuestionMultipleTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleTextModel, _super); + function QuestionMultipleTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + _this.itemSize = 25; + _this.itemsValues = new Array(); + _this.isMultipleItemValueChanging = false; + _this.setItemsOverriddenMethods(); + return _this; + } + QuestionMultipleTextModel.prototype.getType = function () { + return "multipletext"; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "items", { + get: function () { return this.itemsValues; }, + set: function (value) { + this.itemsValues = value; + this.setItemsOverriddenMethods(); + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.addItem = function (name, title) { + if (title === void 0) { title = null; } + var item = this.createTextItem(name, title); + this.items.push(item); + return item; + }; + QuestionMultipleTextModel.prototype.setItemsOverriddenMethods = function () { + var self = this; + this.itemsValues.push = function (value) { + value.setData(self); + var result = Array.prototype.push.call(this, value); + self.fireCallback(self.colCountChangedCallback); + return result; + }; + this.itemsValues.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var result = (_a = Array.prototype.splice).call.apply(_a, [self.itemsValues, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].setData(self); + } + self.fireCallback(self.colCountChangedCallback); + return result; + var _a; + }; + }; + QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () { + for (var i = 0; i < this.items.length; i++) { + if (!this.items[i].value) + return false; + } + return true; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 1 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.getRows = function () { + var colCount = this.colCount; + var items = this.items; + var rows = []; + var index = 0; + for (var i = 0; i < items.length; i++) { + if (index == 0) { + rows.push([]); + } + rows[rows.length - 1].push(items[i]); + index++; + if (index >= colCount) { + index = 0; + } + } + return rows; + }; + QuestionMultipleTextModel.prototype.onValueChanged = function () { + _super.prototype.onValueChanged.call(this); + this.onItemValueChanged(); + }; + QuestionMultipleTextModel.prototype.createTextItem = function (name, title) { + return new MultipleTextItemModel(name, title); + }; + QuestionMultipleTextModel.prototype.onItemValueChanged = function () { + if (this.isMultipleItemValueChanging) + return; + for (var i = 0; i < this.items.length; i++) { + var itemValue = null; + if (this.value && (this.items[i].name in this.value)) { + itemValue = this.value[this.items[i].name]; + } + this.items[i].onValueChanged(itemValue); + } + }; + QuestionMultipleTextModel.prototype.runValidators = function () { + var error = _super.prototype.runValidators.call(this); + if (error != null) + return error; + for (var i = 0; i < this.items.length; i++) { + error = new __WEBPACK_IMPORTED_MODULE_2__validator__["a" /* ValidatorRunner */]().run(this.items[i]); + if (error != null) + return error; + } + return null; + }; + QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var res = _super.prototype.hasErrors.call(this, fireCallback); + if (!res) + res = this.hasErrorInItems(fireCallback); + return res; + }; + QuestionMultipleTextModel.prototype.hasErrorInItems = function (fireCallback) { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.isRequired && !item.value) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["a" /* AnswerRequiredError */]()); + if (fireCallback) { + this.fireCallback(this.errorsChangedCallback); + } + return true; + } + } + return false; + }; + //IMultipleTextData + QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) { + if (!this.value) + return null; + return this.value[name]; + }; + QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) { + this.isMultipleItemValueChanging = true; + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[name] = value; + this.setNewValue(newValue); + this.isMultipleItemValueChanging = false; + }; + QuestionMultipleTextModel.prototype.getIsRequiredText = function () { + return this.survey ? this.survey.requiredText : ""; + }; + return QuestionMultipleTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletextitem", ["name", "isRequired:boolean", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "title", serializationProperty: "locTitle" }, { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], function () { return new MultipleTextItemModel(""); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletext", [{ name: "!items:textitems", className: "multipletextitem" }, + { name: "itemSize:number", default: 25 }, { name: "colCount:number", default: 1, choices: [1, 2, 3, 4] }], function () { return new QuestionMultipleTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("multipletext", function (name) { var q = new QuestionMultipleTextModel(name); q.addItem("text1"); q.addItem("text2"); return q; }); + + +/***/ }), +/* 72 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(13); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRadiogroupModel; }); + + + + +var QuestionRadiogroupModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRadiogroupModel, _super); + function QuestionRadiogroupModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionRadiogroupModel.prototype.getType = function () { + return "radiogroup"; + }; + QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionRadiogroupModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("radiogroup", [], function () { return new QuestionRadiogroupModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("radiogroup", function (name) { var q = new QuestionRadiogroupModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 73 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRatingModel; }); + + + + + + +var QuestionRatingModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRatingModel, _super); + function QuestionRatingModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rates = __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locMinRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + _this.locMaxRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionRatingModel.prototype, "rateValues", { + get: function () { return this.rates; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(this.rates, newValue); + this.fireCallback(this.rateValuesChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "visibleRateValues", { + get: function () { + if (this.rateValues.length > 0) + return this.rateValues; + return QuestionRatingModel.defaultRateValues; + }, + enumerable: true, + configurable: true + }); + QuestionRatingModel.prototype.getType = function () { + return "rating"; + }; + QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + QuestionRatingModel.prototype.supportComment = function () { return true; }; + QuestionRatingModel.prototype.supportOther = function () { return true; }; + Object.defineProperty(QuestionRatingModel.prototype, "minRateDescription", { + get: function () { return this.locMinRateDescription.text; }, + set: function (value) { this.locMinRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMinRateDescription", { + get: function () { return this.locMinRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + Object.defineProperty(QuestionRatingModel.prototype, "maxRateDescription", { + get: function () { return this.locMaxRateDescription.text; }, + set: function (value) { this.locMaxRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMaxRateDescription", { + get: function () { return this.locMaxRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + return QuestionRatingModel; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +QuestionRatingModel.defaultRateValues = []; +__WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(QuestionRatingModel.defaultRateValues, [1, 2, 3, 4, 5]); +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("rating", ["hasComment:boolean", { name: "rateValues:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].getData(obj.rateValues); }, onSetValue: function (obj, value) { obj.rateValues = value; } }, + { name: "minRateDescription", alternativeName: "mininumRateDescription", serializationProperty: "locMinRateDescription" }, + { name: "maxRateDescription", alternativeName: "maximumRateDescription", serializationProperty: "locMaxRateDescription" }], function () { return new QuestionRatingModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("rating", function (name) { return new QuestionRatingModel(name); }); + + +/***/ }), +/* 74 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionTextModel; }); + + + + + +var QuestionTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionTextModel, _super); + function QuestionTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.size = 25; + _this.inputType = "text"; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionTextModel.prototype.getType = function () { + return "text"; + }; + QuestionTextModel.prototype.isEmpty = function () { return _super.prototype.isEmpty.call(this) || this.value == ""; }; + QuestionTextModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + Object.defineProperty(QuestionTextModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionTextModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionTextModel.prototype.setNewValue = function (newValue) { + newValue = this.correctValueType(newValue); + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionTextModel.prototype.correctValueType = function (newValue) { + if (!newValue) + return newValue; + if (this.inputType == "number" || this.inputType == "range") { + return this.isNumber(newValue) ? parseFloat(newValue) : ""; + } + return newValue; + }; + QuestionTextModel.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return QuestionTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("text", [{ name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }, + { name: "size:number", default: 25 }, { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_1__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("text", function (name) { return new QuestionTextModel(name); }); + + +/***/ }), +/* 75 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(23); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindowModel; }); + + + +var SurveyWindowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindowModel, _super); + function SurveyWindowModel(jsonObj) { + var _this = _super.call(this) || this; + _this.surveyValue = _this.createSurvey(jsonObj); + _this.surveyValue.showTitle = false; + _this.windowElement = document.createElement("div"); + return _this; + } + SurveyWindowModel.prototype.getType = function () { return "window"; }; + Object.defineProperty(SurveyWindowModel.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isShowing", { + get: function () { return this.isShowingValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isExpanded", { + get: function () { return this.isExpandedValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "title", { + get: function () { return this.titleValue ? this.titleValue : this.survey.title; }, + set: function (value) { this.titleValue = value; }, + enumerable: true, + configurable: true + }); + SurveyWindowModel.prototype.expand = function () { + this.expandcollapse(true); + }; + SurveyWindowModel.prototype.collapse = function () { + this.expandcollapse(false); + }; + SurveyWindowModel.prototype.createSurvey = function (jsonObj) { + return new __WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */](jsonObj); + }; + SurveyWindowModel.prototype.expandcollapse = function (value) { + this.isExpandedValue = value; + }; + return SurveyWindowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +SurveyWindowModel.surveyElementName = "windowSurveyJS"; + + +/***/ }), +/* 76 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Trigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTrigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyTriggerVisible; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyTriggerComplete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyTriggerSetValue; }); + + + +var Trigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Trigger, _super); + function Trigger() { + var _this = _super.call(this) || this; + _this.opValue = "equal"; + return _this; + } + Object.defineProperty(Trigger, "operators", { + get: function () { + if (Trigger.operatorsValue != null) + return Trigger.operatorsValue; + Trigger.operatorsValue = { + empty: function (value, expectedValue) { return !value; }, + notempty: function (value, expectedValue) { return !(!value); }, + equal: function (value, expectedValue) { return value == expectedValue; }, + notequal: function (value, expectedValue) { return value != expectedValue; }, + contains: function (value, expectedValue) { return value && value["indexOf"] && value.indexOf(expectedValue) > -1; }, + notcontains: function (value, expectedValue) { return !value || !value["indexOf"] || value.indexOf(expectedValue) == -1; }, + greater: function (value, expectedValue) { return value > expectedValue; }, + less: function (value, expectedValue) { return value < expectedValue; }, + greaterorequal: function (value, expectedValue) { return value >= expectedValue; }, + lessorequal: function (value, expectedValue) { return value <= expectedValue; } + }; + return Trigger.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Trigger.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Trigger.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Trigger.prototype.check = function (value) { + if (Trigger.operators[this.operator](value, this.value)) { + this.onSuccess(); + } + else { + this.onFailure(); + } + }; + Trigger.prototype.onSuccess = function () { }; + Trigger.prototype.onFailure = function () { }; + return Trigger; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +Trigger.operatorsValue = null; +var SurveyTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTrigger, _super); + function SurveyTrigger() { + var _this = _super.call(this) || this; + _this.owner = null; + return _this; + } + SurveyTrigger.prototype.setOwner = function (owner) { + this.owner = owner; + }; + Object.defineProperty(SurveyTrigger.prototype, "isOnNextPage", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + return SurveyTrigger; +}(Trigger)); + +var SurveyTriggerVisible = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerVisible, _super); + function SurveyTriggerVisible() { + var _this = _super.call(this) || this; + _this.pages = []; + _this.questions = []; + return _this; + } + SurveyTriggerVisible.prototype.getType = function () { return "visibletrigger"; }; + SurveyTriggerVisible.prototype.onSuccess = function () { this.onTrigger(this.onItemSuccess); }; + SurveyTriggerVisible.prototype.onFailure = function () { this.onTrigger(this.onItemFailure); }; + SurveyTriggerVisible.prototype.onTrigger = function (func) { + if (!this.owner) + return; + var objects = this.owner.getObjects(this.pages, this.questions); + for (var i = 0; i < objects.length; i++) { + func(objects[i]); + } + }; + SurveyTriggerVisible.prototype.onItemSuccess = function (item) { item.visible = true; }; + SurveyTriggerVisible.prototype.onItemFailure = function (item) { item.visible = false; }; + return SurveyTriggerVisible; +}(SurveyTrigger)); + +var SurveyTriggerComplete = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerComplete, _super); + function SurveyTriggerComplete() { + return _super.call(this) || this; + } + SurveyTriggerComplete.prototype.getType = function () { return "completetrigger"; }; + Object.defineProperty(SurveyTriggerComplete.prototype, "isOnNextPage", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + SurveyTriggerComplete.prototype.onSuccess = function () { if (this.owner) + this.owner.doComplete(); }; + return SurveyTriggerComplete; +}(SurveyTrigger)); + +var SurveyTriggerSetValue = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerSetValue, _super); + function SurveyTriggerSetValue() { + return _super.call(this) || this; + } + SurveyTriggerSetValue.prototype.getType = function () { return "setvaluetrigger"; }; + SurveyTriggerSetValue.prototype.onSuccess = function () { + if (!this.setToName || !this.owner) + return; + this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable); + }; + return SurveyTriggerSetValue; +}(SurveyTrigger)); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("trigger", ["operator", "!value"]); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("surveytrigger", ["!name"], null, "trigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("visibletrigger", ["pages", "questions"], function () { return new SurveyTriggerVisible(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("completetrigger", [], function () { return new SurveyTriggerComplete(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("setvaluetrigger", ["!setToName", "setValue", "isVariable:boolean"], function () { return new SurveyTriggerSetValue(); }, "surveytrigger"); + + +/***/ }), +/* 77 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return browser; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return compareVersions; }); +var webkitRegExp = /(webkit)[ \/]([\w.]+)/, ieRegExp = /(msie) (\d{1,2}\.\d)/, ie11RegExp = /(trident).*rv:(\d{1,2}\.\d)/, msEdge = /(edge)\/((\d+)?[\w\.]+)/, mozillaRegExp = /(mozilla)(?:.*? rv:([\w.]+))/; +var browserFromUA = function (ua) { + ua = ua.toLowerCase(); + var result = {}, matches = ieRegExp.exec(ua) || ie11RegExp.exec(ua) || msEdge.exec(ua) || ua.indexOf("compatible") < 0 && mozillaRegExp.exec(ua) || webkitRegExp.exec(ua) || [], browserName = matches[1], browserVersion = matches[2]; + if (browserName === "trident" || browserName === "edge") { + browserName = "msie"; + } + else if (browserName === "mozilla") { + browserName = "firefox"; + } + if (browserName) { + result[browserName] = true; + result.version = browserVersion; + } + return result; +}; +var browser = browserFromUA(navigator.userAgent); +function compareVersions(a, b) { + var i, diff; + var regExStrip0 = /(\.0+)+$/; + var segmentsA = a.replace(regExStrip0, '').split('.'); + var segmentsB = b.replace(regExStrip0, '').split('.'); + var l = Math.min(segmentsA.length, segmentsB.length); + for (i = 0; i < l; i++) { + diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10); + if (diff) { + return diff; + } + } + return segmentsA.length - segmentsB.length; +} + + + +/***/ }), +/* 78 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__chunks_model__ = __webpack_require__(37); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "AnswerCountValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "EmailValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["c"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "NumericValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["d"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RegexValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["e"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["f"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["g"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorResult", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["h"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["i"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Base", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["j"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Event", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["k"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["l"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ItemValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["m"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "LocalizableString", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["n"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ChoicesRestfull", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["o"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Condition", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["p"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionNode", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["r"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionsParser", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["s"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ProcessValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["t"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["u"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ExceedSizeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["v"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RequreNumericError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["w"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["x"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonIncorrectTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadataClass", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["A"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["B"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeErrorBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["C"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObject", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["D"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["E"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonRequiredPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["F"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonUnknownPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["G"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownCell", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["H"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownColumn", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["I"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["J"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["K"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["L"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["M"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDynamicRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["N"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamicModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["O"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["P"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MultipleTextItemModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["R"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["S"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["T"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["U"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["V"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PageModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["W"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Question", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["X"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionSelectBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_0"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_1"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCommentModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_2"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_3"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ElementFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_5"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFileModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_6"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionHtmlModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_7"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRadiogroupModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_8"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRatingModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_9"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_10"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_11"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTrigger", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_12"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerComplete", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_13"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerSetValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_14"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerVisible", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_15"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Trigger", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_16"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_17"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextPreProcessor", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_18"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dxSurveyService", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_19"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyLocalization", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_20"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyStrings", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_21"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCustomWidget", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_22"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomWidgetCollection", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_23"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__chunks_localization__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__ = __webpack_require__(0); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(17); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStandardCss", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__ = __webpack_require__(35); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultBootstrapCss", function() { return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__react_reactSurvey__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Survey", function() { return __WEBPACK_IMPORTED_MODULE_5__react_reactSurvey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__ = __webpack_require__(15); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_6__react_reactsurveymodel__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__react_reactSurveyNavigationBase__ = __webpack_require__(18); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigationBase", function() { return __WEBPACK_IMPORTED_MODULE_7__react_reactSurveyNavigationBase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__react_reactSurveyNavigation__ = __webpack_require__(27); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigation", function() { return __WEBPACK_IMPORTED_MODULE_8__react_reactSurveyNavigation__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__react_reactpage__ = __webpack_require__(29); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPage", function() { return __WEBPACK_IMPORTED_MODULE_9__react_reactpage__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyRow", function() { return __WEBPACK_IMPORTED_MODULE_9__react_reactpage__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__ = __webpack_require__(14); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestion", function() { return __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionErrors", function() { return __WEBPACK_IMPORTED_MODULE_10__react_reactquestion__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__ = __webpack_require__(8); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyElementBase", function() { return __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionElementBase", function() { return __WEBPACK_IMPORTED_MODULE_11__react_reactquestionelement__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCommentItem", function() { return __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionComment", function() { return __WEBPACK_IMPORTED_MODULE_12__react_reactquestioncomment__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__ = __webpack_require__(39); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckbox", function() { return __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckboxItem", function() { return __WEBPACK_IMPORTED_MODULE_13__react_reactquestioncheckbox__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__react_reactquestiondropdown__ = __webpack_require__(40); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionDropdown", function() { return __WEBPACK_IMPORTED_MODULE_14__react_reactquestiondropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__ = __webpack_require__(44); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdown", function() { return __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdownRow", function() { return __WEBPACK_IMPORTED_MODULE_15__react_reactquestionmatrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__ = __webpack_require__(43); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrix", function() { return __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixRow", function() { return __WEBPACK_IMPORTED_MODULE_16__react_reactquestionmatrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__react_reactquestionhtml__ = __webpack_require__(42); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionHtml", function() { return __WEBPACK_IMPORTED_MODULE_17__react_reactquestionhtml__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__react_reactquestionfile__ = __webpack_require__(41); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionFile", function() { return __WEBPACK_IMPORTED_MODULE_18__react_reactquestionfile__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__ = __webpack_require__(46); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleText", function() { return __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleTextItem", function() { return __WEBPACK_IMPORTED_MODULE_19__react_reactquestionmultipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__react_reactquestionradiogroup__ = __webpack_require__(47); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRadiogroup", function() { return __WEBPACK_IMPORTED_MODULE_20__react_reactquestionradiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__react_reactquestiontext__ = __webpack_require__(49); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionText", function() { return __WEBPACK_IMPORTED_MODULE_21__react_reactquestiontext__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__ = __webpack_require__(45); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamic", function() { return __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamicRow", function() { return __WEBPACK_IMPORTED_MODULE_22__react_reactquestionmatrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__react_reactSurveyProgress__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyProgress", function() { return __WEBPACK_IMPORTED_MODULE_23__react_reactSurveyProgress__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__react_reactquestionrating__ = __webpack_require__(48); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRating", function() { return __WEBPACK_IMPORTED_MODULE_24__react_reactquestionrating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__react_reactSurveyWindow__ = __webpack_require__(38); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return __WEBPACK_IMPORTED_MODULE_25__react_reactSurveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__ = __webpack_require__(4); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ReactQuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_26__react_reactquestionfactory__["a"]; }); +// model + +// localization + +// helpers + +// css standard + +// css bootstrap + +// react + + // TODO need to remove someday + + + + + + + + + + + + + + + + + + + + + // TODO need to remove someday + +//Uncomment to include the "date" question type. +//export {default as SurveyQuestionDate} from "../plugins/react/reactquestiondate"; + + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAyYzQ3ZTE5MDVmZjBhZDM1MWU0MiIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvanNvbm9iamVjdC50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnkudHN4Iiwid2VicGFjazovLy8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2Vycm9yLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaXRlbXZhbHVlLnRzIiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY29tbWVudC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2Jhc2VzZWxlY3QudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHN1cnZleW1vZGVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9ucy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nob2ljZXNSZXN0ZnVsbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uYmFzZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5LnRzIiwid2VicGFjazovLy8uL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzIiwid2VicGFjazovLy8uL3NyYy92YWxpZGF0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cGFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmRpdGlvbnNQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFnZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFuZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXAudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0U3VydmV5V2luZG93LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmNoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmZpbGUudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uaHRtbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXgudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4ZHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4ZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tdWx0aXBsZXRleHQudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9ucmFkaW9ncm91cC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25yYXRpbmcudHN4Iiwid2VicGFjazovLy8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZHV0Y2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9yb21hbmlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3J1c3NpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9zd2VkaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fY2hlY2tib3gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2NvbW1lbnQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9maWxlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9odG1sLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9tYXRyaXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9tdWx0aXBsZXRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX3JhZGlvZ3JvdXAudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX3JhdGluZy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5V2luZG93LnRzIiwid2VicGFjazovLy8uL3NyYy90cmlnZ2VyLnRzIiwid2VicGFjazovLy8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9yZWFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDaEVPLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLE1BQU07SUFDdEQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEQsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUksbUJBQW9CLFNBQVMsRUFBRSxTQUFTO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLGdCQUFnQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pILENBQUM7QUFBQSxDQUFDO0FBSUssSUFBSSxVQUFVLEdBQUcsVUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJO0lBQzNELElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxFQUFFLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztRQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ILElBQUk7UUFBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxH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QUFDO1FBQy9ELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxDQUFDO0FBS0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3Q0Q7QUFBQSxRQUFRO0FBQ3VCO0FBRS9CLGVBQWU7QUFDZ0I7QUFFL0IsVUFBVTtBQUN3QjtBQUVsQyxlQUFlO0FBQzhDO0FBQzdELGdCQUFnQjtBQUMrQztBQUUvRCxRQUFRO0FBQ29DO0FBQ2UsQ0FBQyw4QkFBOEI7QUFDdEI7QUFDSTtBQUNSO0FBQ1A7QUFDbUI7QUFDZTtBQUNJO0FBQ0c7QUFDNUI7QUFDNkM7QUFDeEI7QUFDN0I7QUFDQTtBQUNnRDtBQUNwQztBQUNaO0FBQ2tEO0FBQ3BEO0FBQ007QUFDVjtBQUNXLENBQUMsOEJBQThCO0FBQ1o7QUFFdEYsZ0RBQWdEO0FBQ2hELG1GQUFtRiIsImZpbGUiOiIuL3BhY2thZ2VzL3N1cnZleS1yZWFjdC9zdXJ2ZXkucmVhY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIlN1cnZleVwiLCBbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5XCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8zX18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNzgpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDJjNDdlMTkwNWZmMGFkMzUxZTQyIiwiZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdFtcImFzc2lnblwiXSB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcykgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7IH1cclxuICAgIHRoaXNDbGFzcy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcykgOiAoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59O1xyXG5cclxuZGVjbGFyZSB2YXIgUmVmbGVjdDtcclxuXHJcbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsImV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xyXG4gICAgY3VycmVudExvY2FsZTogXCJcIixcclxuICAgIGxvY2FsZXM6IHt9LFxyXG4gICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZSA/IHRoaXMubG9jYWxlc1t0aGlzLmN1cnJlbnRMb2NhbGVdIDogc3VydmV5U3RyaW5ncztcclxuICAgICAgICBpZiAoIWxvYyB8fCAhbG9jW3N0ck5hbWVdKSBsb2MgPSBzdXJ2ZXlTdHJpbmdzO1xyXG4gICAgICAgIHJldHVybiBsb2Nbc3RyTmFtZV07XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYWxlczogZnVuY3Rpb24gKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXMgPSBbXTtcclxuICAgICAgICByZXMucHVzaChcIlwiKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5sb2NhbGVzKSB7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcy5zb3J0KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufTtcclxuZXhwb3J0IHZhciBzdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkNvbXBsZXRlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk90aGVyIChkZXNjcmliZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIlRoZXJlIGlzIG5vIHZpc2libGUgcGFnZSBvciBxdWVzdGlvbiBpbiB0aGUgc3VydmV5LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiU3VydmV5IGlzIGxvYWRpbmcuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkNob29zZS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSBudW1lcmljLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IHN5bWJvbHMuXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IHN5bWJvbHMuXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBtb3JlIHRoYW4gezB9IGFuZCBsZXNzIHRoYW4gezF9IHN5bWJvbHMuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlBsZWFzZSBmaWxsIGluIGF0IGxlYXN0IHswfSByb3dzLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudHMuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IG5vIG1vcmUgdGhhbiB7MH0gdmFyaWFudHMuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZXJyb3IgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiVGhlIGZpbGUgc2l6ZSBzaG91bGQgbm90IGV4Y2VlZCB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGVudGVyIHRoZSBvdGhlciB2YWx1ZS5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiWW91ciBmaWxlIGlzIHVwbG9hZGluZy4gUGxlYXNlIHdhaXQgc2V2ZXJhbCBzZWNvbmRzIGFuZCB0cnkgYWdhaW4uXCIsXHJcbiAgICBhZGRSb3c6IFwiQWRkIHJvd1wiLFxyXG4gICAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxyXG4gICAgY2hvaWNlc19maXJzdEl0ZW06IFwiZmlyc3QgaXRlbVwiLFxyXG4gICAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlY29uZCBpdGVtXCIsXHJcbiAgICBjaG9pY2VzX3RoaXJkSXRlbTogXCJ0aGlyZCBpdGVtXCIsXHJcbiAgICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtblwiLFxyXG4gICAgbWF0cml4X3JvdzogXCJSb3dcIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVuXCJdID0gc3VydmV5U3RyaW5ncztcclxuXHJcbmlmICghU3RyaW5nLnByb3RvdHlwZVtcImZvcm1hdFwiXSkge1xyXG4gICAgU3RyaW5nLnByb3RvdHlwZVtcImZvcm1hdFwiXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC97KFxcZCspfS9nLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3NbbnVtYmVyXSAhPSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgPyBhcmdzW251bWJlcl1cclxuICAgICAgICAgICAgICAgIDogbWF0Y2hcclxuICAgICAgICAgICAgICAgIDtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICBwcml2YXRlIHR5cGVWYWx1ZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2hvaWNlc1ZhbHVlOiBBcnJheTxhbnk+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2hvaWNlc2Z1bmM6ICgpID0+IEFycmF5PGFueT4gPSBudWxsO1xyXG4gICAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBhbHRlcm5hdGl2ZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xhc3NOYW1lUGFydDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbDtcclxuICAgIHB1YmxpYyByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGlzTG9jYWxpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZXJpYWxpemF0aW9uUHJvcGVydHk6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgb25HZXRWYWx1ZTogKG9iajogYW55KSA9PiBhbnkgPSBudWxsO1xyXG4gICAgcHVibGljIG9uU2V0VmFsdWU6IChvYmo6IGFueSwgdmFsdWU6IGFueSwganNvbkNvbnY6IEpzb25PYmplY3QpID0+IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudHlwZVZhbHVlID8gdGhpcy50eXBlVmFsdWUgOiBcInN0cmluZ1wiOyB9XHJcbiAgICBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IHN0cmluZykgeyB0aGlzLnR5cGVWYWx1ZSA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1RvVXNlR2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLm9uR2V0VmFsdWUgfHwgdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHk7IH1cclxuICAgIHB1YmxpYyBpc0RlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmRlZmF1bHRWYWx1ZSkgPyAodGhpcy5kZWZhdWx0VmFsdWUgPT0gdmFsdWUpIDogISh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uR2V0VmFsdWUpIHJldHVybiB0aGlzLm9uR2V0VmFsdWUob2JqKTtcclxuICAgICAgICBpZih0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uZ2V0SnNvbigpO1xyXG4gICAgICAgIHJldHVybiBvYmpbdGhpcy5uYW1lXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55KTogYW55IHtcclxuICAgICAgICBpZih0aGlzLmlzTG9jYWxpemFibGUpIHJldHVybiBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUob2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVG9Vc2VTZXRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMub25TZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTsgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNldFZhbHVlKG9iaiwgdmFsdWUsIGpzb25Db252KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkgXHJcbiAgICAgICAgICAgICAgICBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnNldEpzb24odmFsdWUpO1xyXG4gICAgICAgICAgICBlbHNlIG9ialt0aGlzLm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldE9ialR5cGUob2JqVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsYXNzTmFtZVBhcnQpIHJldHVybiBvYmpUeXBlO1xyXG4gICAgICAgIHJldHVybiBvYmpUeXBlLnJlcGxhY2UodGhpcy5jbGFzc05hbWVQYXJ0LCBcIlwiKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5jbGFzc05hbWVQYXJ0ICYmIGNsYXNzTmFtZS5pbmRleE9mKHRoaXMuY2xhc3NOYW1lUGFydCkgPCAwKSA/IGNsYXNzTmFtZSArIHRoaXMuY2xhc3NOYW1lUGFydCA6IGNsYXNzTmFtZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNmdW5jICE9IG51bGwpIHJldHVybiB0aGlzLmNob2ljZXNmdW5jKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q2hvaWNlcyh2YWx1ZTogQXJyYXk8YW55PiwgdmFsdWVGdW5jOiAoKSA9PiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmNob2ljZXNmdW5jID0gdmFsdWVGdW5jO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICBzdGF0aWMgcmVxdWlyZWRTeW1ib2wgPSAnISc7XHJcbiAgICBzdGF0aWMgdHlwZVN5bWJvbCA9ICc6JztcclxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4gPSBudWxsO1xyXG4gICAgcmVxdWlyZWRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IEFycmF5PGFueT4sIHB1YmxpYyBjcmVhdG9yOiAoKSA9PiBhbnkgPSBudWxsLCBwdWJsaWMgcGFyZW50TmFtZTogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5jcmVhdGVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldKTtcclxuICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZpbmQobmFtZTogc3RyaW5nKTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucHJvcGVydGllc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlUHJvcGVydHkocHJvcEluZm86IGFueSk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHR5cGVvZiBwcm9wSW5mbyA9PT0gXCJzdHJpbmdcIiA/IHByb3BJbmZvIDogcHJvcEluZm8ubmFtZTtcclxuICAgICAgICBpZiAoIXByb3BlcnR5TmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBudWxsO1xyXG4gICAgICAgIHZhciB0eXBlSW5kZXggPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZihKc29uTWV0YWRhdGFDbGFzcy50eXBlU3ltYm9sKTtcclxuICAgICAgICBpZiAodHlwZUluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyh0eXBlSW5kZXggKyAxKTtcclxuICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCB0eXBlSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSB0aGlzLmdldFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIHZhciBwcm9wID0gbmV3IEpzb25PYmplY3RQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICAgICAgcHJvcC50eXBlID0gcHJvcGVydHlUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHByb3BJbmZvID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLnR5cGUgPSBwcm9wSW5mby50eXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmRlZmF1bHRWYWx1ZSA9IHByb3BJbmZvLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8udmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHByb3AudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5pc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VQcm9wZXJ0eVJlcXVpcmVkKHByb3AubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNob2ljZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaG9pY2VzRnVuYyA9IHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzID09PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHZhciBjaG9pY2VzVmFsdWUgPSB0eXBlb2YgcHJvcEluZm8uY2hvaWNlcyAhPT0gXCJmdW5jdGlvblwiID8gcHJvcEluZm8uY2hvaWNlcyA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBwcm9wLnNldENob2ljZXMoY2hvaWNlc1ZhbHVlLCBjaG9pY2VzRnVuYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLm9uR2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3Aub25HZXRWYWx1ZSA9IHByb3BJbmZvLm9uR2V0VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLm9uU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3Aub25TZXRWYWx1ZSA9IHByb3BJbmZvLm9uU2V0VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSA9IHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcclxuICAgICAgICAgICAgICAgIHZhciBzOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBpZihwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJiBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eS5pbmRleE9mKFwibG9jXCIpID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSB0cnVlOyAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby5pc0xvY2FsaXphYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSBwcm9wSW5mby5pc0xvY2FsaXphYmxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuY2xhc3NOYW1lID0gcHJvcEluZm8uY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5iYXNlQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmJhc2VDbGFzc05hbWUgPSBwcm9wSW5mby5iYXNlQ2xhc3NOYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWVQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmNsYXNzTmFtZVBhcnQgPSBwcm9wSW5mby5jbGFzc05hbWVQYXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPSBwcm9wSW5mby5hbHRlcm5hdGl2ZU5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5sZW5ndGggPT0gMCB8fCBwcm9wZXJ0eU5hbWVbMF0gIT0gSnNvbk1ldGFkYXRhQ2xhc3MucmVxdWlyZWRTeW1ib2wpIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnNsaWNlKDEpO1xyXG4gICAgICAgIHRoaXMubWFrZVByb3BlcnR5UmVxdWlyZWQocHJvcGVydHlOYW1lKTtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtYWtlUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1aXJlZFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZFByb3BlcnRpZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlcXVpcmVkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YSB7XHJcbiAgICBwcml2YXRlIGNsYXNzZXM6IEhhc2hUYWJsZTxKc29uTWV0YWRhdGFDbGFzcz4gPSB7fTtcclxuICAgIHByaXZhdGUgY2hpbGRyZW5DbGFzc2VzOiBIYXNoVGFibGU8QXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjbGFzc1Byb3BlcnRpZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjbGFzc1JlcXVpcmVkUHJvcGVydGllczogSGFzaFRhYmxlPEFycmF5PHN0cmluZz4+ID0ge307XHJcbiAgICBwdWJsaWMgYWRkQ2xhc3MobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiBBcnJheTxhbnk+LCBjcmVhdG9yOiAoKSA9PiBhbnkgPSBudWxsLCBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gbmV3IEpzb25NZXRhZGF0YUNsYXNzKG5hbWUsIHByb3BlcnRpZXMsIGNyZWF0b3IsIHBhcmVudE5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2xhc3Nlc1tuYW1lXSA9IG1ldGFEYXRhQ2xhc3M7XHJcbiAgICAgICAgaWYgKHBhcmVudE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV07XHJcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0ucHVzaChtZXRhRGF0YUNsYXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhQ2xhc3M7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb3ZlcnJpZGVDbGFzc0NyZWF0b3JlKG5hbWU6IHN0cmluZywgY3JlYXRvcjogKCkgPT4gYW55KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcykge1xyXG4gICAgICAgICAgICBtZXRhRGF0YUNsYXNzLmNyZWF0b3IgPSBjcmVhdG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzUHJvcGVydGllc1tjbGFzc05hbWVdO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzUHJvcGVydGllc1tjbGFzc05hbWVdID0gcHJvcGVydGllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZmluZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykgOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmKHByb3BlcnRpZXNbaV0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHJldHVybiBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVDbGFzcyhuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbWV0YURhdGFDbGFzcy5jcmVhdG9yKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW5DbGFzc2VzKG5hbWU6IHN0cmluZywgY2FuQmVDcmVhdGVkOiBib29sZWFuID0gZmFsc2UpOiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZSwgY2FuQmVDcmVhdGVkLCByZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5jbGFzc1JlcXVpcmVkUHJvcGVydGllc1tuYW1lXTtcclxuICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlcXVpcmVkUHJvcGVydGllcyhuYW1lLCBwcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc1JlcXVpcmVkUHJvcGVydGllc1tuYW1lXSA9IHByb3BlcnRpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eUluZm86IGFueSkge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcclxuICAgICAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5SW5mbyk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlUb0NsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmZpbmQocHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkUHJvcGVydHlUb0NsYXNzKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eS5uYW1lKSAhPSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhtZXRhRGF0YUNsYXNzOiBKc29uTWV0YWRhdGFDbGFzcywgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KTtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XHJcbiAgICAgICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gbWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzOiBKc29uTWV0YWRhdGFDbGFzcykge1xyXG4gICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW21ldGFEYXRhQ2xhc3MubmFtZV0gPSBudWxsO1xyXG4gICAgICAgIHZhciBjaGlsZENsYXNzZXMgPSB0aGlzLmdldENoaWxkcmVuQ2xhc3NlcyhtZXRhRGF0YUNsYXNzLm5hbWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaWxsQ2hpbGRyZW5DbGFzc2VzKG5hbWU6IHN0cmluZywgY2FuQmVDcmVhdGVkOiBib29sZWFuLCByZXN1bHQ6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPikge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW25hbWVdO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4pIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghY2FuQmVDcmVhdGVkIHx8IGNoaWxkcmVuW2ldLmNyZWF0b3IpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZpbGxDaGlsZHJlbkNsYXNzZXMoY2hpbGRyZW5baV0ubmFtZSwgY2FuQmVDcmVhdGVkLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBmaW5kQ2xhc3MobmFtZTogc3RyaW5nKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsYXNzZXNbbmFtZV07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbGxQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZywgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Pikge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSwgbGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlDb3JlKG1ldGFEYXRhQ2xhc3MucHJvcGVydGllc1tpXSwgbGlzdCwgbGlzdC5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkUHJvcGVydHlDb3JlKHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksIGxpc3Q6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sIGVuZEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZEluZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIGxpc3QucHVzaChwcm9wZXJ0eSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsaXN0W2luZGV4XSA9IHByb3BlcnR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZmlsbFJlcXVpcmVkUHJvcGVydGllcyhuYW1lOiBzdHJpbmcsIGxpc3Q6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsaXN0LCBtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSwgbGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uRXJyb3Ige1xyXG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGF0OiBOdW1iZXIgPSAtMTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlOiBzdHJpbmcsIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRGdWxsRGVzY3JpcHRpb24oKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZSArICh0aGlzLmRlc2NyaXB0aW9uID8gXCJcXG5cIiArIHRoaXMuZGVzY3JpcHRpb24gOiBcIlwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoXCJ1bmtub3ducHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgJ1wiICsgcHJvcGVydHlOYW1lICsgXCInIGluIGNsYXNzICdcIiArIGNsYXNzTmFtZSArIFwiJyBpcyB1bmtub3duLlwiKTtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGFyZTogXCI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gcHJvcGVydGllc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gJy4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcsIHB1YmxpYyB0eXBlOiBzdHJpbmcsIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcih0eXBlLCBtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBhdmFpbGFibGU6IFwiO1xyXG4gICAgICAgIHZhciB0eXBlcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0Q2hpbGRyZW5DbGFzc2VzKGJhc2VDbGFzc05hbWUsIHRydWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIidcIiArIHR5cGVzW2ldLm5hbWUgKyBcIidcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIi5cIjtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3IgZXh0ZW5kcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoYmFzZUNsYXNzTmFtZSwgXCJtaXNzaW5ndHlwZXByb3BlcnR5XCIsIFwiVGhlIHByb3BlcnR5IHR5cGUgaXMgbWlzc2luZyBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IgZXh0ZW5kcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoYmFzZUNsYXNzTmFtZSwgXCJpbmNvcnJlY3R0eXBlcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBpbmNvcnJlY3QgaW4gdGhlIG9iamVjdC4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHByb3BlcnR5OiAnXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIicuXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoXCJyZXF1aXJlZHByb3BlcnR5XCIsIFwiVGhlIHByb3BlcnR5ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJyBpcyByZXF1aXJlZCBpbiBjbGFzcyAnXCIgKyBjbGFzc05hbWUgKyBcIicuXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdCB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyB0eXBlUHJvcGVydHlOYW1lID0gXCJ0eXBlXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBwb3NpdGlvblByb3BlcnR5TmFtZSA9IFwicG9zXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBtZXRhRGF0YVZhbHVlID0gbmV3IEpzb25NZXRhZGF0YSgpO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgbWV0YURhdGEoKSB7IHJldHVybiBKc29uT2JqZWN0Lm1ldGFEYXRhVmFsdWU7IH1cclxuICAgIHB1YmxpYyBlcnJvcnMgPSBuZXcgQXJyYXk8SnNvbkVycm9yPigpO1xyXG4gICAgcHVibGljIHRvSnNvbk9iamVjdChvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Kc29uT2JqZWN0Q29yZShvYmosIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHRvT2JqZWN0KGpzb25PYmo6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWpzb25PYmopIHJldHVybjtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKG9iai5nZXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT0gSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGtleSA9PSBKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGpzb25PYmpba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZmluZFByb3BlcnR5KHByb3BlcnRpZXMsIGtleSk7XHJcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IobmV3IEpzb25Vbmtub3duUHJvcGVydHlFcnJvcihrZXkudG9TdHJpbmcoKSwgb2JqLmdldFR5cGUoKSksIGpzb25PYmopO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvT2JqKGpzb25PYmpba2V5XSwgb2JqLCBrZXksIHByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdG9Kc29uT2JqZWN0Q29yZShvYmo6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFvYmouZ2V0VHlwZSkgcmV0dXJuIG9iajtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKHByb3BlcnR5ICE9IG51bGwgJiYgKCFwcm9wZXJ0eS5jbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWVdID0gcHJvcGVydHkuZ2V0T2JqVHlwZShvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvSnNvbihvYmosIHJlc3VsdCwgcHJvcGVydGllc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0pzb24ob2JqOiBhbnksIHJlc3VsdDogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydHkuZ2V0VmFsdWUob2JqKTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZVtpXSwgcHJvcGVydHkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWx1ZSA9IGFyclZhbHVlLmxlbmd0aCA+IDAgPyBhcnJWYWx1ZSA6IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSnNvbk9iamVjdENvcmUodmFsdWUsIHByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9PYmoodmFsdWU6IGFueSwgb2JqOiBhbnksIGtleTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5oYXNUb1VzZVNldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5LnNldFZhbHVlKG9iaiwgdmFsdWUsIHRoaXMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvQXJyYXkodmFsdWUsIG9iaiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBuZXdPYmogPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZSwgcHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChuZXdPYmoubmV3T2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9PYmplY3QodmFsdWUsIG5ld09iai5uZXdPYmopO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ld09iai5uZXdPYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbmV3T2JqLmVycm9yKSB7XHJcbiAgICAgICAgICAgIG9ialtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUFycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHsgcmV0dXJuIHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpOyB9XHJcbiAgICBwcml2YXRlIGNyZWF0ZU5ld09iaih2YWx1ZTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0geyBuZXdPYmo6IG51bGwsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHZhbHVlW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgaWYgKCFjbGFzc05hbWUgJiYgcHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5jbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgY2xhc3NOYW1lID0gcHJvcGVydHkuY2xhc3NOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5nZXRDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuICAgICAgICByZXN1bHQubmV3T2JqID0gKGNsYXNzTmFtZSkgPyBKc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGNsYXNzTmFtZSkgOiBudWxsO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY2hlY2tOZXdPYmplY3RPbkVycm9ycyhyZXN1bHQubmV3T2JqLCB2YWx1ZSwgcHJvcGVydHksIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tOZXdPYmplY3RPbkVycm9ycyhuZXdPYmo6IGFueSwgdmFsdWU6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBKc29uRXJyb3Ige1xyXG4gICAgICAgIHZhciBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgaWYgKG5ld09iaikge1xyXG4gICAgICAgICAgICB2YXIgcmVxdWlyZWRQcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRSZXF1aXJlZFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlW3JlcXVpcmVkUHJvcGVydGllc1tpXV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcihyZXF1aXJlZFByb3BlcnRpZXNbaV0sIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEpzb25NaXNzaW5nVHlwZUVycm9yKHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmJhc2VDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBKc29uSW5jb3JyZWN0VHlwZUVycm9yKHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmJhc2VDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkTmV3RXJyb3IoZXJyb3I6IEpzb25FcnJvciwganNvbk9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKGpzb25PYmogJiYganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICBlcnJvci5hdCA9IGpzb25PYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0uc3RhcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB2YWx1ZVRvQXJyYXkodmFsdWU6IEFycmF5PGFueT4sIG9iajogYW55LCBrZXk6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xyXG4gICAgICAgIGlmKG9ialtrZXldICYmIHZhbHVlLmxlbmd0aCA+IDApIG9ialtrZXldLnNwbGljZSgwLCBvYmpba2V5XS5sZW5ndGgpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdPYmoodmFsdWVbaV0sIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLm5ld09iaikge1xyXG4gICAgICAgICAgICAgICAgb2JqW2tleV0ucHVzaChuZXdWYWx1ZS5uZXdPYmopO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b09iamVjdCh2YWx1ZVtpXSwgbmV3VmFsdWUubmV3T2JqKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghbmV3VmFsdWUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XS5wdXNoKHZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZmluZFByb3BlcnR5KHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sIGtleTogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChwcm9wLm5hbWUgPT0ga2V5IHx8IHByb3AuYWx0ZXJuYXRpdmVOYW1lID09IGtleSkgcmV0dXJuIHByb3A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2pzb25vYmplY3QudHMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfM19fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge0hhc2hUYWJsZX0gZnJvbSBcIi4uL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZWFjdFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSgpO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgIGZvcih2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xyXG4gICAgICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnkudHN4IiwiZXhwb3J0IGludGVyZmFjZSBIYXNoVGFibGU8VD4ge1xyXG4gICAgW2tleTogc3RyaW5nXTogVDtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlEYXRhIHtcclxuICAgIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcclxuICAgIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk7XHJcbiAgICBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZztcclxuICAgIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXkgZXh0ZW5kcyBJU3VydmV5RGF0YSB7XHJcbiAgICBjdXJyZW50UGFnZTogSVBhZ2U7XHJcbiAgICBwYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZTogSVBhZ2UsIG5ld1ZhbHVlOiBib29sZWFuKTtcclxuICAgIHF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGJvb2xlYW4pO1xyXG4gICAgcXVlc3Rpb25BZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSk7XHJcbiAgICBwYW5lbEFkZGVkKHBhbmVsOiBJRWxlbWVudCwgaW5kZXg6IG51bWJlciwgcGFyZW50UGFuZWw6IGFueSwgcm9vdFBhbmVsOiBhbnkpO1xyXG4gICAgcXVlc3Rpb25SZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pO1xyXG4gICAgcGFuZWxSZW1vdmVkKHBhbmVsOiBJRWxlbWVudCk7XHJcbiAgICB2YWxpZGF0ZVF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFN1cnZleUVycm9yO1xyXG4gICAgcHJvY2Vzc0h0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgcHJvY2Vzc1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgaXNEaXNwbGF5TW9kZTogYm9vbGVhbjtcclxuICAgIGlzRGVzaWduTW9kZTogYm9vbGVhbjtcclxuICAgIGlzTG9hZGluZ0Zyb21Kc29uOiBib29sZWFuO1xyXG4gICAgcmVxdWlyZWRUZXh0OiBzdHJpbmc7XHJcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IHN0cmluZztcclxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogc3RyaW5nO1xyXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IGJvb2xlYW47XHJcbiAgICB1cGxvYWRGaWxlKG5hbWU6IHN0cmluZywgZmlsZTogRmlsZSwgc3RvcmVEYXRhQXNUZXh0OiBib29sZWFuLCB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nKSA9PiBhbnkpOiBib29sZWFuO1xyXG4gICAgYWZ0ZXJSZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudCk7XHJcbiAgICBhZnRlclJlbmRlclBhbmVsKHBhbmVsOiBJRWxlbWVudCwgaHRtbEVsZW1lbnQpO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmRpdGlvblJ1bm5lciB7XHJcbiAgICBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55Pik7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJRWxlbWVudCAgZXh0ZW5kcyBJQ29uZGl0aW9uUnVubmVye1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgIGlzVmlzaWJsZTogYm9vbGVhbjtcclxuICAgIHNldERhdGEobmV3VmFsdWU6IElTdXJ2ZXlEYXRhKTtcclxuICAgIHJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcmVuZGVyV2lkdGg6IHN0cmluZztcclxuICAgIHdpZHRoOiBzdHJpbmc7XHJcbiAgICByaWdodEluZGVudDogbnVtYmVyO1xyXG4gICAgc3RhcnRXaXRoTmV3TGluZTogYm9vbGVhbjtcclxuICAgIGlzUGFuZWw6IGJvb2xlYW47XHJcbiAgICBvblN1cnZleUxvYWQoKTtcclxuICAgIG9uTG9jYWxlQ2hhbmdlZCgpO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElRdWVzdGlvbiBleHRlbmRzIElFbGVtZW50IHtcclxuICAgIGhhc1RpdGxlOiBib29sZWFuO1xyXG4gICAgc2V0VmlzaWJsZUluZGV4KHZhbHVlOiBudW1iZXIpO1xyXG4gICAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSk7XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpOiBib29sZWFuO1xyXG4gICAgY2xlYXJVbnVzZWRWYWx1ZXMoKTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElQYW5lbCBleHRlbmRzIElFbGVtZW50IHtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdlIGV4dGVuZHMgSUNvbmRpdGlvblJ1bm5lciB7XHJcbiAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgb25TdXJ2ZXlMb2FkKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlIHtcclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG1ldGhvZCBpcyBhYnN0cmFjdCcpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGlzVHdvVmFsdWVFcXVhbHMoeDogYW55LCB5OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoeCA9PT0geSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgfHwgISh5IGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4geCkge1xyXG4gICAgICAgICAgICBpZiAoIXguaGFzT3duUHJvcGVydHkocCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoIXkuaGFzT3duUHJvcGVydHkocCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHhbcF0gPT09IHlbcF0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mICh4W3BdKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUd29WYWx1ZUVxdWFscyh4W3BdLCB5W3BdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHAgaW4geSkge1xyXG4gICAgICAgICAgICBpZiAoeS5oYXNPd25Qcm9wZXJ0eShwKSAmJiAheC5oYXNPd25Qcm9wZXJ0eShwKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5RXJyb3Ige1xyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGlzIGFic3RyYWN0Jyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgU3VydmV5UGFnZUlkOiBzdHJpbmc7XHJcblN1cnZleVBhZ2VJZCA9IFwic3FfcGFnZVwiO1xyXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNjcm9sbEVsZW1lbnRUb1RvcChlbGVtZW50SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZWxlbWVudElkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcclxuICAgICAgICBpZiAoIWVsIHx8ICFlbC5zY3JvbGxJbnRvVmlldykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBlbGVtVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIGlmIChlbGVtVG9wIDwgMCkgIGVsLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1Ub3AgPCAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBHZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnRzIHx8ICFlbGVtZW50cy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiN0ZXh0XCIgJiYgZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjY29tbWVudFwiKSByZXR1cm4gZWxlbWVudHNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBGb2N1c0VsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIGVsLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudDxUIGV4dGVuZHMgRnVuY3Rpb24sIE9wdGlvbnM+ICB7XHJcbiAgICBwcml2YXRlIGNhbGxiYWNrczogQXJyYXk8VD47XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNhbGxiYWNrcyA9PSBudWxsIHx8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aCA9PSAwOyB9XHJcbiAgICBwdWJsaWMgZmlyZShzZW5kZXI6IGFueSwgb3B0aW9uczogT3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGxiYWNrcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGNhbGxSZXN1bHQgPSB0aGlzLmNhbGxiYWNrc1tpXShzZW5kZXIsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkKGZ1bmM6IFQpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IG5ldyBBcnJheTxUPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZShmdW5jOiBUKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHJldHVybjtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGZ1bmMsIDApO1xyXG4gICAgICAgIGlmIChpbmRleCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYmFzZS50cyIsImltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tICcuL3F1ZXN0aW9uYmFzZSc7XHJcbmltcG9ydCB7SUVsZW1lbnQsIEhhc2hUYWJsZX0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuLy9UT0RPIHJlcGxhY2UgY29tcGxldGVseSB3aXRoIEVsZW1lbnRGYWN0b3J5XHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZhY3Rvcnkge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUXVlc3Rpb25GYWN0b3J5ID0gbmV3IFF1ZXN0aW9uRmFjdG9yeSgpO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdENob2ljZXMoKTogc3RyaW5nW10geyBcclxuICAgICAgICByZXR1cm4gW1wiMXxcIiArIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX2ZpcnN0SXRlbVwiKSwgXCIyfFwiICsgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfc2Vjb25kSXRlbVwiKSwgXCIzfFwiICsgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfdGhpcmRJdGVtXCIpXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRDb2x1bXMoKTogc3RyaW5nW10geyBcclxuICAgICAgICB2YXIgY29sTmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XHJcbiAgICAgICAgcmV0dXJuIFtjb2xOYW1lICsgXCIxXCIsIGNvbE5hbWUgKyBcIjJcIiwgY29sTmFtZSArIFwiM1wiXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRSb3dzKCk6IHN0cmluZ1tdIHsgXHJcbiAgICAgICAgdmFyIHJvd05hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKSArIFwiIFwiO1xyXG4gICAgICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uQmFzZT4gPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcXVlc3Rpb25DcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV0gPSBxdWVzdGlvbkNyZWF0b3I7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgIGZvcih2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uQmFzZSB7XHJcbiAgICAgICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbGVtZW50RmFjdG9yeSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBFbGVtZW50RmFjdG9yeSA9IG5ldyBFbGVtZW50RmFjdG9yeSgpO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50PiA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgZWxlbWVudENyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3JIYXNoID0ge307XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5nZXRBbGxUeXBlcygpO1xyXG4gICAgICAgIGZvcih2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcclxuICAgICAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcclxuICAgICAgICByZXR1cm4gY3JlYXRvcihuYW1lKTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMiLCJleHBvcnQgaW50ZXJmYWNlIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICBwdWJsaWMgc3RhdGljICBkZWZhdWx0TG9jYWxlOiBzdHJpbmcgPSBcImRlZmF1bHRcIjtcclxuICAgIHByaXZhdGUgdmFsdWVzID0ge307XHJcbiAgICBjb25zdHJ1Y3RvciAocHVibGljIG93bmVyOiBJTG9jYWxpemFibGVPd25lcikge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBsb2NhbGUoKSB7cmV0dXJuIHRoaXMub3duZXIgPyB0aGlzLm93bmVyLmdldExvY2FsZSgpIDogXCJcIjsgfVxyXG4gICAgcHVibGljIGdldCB0ZXh0KCkgOiBzdHJpbmcgeyBcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTtcclxuICAgICAgICBpZihrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy52YWx1ZXNbbG9jXTtcclxuICAgICAgICBpZighcmVzICYmIGxvYyAhPT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkge1xyXG4gICAgICAgICAgICByZXMgPSB0aGlzLnZhbHVlc1tMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IHRoaXMudmFsdWVzW2tleXNbMF1dO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldExvY2FsZVRleHQodGhpcy5sb2NhbGUsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZighbG9jKSBsb2MgPSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnZhbHVlc1tsb2NdO1xyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZighbG9jKSBsb2MgPSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlO1xyXG4gICAgICAgIGlmKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZih0aGlzLnZhbHVlc1tsb2NdKSBkZWxldGUgdGhpcy52YWx1ZXNbbG9jXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaWYobG9jICE9IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUgJiYgdmFsdWUgPT0gdGhpcy5nZXRMb2NhbGVUZXh0KExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGxvYywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2xvY10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZihsb2MgPT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEpzb24oKTogYW55IHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTtcclxuICAgICAgICBpZihrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZihrZXlzLmxlbmd0aCA9PSAxICYmIGtleXNbMF0gPT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkgcmV0dXJuIHRoaXMudmFsdWVzW2tleXNbMF1dO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xyXG4gICAgICAgIGlmKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChudWxsLCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yKHZhciBrZXkgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChrZXksIHZhbHVlW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBkZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQoZGVmYXVsdFZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYoa2V5c1tpXSA9PSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYodGhpcy52YWx1ZXNba2V5c1tpXV0gPT0gZGVmYXVsdFZhbHVlKSBkZWxldGUgdGhpcy52YWx1ZXNba2V5c1tpXV07XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50cyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gJy4uL3F1ZXN0aW9uYmFzZSc7XHJcbmltcG9ydCB7SVN1cnZleUNyZWF0b3J9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uY29tbWVudFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRCYXNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgICBwcm90ZWN0ZWQgY3NzOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgcm9vdENzczogYW55O1xyXG4gICAgcHJvdGVjdGVkIGlzRGlzcGxheU1vZGU6IGJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgICAgIHRoaXMucm9vdENzcyA9IHByb3BzLnJvb3RDc3M7XHJcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlNb2RlID0gcHJvcHMuaXNEaXNwbGF5TW9kZSB8fCBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICAgICAgdGhpcy5yb290Q3NzID0gbmV4dFByb3BzLnJvb3RDc3M7XHJcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlNb2RlID0gbmV4dFByb3BzLmlzRGlzcGxheU1vZGUgfHwgZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uQmFzZTogUXVlc3Rpb25CYXNlO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZSA9IHByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IHByb3BzLmNyZWF0b3I7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlID0gbmV4dFByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IG5leHRQcm9wcy5jcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCB8fCAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcjtcclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmVsZW1lbnQudHN4IiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gJy4vc3VydmV5U3RyaW5ncyc7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBbnN3ZXJSZXF1aXJlZEVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKSAge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvclwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgUmVxdXJlTnVtZXJpY0Vycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljRXJyb3JcIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEV4Y2VlZFNpemVFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcclxuICAgIHByaXZhdGUgbWF4U2l6ZTogbnVtYmVyO1xyXG4gICAgY29uc3RydWN0b3IobWF4U2l6ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm1heFNpemUgPSBtYXhTaXplO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImV4Y2VlZE1heFNpemVcIilbXCJmb3JtYXRcIl0odGhpcy5nZXRUZXh0U2l6ZSgpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VGV4dFNpemUoKSB7XHJcbiAgICAgICAgdmFyIHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQiddO1xyXG4gICAgICAgIHZhciBmaXhlZCA9IFswLCAwLCAyLCAzLCAzXTtcclxuICAgICAgICBpZiAodGhpcy5tYXhTaXplID09IDApIHJldHVybiAnMCBCeXRlJztcclxuICAgICAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2codGhpcy5tYXhTaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcclxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLm1heFNpemUgLyBNYXRoLnBvdygxMDI0LCBpKTtcclxuICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChmaXhlZFtpXSkgKyAnICcgKyBzaXplc1tpXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xyXG4gICAgcHJpdmF0ZSB0ZXh0OiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHQ7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZXJyb3IudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gJy4vanNvbm9iamVjdCc7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tICcuL3F1ZXN0aW9uYmFzZSc7XHJcbmltcG9ydCB7U3VydmV5RXJyb3IsIFN1cnZleUVsZW1lbnR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtBbnN3ZXJSZXF1aXJlZEVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge1N1cnZleVZhbGlkYXRvciwgSVZhbGlkYXRvck93bmVyLCBWYWxpZGF0b3JSdW5uZXJ9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xyXG5pbXBvcnQge1RleHRQcmVQcm9jZXNzb3J9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb24gZXh0ZW5kcyBRdWVzdGlvbkJhc2UgaW1wbGVtZW50cyBJVmFsaWRhdG9yT3duZXIge1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jQ29tbWVudFRleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgcXVlc3Rpb25Db21tZW50OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGlzUmVxdWlyZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBoYXNDb21tZW50VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGFzT3RoZXJWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSByZWFkT25seVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XHJcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPiA9IFtdO1xyXG4gICAgdmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiA9IG5ldyBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KCk7XHJcbiAgICB2YWx1ZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbW1lbnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBlcnJvcnNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICB0aXRsZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jQ29tbWVudFRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpbnB1dElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkICsgXCJpXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHsgXHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMubG9jVGl0bGUudGV4dDtcclxuICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogdGhpcy5uYW1lOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGUudGV4dCA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudGl0bGVDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0IGxvY0NvbW1lbnRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tbWVudFRleHRWYWx1ZTsgfSBcclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7IHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc1RleHQodGhpcy50aXRsZSkgOiB0aGlzLnRpdGxlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRleHRQcmVQcm9jZXNzb3IpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25IYXNWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIHNlbGYuY2FuUHJvY2Vzc2VkVGV4dFZhbHVlcyhuYW1lLnRvTG93ZXJDYXNlKCkpOyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uUHJvY2VzcyA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIHNlbGYuZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWUpOyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlVGVtcGxhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVxdWlyZVRleHQgPSB0aGlzLnJlcXVpcmVkVGV4dDtcclxuICAgICAgICBpZiAocmVxdWlyZVRleHQpIHJlcXVpcmVUZXh0ICs9IFwiIFwiO1xyXG4gICAgICAgIHZhciBubyA9IHRoaXMubm87XHJcbiAgICAgICAgaWYgKG5vKSBubyArPSBcIi4gXCI7XHJcbiAgICAgICAgcmV0dXJuIG5vICsgcmVxdWlyZVRleHQgKyB0aGlzLnByb2Nlc3NlZFRpdGxlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzKG9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIFN1cnZleUVsZW1lbnQuU2Nyb2xsRWxlbWVudFRvVG9wKHRoaXMuaWQpO1xyXG4gICAgICAgIHZhciBpZCA9ICFvbkVycm9yID8gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCkgOiB0aGlzLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpO1xyXG4gICAgICAgIGlmIChTdXJ2ZXlFbGVtZW50LkZvY3VzRWxlbWVudChpZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5mb2N1c0NhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0SWQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNhblByb2Nlc3NlZFRleHRWYWx1ZXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG5hbWUgPT0gXCJub1wiIHx8IG5hbWUgPT0gXCJ0aXRsZVwiIHx8IG5hbWUgPT0gXCJyZXF1aXJlXCI7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJub1wiKSByZXR1cm4gdGhpcy5ubztcclxuICAgICAgICBpZiAobmFtZSA9PSBcInRpdGxlXCIpIHJldHVybiB0aGlzLnByb2Nlc3NlZFRpdGxlO1xyXG4gICAgICAgIGlmIChuYW1lID09IFwicmVxdWlyZVwiKSByZXR1cm4gdGhpcy5yZXF1aXJlZFRleHQ7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzUmVxdWlyZWRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQgPT0gdmFsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy50aXRsZUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0NvbW1lbnQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmhhc0NvbW1lbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBoYXNDb21tZW50KHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0Q29tbWVudCgpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5oYXNDb21tZW50VmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29tbWVudCkgdGhpcy5oYXNPdGhlciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb21tZW50VGV4dCgpOiBzdHJpbmcgeyBcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5sb2NDb21tZW50VGV4dC50ZXh0O1xyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKTsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbW1lbnRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmxvY0NvbW1lbnRUZXh0LnRleHQgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmhhc090aGVyVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgaGFzT3RoZXIodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRPdGhlcigpIHx8IHRoaXMuaGFzT3RoZXIgPT0gdmFsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5oYXNPdGhlclZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc090aGVyKSB0aGlzLmhhc0NvbW1lbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc090aGVyQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHsgfVxyXG4gICAgcHVibGljIGdldCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5yZWFkT25seSB8fCAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZSk7fVxyXG4gICAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucmVhZE9ubHlWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByZWFkT25seSh2YWx1ZTogYm9vbGVhbikgeyBcclxuICAgICAgICBpZih0aGlzLnJlYWRPbmx5ID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWFkT25seVZhbHVlID0gdmFsdWU7IFxyXG4gICAgICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVhZE9ubHlDaGFuZ2VkKCkgeyBcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgbm8oKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmxlSW5kZXggPCAwKSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IDE7XHJcbiAgICAgICAgdmFyIGlzTnVtZXJpYyA9IHRydWU7XHJcbiAgICAgICAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleCkge1xyXG4gICAgICAgICAgICBzdHIgPSB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChwYXJzZUludChzdHIpKSBzdGFydEluZGV4ID0gcGFyc2VJbnQoc3RyKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyLmxlbmd0aCA9PSAxKSBpc051bWVyaWMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTnVtZXJpYykgcmV0dXJuICh0aGlzLnZpc2libGVJbmRleCArIHN0YXJ0SW5kZXgpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyLmNoYXJDb2RlQXQoMCkgKyB0aGlzLnZpc2libGVJbmRleCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xyXG4gICAgICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMub25TdXJ2ZXlWYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVGcm9tRGF0YSh0aGlzLmdldFZhbHVlQ29yZSgpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXN2YWx1ZUNoYW5nZWRDYWxsYmFja0ZpcmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXN2YWx1ZUNoYW5nZWRDYWxsYmFja0ZpcmluZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXN2YWx1ZUNoYW5nZWRDYWxsYmFja0ZpcmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy52YWx1ZUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgdGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbW1lbnQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudCgpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1lbnQgPT0gbmV3VmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldENvbW1lbnQobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q29tbWVudCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5kYXRhICE9IG51bGwgPyB0aGlzLmRhdGEuZ2V0Q29tbWVudCh0aGlzLm5hbWUpIDogdGhpcy5xdWVzdGlvbkNvbW1lbnQ7IH1cclxuICAgIHByb3RlY3RlZCBzZXRDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldE5ld0NvbW1lbnQobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZhbHVlID09IG51bGw7IH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tGb3JFcnJvcnMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudEVycm9yQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aDsgfVxyXG4gICAgcHVibGljIGdldCByZXF1aXJlZFRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgJiYgdGhpcy5pc1JlcXVpcmVkID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjsgfVxyXG4gICAgcHVibGljIGFkZEVycm9yKGVycm9yOiBTdXJ2ZXlFcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tGb3JFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIGVycm9yTGVuZ3RoID0gdGhpcy5lcnJvcnMgPyB0aGlzLmVycm9ycy5sZW5ndGggOiAwO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrRm9yRXJyb3JzKHRoaXMuZXJyb3JzKTtcclxuICAgICAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoID09IDAgJiYgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLnJ1blZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5zdXJ2ZXkudmFsaWRhdGVRdWVzdGlvbih0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaXJlQ2FsbGJhY2sgJiYgKGVycm9yTGVuZ3RoICE9IHRoaXMuZXJyb3JzLmxlbmd0aCB8fCBlcnJvckxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBBbnN3ZXJSZXF1aXJlZEVycm9yKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBoYXNSZXF1aXJlZEVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy5pc0VtcHR5KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcnVuVmFsaWRhdG9ycygpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSdW5uZXIoKS5ydW4odGhpcyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdWYWx1ZUluRGF0YShuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUNoYW5nZWRJblN1cnZleSkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVUb0RhdGEobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlQ29yZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSAhPSBudWxsID8gdGhpcy5kYXRhLmdldFZhbHVlKHRoaXMubmFtZSkgOiB0aGlzLnF1ZXN0aW9uVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRWYWx1ZSh0aGlzLm5hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7IHJldHVybiB2YWw7IH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7IHJldHVybiB2YWw7IH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHsgfVxyXG4gICAgcHJvdGVjdGVkIHNldE5ld0NvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29tbWVudCh0aGlzLm5hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgdGhpcy5xdWVzdGlvbkNvbW1lbnQgPSBuZXdWYWx1ZTtcclxuICAgIH1cclxuICAgIC8vSVF1ZXN0aW9uXHJcbiAgICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbW1lbnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy9JVmFsaWRhdG9yT3duZXJcclxuICAgIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7IHJldHVybiBudWxsOyB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInF1ZXN0aW9uXCIsIFt7IG5hbWU6IFwidGl0bGU6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LFxyXG4gICAgeyBuYW1lOiBcImNvbW1lbnRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiIH0sXHJcbiAgICBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLCBcInJlYWRPbmx5OmJvb2xlYW5cIiwgeyBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLCBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwifV0sIG51bGwsIFwicXVlc3Rpb25iYXNlXCIpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbi50cyIsImltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1WYWx1ZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNlcGFyYXRvciA9ICd8JztcclxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlQXJyYXkobG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyKTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgdmFyIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+ID0gW107XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldHVwQXJyYXkoaXRlbXMsIGxvY093bmVyKTtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHNldHVwQXJyYXkoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIGxvY093bmVyOiBJTG9jYWxpemFibGVPd25lcikge1xyXG4gICAgICAgIGl0ZW1zLnB1c2ggPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgdmFsdWUubG9jT3duZXIgPSBsb2NPd25lcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGl0ZW1zLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBJdGVtVmFsdWVbXSk6IEl0ZW1WYWx1ZVtdIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0aGlzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgICAgIGlmKCFpdGVtcykgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbaV0ubG9jT3duZXIgPSBsb2NPd25lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHNldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbHVlczogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIGl0ZW1zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBJdGVtVmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXREYXRhKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5oYXNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IHZhbHVlOiBpdGVtLnZhbHVlLCB0ZXh0OiBpdGVtLmxvY1RleHQuZ2V0SnNvbigpIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbUJ5VmFsdWUoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbDogYW55KTogSXRlbVZhbHVlIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNbaV0udmFsdWUgPT0gdmFsKSByZXR1cm4gaXRlbXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXRlbVZhbHVlUHJvcCA9IFsgXCJ0ZXh0XCIsIFwidmFsdWVcIiwgXCJoYXNUZXh0XCIsIFwibG9jT3duZXJcIiwgXCJsb2NUZXh0XCJdO1xyXG4gICAgcHJpdmF0ZSBpdGVtVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnksIHRleHQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyhudWxsKTtcclxuICAgICAgICBpZih0ZXh0KSB0aGlzLmxvY1RleHQudGV4dCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiaXRlbXZhbHVlXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPd25lcigpIDogSUxvY2FsaXphYmxlT3duZXIgeyByZXR1cm4gdGhpcy5sb2NUZXh0Lm93bmVyOyB9XHJcbiAgICBwdWJsaWMgc2V0IGxvY093bmVyKHZhbHVlOiBJTG9jYWxpemFibGVPd25lcikgeyB0aGlzLmxvY1RleHQub3duZXIgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5pdGVtVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1WYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IHRoaXMuaXRlbVZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gc3RyLmluZGV4T2YoSXRlbVZhbHVlLlNlcGFyYXRvcik7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtVmFsdWUgPSBzdHIuc2xpY2UoMCwgaW5kZXgpO1xyXG4gICAgICAgICAgICB0aGlzLnRleHQgPSBzdHIuc2xpY2UoaW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1RleHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmxvY1RleHQudGV4dCA/IHRydWUgOiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVGV4dCkgcmV0dXJuIHRoaXMubG9jVGV4dC50ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0ZXh0KG5ld1RleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gbmV3VGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodHlwZW9mICh2YWx1ZS52YWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHZhciBleGNlcHRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc09iakl0ZW1WYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLml0ZW1WYWx1ZSA9IHZhbHVlLml0ZW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jVGV4dC5zZXRKc29uKHZhbHVlLmxvY1RleHQuZ2V0SnNvbigpKTtcclxuICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEl0ZW1WYWx1ZS5pdGVtVmFsdWVQcm9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29weUF0dHJpYnV0ZXModmFsdWUsIGV4Y2VwdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgIGlzT2JqSXRlbVZhbHVlKG9iajogYW55KSB7IHJldHVybiB0eXBlb2YgKG9iai5nZXRUeXBlKSAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqLmdldFR5cGUoKSA9PSAnaXRlbXZhbHVlJ31cclxuICAgIHByaXZhdGUgY29weUF0dHJpYnV0ZXMoc3JjOiBhbnksIGV4Y2VwdG9uczogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKCh0eXBlb2Ygc3JjW2tleV0gPT0gJ2Z1bmN0aW9uJykpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoZXhjZXB0b25zICYmIGV4Y2VwdG9ucy5pbmRleE9mKGtleSkgPiAtMSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmKGtleSA9PSBcInRleHRcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NUZXh0LnNldEpzb24oc3JjW2tleV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc1trZXldID0gc3JjW2tleV07ICAgIFxyXG4gICAgICAgICAgICB9ICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2l0ZW12YWx1ZS50cyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmVsZW1lbnRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2NvbW1lbnRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIHx8ICcnIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQmx1ciA9IHRoaXMuaGFuZGxlT25CbHVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQ29tbWVudE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQ29tbWVudE1vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIHx8ICcnIH07XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkNoYW5nZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25CbHVyKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfSk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSlcclxuICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5jc3N9Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PilcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzc30gdHlwZT1cInRleHRcIiB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gcGxhY2Vob2xkZXI9e3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJ9IG9uQmx1cj17dGhpcy5oYW5kbGVPbkJsdXJ9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfSBjb2xzPXt0aGlzLnF1ZXN0aW9uLmNvbHN9IHJvd3M9e3RoaXMucXVlc3Rpb24ucm93c30gLz5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlIHtcclxuICAgIHByaXZhdGUgcXVlc3Rpb246IFF1ZXN0aW9uO1xyXG4gICAgcHJpdmF0ZSBjb21tZW50OiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBwcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLmNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmNvbW1lbnQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMuY29tbWVudCB9O1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkJsdXIgPSB0aGlzLmhhbmRsZU9uQmx1ci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmNvbW1lbnQgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLmNvbW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkJsdXIoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNvbW1lbnQgPSB0aGlzLmNvbW1lbnQ7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKVxyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5xdWVzdGlvbi5jb21tZW50fT57dGhpcy5jb21tZW50fTwvZGl2Pik7XHJcbiAgICAgICAgcmV0dXJuICg8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9e3RoaXMuY3NzLnF1ZXN0aW9uLmNvbW1lbnR9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0gb25CbHVyPXt0aGlzLmhhbmRsZU9uQmx1cn0gLz4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tbWVudFwiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tbWVudCwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmNvbW1lbnQudHN4IiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxsXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25TZWxlY3RCYXNlIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlQ2hvaWNlc0NhY2hlOiBBcnJheTxJdGVtVmFsdWU+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY29tbWVudFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIG90aGVySXRlbVZhbHVlOiBJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwib3RoZXJcIiwgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIikpO1xyXG4gICAgcHJpdmF0ZSBsb2NPdGhlclRleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY090aGVyRXJyb3JUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIGNhY2hlZFZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIGNob2ljZXNGcm9tVXJsOiBBcnJheTxJdGVtVmFsdWU+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uOiBhbnkgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWVzOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHVibGljIGNob2ljZXNCeVVybDogQ2hvaWNlc1Jlc3RmdWxsO1xyXG4gICAgcHVibGljIHN0b3JlT3RoZXJzQXNDb21tZW50OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgY2hvaWNlc09yZGVyVmFsdWU6IHN0cmluZyA9IFwibm9uZVwiO1xyXG4gICAgY2hvaWNlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlcyA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybCA9IHRoaXMuY3JlYXRlUmVzdGZ1bGwoKTtcclxuICAgICAgICB0aGlzLmxvY090aGVyVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jT3RoZXJFcnJvclRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzQnlVcmwuZ2V0UmVzdWx0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pIHsgc2VsZi5vbkxvYWRDaG9pY2VzRnJvbVVybChpdGVtcykgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3RoZXJJdGVtKCk6IEl0ZW1WYWx1ZSB7XHJcbiAgICAgICAgdGhpcy5vdGhlckl0ZW1WYWx1ZS50ZXh0ID0gdGhpcy5vdGhlclRleHQgPyB0aGlzLm90aGVyVGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm90aGVySXRlbVZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNPdGhlclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgPyB0aGlzLmdldEhhc090aGVyKHRoaXMudmFsdWUpIDogdGhpcy5nZXRIYXNPdGhlcih0aGlzLmNhY2hlZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUmVzdGZ1bGwoKTogQ2hvaWNlc1Jlc3RmdWxsIHsgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTsgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbW1lbnQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSByZXR1cm4gc3VwZXIuZ2V0Q29tbWVudCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1lbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNTZXR0aW5nQ29tbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNldENvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpXHJcbiAgICAgICAgICAgIHN1cGVyLnNldENvbW1lbnQobmV3VmFsdWUpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTZXR0aW5nQ29tbWVudCAmJiBuZXdWYWx1ZSAhPSB0aGlzLmNvbW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NldHRpbmdDb21tZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudFZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5ld1ZhbHVlSW5EYXRhKHRoaXMuY2FjaGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NldHRpbmdDb21tZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSkgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3Rpb24gPSBuZXdWYWx1ZTsgICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSByZXR1cm4gc3VwZXIudmFsdWVGcm9tRGF0YSh2YWwpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVkVmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGFDb3JlKHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiBzdXBlci52YWx1ZVRvRGF0YSh2YWwpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVkVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVUb0RhdGFDb3JlKHZhbCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsKSkgcmV0dXJuIHZhbDtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gdmFsO1xyXG4gICAgICAgIHRoaXMuY29tbWVudCA9IHZhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW0udmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlICYmIHRoaXMuZ2V0Q29tbWVudCgpKSB7XHJcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuZ2V0Q29tbWVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc1Vua25vd25WYWx1ZSh2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5hY3RpdmVDaG9pY2VzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLnZhbHVlID09IHZhbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWVzOyB9XHJcbiAgICBzZXQgY2hvaWNlcyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMuY2hvaWNlc1ZhbHVlcywgbmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBoYXNPdGhlckNoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNob2ljZXNPcmRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jaG9pY2VzT3JkZXJWYWx1ZTsgfVxyXG4gICAgc2V0IGNob2ljZXNPcmRlcihuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09IHRoaXMuY2hvaWNlc09yZGVyVmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNob2ljZXNPcmRlclZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvdGhlclRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJUZXh0LnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgb3RoZXJUZXh0KHZhbHVlOiBzdHJpbmcpIHsgXHJcbiAgICAgICAgdGhpcy5sb2NPdGhlclRleHQudGV4dCA9IHZhbHVlOyBcclxuICAgICAgICB0aGlzLnVwZGF0ZU90aGVySXRlbSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvdGhlckVycm9yVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlckVycm9yVGV4dC50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IG90aGVyRXJyb3JUZXh0KHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NPdGhlckVycm9yVGV4dC50ZXh0ID0gdmFsdWU7ICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY090aGVyVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY090aGVyVGV4dFZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldCBsb2NPdGhlckVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY090aGVyRXJyb3JUZXh0VmFsdWU7IH0gXHJcbiAgICBcclxuICAgIGdldCB2aXNpYmxlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzT3RoZXIgJiYgdGhpcy5jaG9pY2VzT3JkZXIgPT0gXCJub25lXCIpIHJldHVybiB0aGlzLmFjdGl2ZUNob2ljZXM7XHJcbiAgICAgICAgaWYoIXRoaXMudmlzaWJsZUNob2ljZXNDYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGUgPSB0aGlzLnNvcnRWaXNpYmxlQ2hvaWNlcyh0aGlzLmFjdGl2ZUNob2ljZXMuc2xpY2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc090aGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGUucHVzaCh0aGlzLm90aGVySXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNob2ljZXNDYWNoZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0IGFjdGl2ZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7IHJldHVybiB0aGlzLmNob2ljZXNGcm9tVXJsID8gdGhpcy5jaG9pY2VzRnJvbVVybCA6IHRoaXMuY2hvaWNlczsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIGlmICghdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgdGhpcy5jb21tZW50KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLm90aGVyRXJyb3JUZXh0O1xyXG4gICAgICAgIGlmICghdGV4dCkge1xyXG4gICAgICAgICAgICB0ZXh0ID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVyUmVxdWlyZWRFcnJvclwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IEN1c3RvbUVycm9yKHRleHQpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBvbkxvY2FsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgc3VwZXIub25Mb2NhbGVDaGFuZ2VkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVPdGhlckl0ZW0oKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlT3RoZXJJdGVtKCkge1xyXG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5vdGhlckl0ZW07IC8vIHNldCB0aGUgY29ycmVjdCB0ZXh0XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpIHsgcmV0dXJuIHRoaXMuc3RvcmVPdGhlcnNBc0NvbW1lbnQgJiYgKHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5zdG9yZU90aGVyc0FzQ29tbWVudCA6IHRydWUpOyB9XHJcbiAgICBvblN1cnZleUxvYWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvaWNlc0J5VXJsKSB0aGlzLmNob2ljZXNCeVVybC5ydW4oKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb25Mb2FkQ2hvaWNlc0Zyb21VcmwoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcclxuICAgICAgICB2YXIgZXJyb3JDb3VudCA9IHRoaXMuZXJyb3JzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNCeVVybCAmJiB0aGlzLmNob2ljZXNCeVVybC5lcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKHRoaXMuY2hvaWNlc0J5VXJsLmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yQ291bnQgPiAwIHx8IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV3Q2hvaWNlcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbmV3Q2hvaWNlcyA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XHJcbiAgICAgICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKG5ld0Nob2ljZXMsIGFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzRnJvbVVybCA9IG5ld0Nob2ljZXM7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY2hvaWNlc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNvcnRWaXNpYmxlQ2hvaWNlcyhhcnJheTogQXJyYXk8SXRlbVZhbHVlPik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIHZhciBvcmRlciA9IHRoaXMuY2hvaWNlc09yZGVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKG9yZGVyID09IFwiYXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgMSk7XHJcbiAgICAgICAgaWYgKG9yZGVyID09IFwiZGVzY1wiKSByZXR1cm4gdGhpcy5zb3J0QXJyYXkoYXJyYXksIC0xKTtcclxuICAgICAgICBpZiAob3JkZXIgPT0gXCJyYW5kb21cIikgcmV0dXJuIHRoaXMucmFuZG9taXplQXJyYXkoYXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc29ydEFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+LCBtdWx0OiBudW1iZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICBpZiAoYS50ZXh0IDwgYi50ZXh0KSByZXR1cm4gLTEgKiBtdWx0O1xyXG4gICAgICAgICAgICBpZiAoYS50ZXh0ID4gYi50ZXh0KSByZXR1cm4gMSAqIG11bHQ7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByYW5kb21pemVBcnJheShhcnJheTogQXJyYXk8SXRlbVZhbHVlPik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XHJcbiAgICAgICAgICAgIHZhciB0ZW1wID0gYXJyYXlbaV07XHJcbiAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07XHJcbiAgICAgICAgICAgIGFycmF5W2pdID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgfVxyXG4gICAgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XHJcbiAgICAgICAgc3VwZXIuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcclxuICAgICAgICBpZighdGhpcy5pc090aGVyU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94QmFzZSBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XHJcbiAgICBwcml2YXRlIGNvbENvdW50VmFsdWU6IG51bWJlciA9IDE7XHJcbiAgICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29sQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29sQ291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2VsZWN0YmFzZVwiLCBbXCJoYXNDb21tZW50OmJvb2xlYW5cIiwgXCJoYXNPdGhlcjpib29sZWFuXCIsXHJcbiAgICB7IG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNob2ljZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICB7IG5hbWU6IFwiY2hvaWNlc09yZGVyXCIsIGRlZmF1bHQ6IFwibm9uZVwiLCBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSB9LFxyXG4gICAgeyBuYW1lOiBcImNob2ljZXNCeVVybDpyZXN0ZnVsbFwiLCBjbGFzc05hbWU6IFwiQ2hvaWNlc1Jlc3RmdWxsXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gb2JqLmNob2ljZXNCeVVybC5pc0VtcHR5ID8gbnVsbCA6IG9iai5jaG9pY2VzQnlVcmw7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmouY2hvaWNlc0J5VXJsLnNldERhdGEodmFsdWUpOyB9IH0sXHJcbiAgICB7IG5hbWU6IFwib3RoZXJUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlclRleHRcIiB9LCB7bmFtZTogXCJvdGhlckVycm9yVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJFcnJvclRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlfV0sIG51bGwsIFwicXVlc3Rpb25cIik7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiY2hlY2tib3hiYXNlXCIsIFt7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0XSB9XSwgbnVsbCwgXCJzZWxlY3RiYXNlXCIpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9iYXNlc2VsZWN0LnRzIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSAnLi4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSAnLi4vcXVlc3Rpb24nO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gJy4vcmVhY3RxdWVzdGlvbmNvbW1lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvciB7XHJcbiAgICBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSk6IEpTWC5FbGVtZW50O1xyXG4gICAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yVGV4dDogc3RyaW5nKTogSlNYLkVsZW1lbnQ7XHJcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcXVlc3Rpb25CYXNlOiBRdWVzdGlvbkJhc2U7XHJcbiAgICBwcm90ZWN0ZWQgcXVlc3Rpb246IFF1ZXN0aW9uO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvbihwcm9wcy5xdWVzdGlvbik7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvbihuZXh0UHJvcHMucXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRRdWVzdGlvbihxdWVzdGlvbikge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlID0gcXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHF1ZXN0aW9uIGluc3RhbmNlb2YgUXVlc3Rpb24gPyBxdWVzdGlvbiA6IG51bGw7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5xdWVzdGlvbiA/IHRoaXMucXVlc3Rpb24udmFsdWUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IFxyXG4gICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlLCB2YWx1ZTogdmFsdWUsIGVycm9yOiAwLCByZW5kZXJXaWR0aDogMCxcclxuICAgICAgICAgICAgdmlzaWJsZUluZGV4VmFsdWU6IC0xLCBpc1JlYWRPbmx5IDogdGhpcy5xdWVzdGlvbkJhc2UuaXNSZWFkT25seVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZVtcInJlYWN0XCJdID0gc2VsZjtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLnJlbmRlcldpZHRoID0gc2VsZi5zdGF0ZS5yZW5kZXJXaWR0aCArIDE7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS52aXNpYmxlSW5kZXhWYWx1ZSA9IHNlbGYucXVlc3Rpb25CYXNlLnZpc2libGVJbmRleDtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUuaXNSZWFkT25seSA9IHNlbGYucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMucmVmc1tcInJvb3RcIl07XHJcbiAgICAgICAgICAgIGlmIChlbCAmJiB0aGlzLnF1ZXN0aW9uQmFzZS5zdXJ2ZXkpIHRoaXMucXVlc3Rpb25CYXNlLnN1cnZleS5hZnRlclJlbmRlclF1ZXN0aW9uKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcclxuICAgICAgICAgICAgICAgIGVsID0gdGhpcy5yZWZzW1wid2lkZ2V0XCJdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsKSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMucmVmc1tcInJvb3RcIl07XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlW1wicmVhY3RcIl0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xyXG4gICAgICAgICAgICBlbCA9IHRoaXMucmVmc1tcIndpZGdldFwiXTtcclxuICAgICAgICAgICAgaWYgKGVsKSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbkJhc2UgfHwgIXRoaXMuY3JlYXRvcikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcXVlc3Rpb25SZW5kZXIgPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5xdWVzdGlvbkJhc2UuaGFzVGl0bGUgPyB0aGlzLnJlbmRlclRpdGxlKCkgOiBudWxsO1xyXG4gICAgICAgIHZhciB0aXRsZVRvcCA9IHRoaXMuY3JlYXRvci5xdWVzdGlvblRpdGxlTG9jYXRpb24oKSA9PSBcInRvcFwiID8gdGl0bGUgOiBudWxsO1xyXG4gICAgICAgIHZhciB0aXRsZUJvdHRvbSA9IHRoaXMuY3JlYXRvci5xdWVzdGlvblRpdGxlTG9jYXRpb24oKSA9PSBcImJvdHRvbVwiID8gdGl0bGUgOiBudWxsO1xyXG4gICAgICAgIHZhciBjb21tZW50ID0gKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5oYXNDb21tZW50KSA/IHRoaXMucmVuZGVyQ29tbWVudCgpIDogbnVsbDtcclxuICAgICAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoKTtcclxuICAgICAgICB2YXIgbWFyZ2luTGVmdCA9ICh0aGlzLnF1ZXN0aW9uQmFzZS5pbmRlbnQgPiAwKSA/IHRoaXMucXVlc3Rpb25CYXNlLmluZGVudCAqIHRoaXMuY3NzLnF1ZXN0aW9uLmluZGVudCArIFwicHhcIiA6IG51bGw7XHJcbiAgICAgICAgdmFyIHBhZGRpbmdSaWdodCA9ICh0aGlzLnF1ZXN0aW9uQmFzZS5yaWdodEluZGVudCA+IDApID8gdGhpcy5xdWVzdGlvbkJhc2UucmlnaHRJbmRlbnQgKiB0aGlzLmNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCIgOiBudWxsO1xyXG4gICAgICAgIHZhciByb290U3R5bGUgPSB7IGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLCB2ZXJ0aWNhbEFsaWduOiAndG9wJyB9O1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJXaWR0aCkgcm9vdFN0eWxlW1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJXaWR0aDtcclxuICAgICAgICBpZiAobWFyZ2luTGVmdCkgcm9vdFN0eWxlW1wibWFyZ2luTGVmdFwiXSA9IG1hcmdpbkxlZnQ7XHJcbiAgICAgICAgaWYgKHBhZGRpbmdSaWdodCkgcm9vdFN0eWxlW1wicGFkZGluZ1JpZ2h0XCJdID0gcGFkZGluZ1JpZ2h0O1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgIHJlZj1cInJvb3RcIiBpZD17dGhpcy5xdWVzdGlvbkJhc2UuaWR9IGNsYXNzTmFtZT17dGhpcy5jc3MucXVlc3Rpb24ucm9vdH0gc3R5bGU9e3Jvb3RTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICB7dGl0bGVUb3B9XHJcbiAgICAgICAgICAgICAgICB7ZXJyb3JzfVxyXG4gICAgICAgICAgICAgICAge3F1ZXN0aW9uUmVuZGVyfVxyXG4gICAgICAgICAgICAgICAge2NvbW1lbnR9XHJcbiAgICAgICAgICAgICAgICB7dGl0bGVCb3R0b219XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBjdXN0b21XaWRnZXQgPSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQ7XHJcbiAgICAgICAgaWYgKCFjdXN0b21XaWRnZXQpIHJldHVybiB0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKTtcclxuICAgICAgICB2YXIgd2lkZ2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiByZWY9XCJ3aWRnZXRcIj57dGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudCh0aGlzLnF1ZXN0aW9uQmFzZSl9PC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IHJlZj1cIndpZGdldFwiIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9PjwvZGl2Pik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgcmVmPVwid2lkZ2V0XCI+e3dpZGdldH08L2Rpdj5cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHRpdGxlVGV4dCA9IHRoaXMucXVlc3Rpb24uZnVsbFRpdGxlO1xyXG4gICAgICAgIHJldHVybiAoPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MucXVlc3Rpb24udGl0bGV9Pnt0aXRsZVRleHR9PC9oNT4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckNvbW1lbnQoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiAoPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+e3RoaXMucXVlc3Rpb24uY29tbWVudFRleHR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGNzcz17dGhpcy5jc3N9IC8+XHJcbiAgICAgICAgICAgIDwvZGl2Pik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPFN1cnZleVF1ZXN0aW9uRXJyb3JzIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMuY3NzfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVycm9ycyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICAgIHByaXZhdGUgY3JlYXRvcjogSVN1cnZleUNyZWF0b3I7XHJcbiAgICBwcm90ZWN0ZWQgY3NzOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UXVlc3Rpb24ocHJvcHMucXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IHByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBwcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvbihuZXh0UHJvcHMucXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRvciA9IG5leHRQcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gbmV4dFByb3BzLmNzcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UXVlc3Rpb24ocXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcXVlc3Rpb24gaW5zdGFuY2VvZiBRdWVzdGlvbiA/IHF1ZXN0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZXJyb3JzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5lcnJvciA9IHNlbGYuc3RhdGUuZXJyb3IgKyAxO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlID0geyBlcnJvcjogMCB9O1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24gfHwgdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBlcnJvcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvclRleHQgPSB0aGlzLnF1ZXN0aW9uLmVycm9yc1tpXS5nZXRUZXh0KCk7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcImVycm9yXCIgKyBpO1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaCh0aGlzLmNyZWF0b3IucmVuZGVyRXJyb3Ioa2V5LCBlcnJvclRleHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuZXJyb3Iucm9vdH0+e2Vycm9yc308L2Rpdj4pO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVhY3RTdXJ2ZXlNb2RlbCBleHRlbmRzIFN1cnZleU1vZGVsIHtcclxuICAgIHJlbmRlckNhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IoanNvbk9iajogYW55ID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKGpzb25PYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJDYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG1lcmdlQ3NzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1lcmdlVmFsdWVzKHNyYywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9BZnRlclJlbmRlclN1cnZleShlbCkge1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbC50c3giLCJpbXBvcnQge0hhc2hUYWJsZX0gZnJvbSAnLi9iYXNlJztcclxuaW1wb3J0IHtDb25kaXRpb25zUGFyc2VyfSBmcm9tICcuL2NvbmRpdGlvbnNQYXJzZXInO1xyXG5pbXBvcnQge1Byb2Nlc3NWYWx1ZX0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uIHtcclxuICAgIHN0YXRpYyBvcGVyYXRvcnNWYWx1ZTogSGFzaFRhYmxlPEZ1bmN0aW9uPiA9IG51bGw7XHJcbiAgICBzdGF0aWMgZ2V0IG9wZXJhdG9ycygpIHtcclxuICAgICAgICBpZiAoQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpIHJldHVybiBDb25kaXRpb24ub3BlcmF0b3JzVmFsdWU7XHJcbiAgICAgICAgQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlID0ge1xyXG4gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiAhbGVmdDsgfSxcclxuICAgICAgICAgICAgbm90ZW1wdHk6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gISghbGVmdCk7IH0sXHJcbiAgICAgICAgICAgIGVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPT0gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIG5vdGVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgJiYgbGVmdFtcImluZGV4T2ZcIl0gJiYgbGVmdC5pbmRleE9mKHJpZ2h0KSA+IC0xOyB9LFxyXG4gICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiAhbGVmdCB8fCAhbGVmdFtcImluZGV4T2ZcIl0gfHwgbGVmdC5pbmRleE9mKHJpZ2h0KSA9PSAtMTsgfSxcclxuICAgICAgICAgICAgZ3JlYXRlcjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ID4gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGxlc3M6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA8IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0ID49IHJpZ2h0OyB9LFxyXG4gICAgICAgICAgICBsZXNzb3JlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0IDw9IHJpZ2h0OyB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcFZhbHVlOiBzdHJpbmcgPSBcImVxdWFsXCI7XHJcbiAgICBwdWJsaWMgbGVmdDogYW55O1xyXG4gICAgcHVibGljIHJpZ2h0OiBhbnk7XHJcbiAgICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm9wVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFDb25kaXRpb24ub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub3BWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHBlcmZvcm0obGVmdDogYW55ID0gbnVsbCwgcmlnaHQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWxlZnQpIGxlZnQgPSB0aGlzLmxlZnQ7XHJcbiAgICAgICAgaWYgKCFyaWdodCkgcmlnaHQgPSB0aGlzLnJpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uLm9wZXJhdG9yc1t0aGlzLm9wZXJhdG9yXSh0aGlzLmdldFB1cmVWYWx1ZShsZWZ0KSwgdGhpcy5nZXRQdXJlVmFsdWUocmlnaHQpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHVyZVZhbHVlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXZhbCB8fCAodHlwZW9mIHZhbCAhPSBcInN0cmluZ1wiKSkgcmV0dXJuIHZhbDtcclxuICAgICAgICB2YXIgc3RyID0gXCJcIjtcclxuICAgICAgICBpZiAodmFsLmxlbmd0aCA+IDAgJiYgKHZhbFswXSA9PSBcIidcIiB8fCB2YWxbMF0gPT0gJ1wiJykpICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xyXG4gICAgICAgIHZhciBsZW4gPSB2YWwubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsZW4gPiAwICYmICh2YWxbbGVuIC0gMV0gPT0gXCInXCIgfHwgdmFsW2xlbiAtIDFdID09ICdcIicpKSAgdmFsID0gdmFsLnN1YnN0cigwLCBsZW4gLSAxKTtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25Ob2RlIHtcclxuICAgIHByaXZhdGUgY29ubmVjdGl2ZVZhbHVlOiBzdHJpbmcgPSBcImFuZFwiO1xyXG4gICAgcHVibGljIGNoaWxkcmVuOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7IH1cclxuICAgIHB1YmxpYyBnZXQgY29ubmVjdGl2ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25uZWN0aXZlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29ubmVjdGl2ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCImXCIgfHwgdmFsdWUgPT0gXCImJlwiKSB2YWx1ZSA9IFwiYW5kXCI7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwifFwiIHx8IHZhbHVlID09IFwifHxcIikgdmFsdWUgPSBcIm9yXCI7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IFwiYW5kXCIgJiYgdmFsdWUgIT0gXCJvclwiKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aXZlVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7IH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aXZlID0gXCJhbmRcIjtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uUnVubmVyIHtcclxuICAgIHByaXZhdGUgZXhwcmVzc2lvblZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHByb2Nlc3NWYWx1ZTogUHJvY2Vzc1ZhbHVlO1xyXG4gICAgcHJpdmF0ZSByb290OiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+O1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucm9vdCA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcclxuICAgICAgICB0aGlzLnByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbiA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgbmV3IENvbmRpdGlvbnNQYXJzZXIoKS5wYXJzZSh0aGlzLmV4cHJlc3Npb25WYWx1ZSwgdGhpcy5yb290KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW4odmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bk5vZGUodGhpcy5yb290KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcnVuTm9kZShub2RlOiBDb25kaXRpb25Ob2RlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIG9uRmlyc3RGYWlsID0gbm9kZS5jb25uZWN0aXZlID09IFwiYW5kXCI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLnJ1bk5vZGVDb25kaXRpb24obm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzICYmIG9uRmlyc3RGYWlsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgIW9uRmlyc3RGYWlsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9uRmlyc3RGYWlsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Ob2RlQ29uZGl0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHZhbHVlW1wiY2hpbGRyZW5cIl0pIHJldHVybiB0aGlzLnJ1bk5vZGUodmFsdWUpO1xyXG4gICAgICAgIGlmICh2YWx1ZVtcImxlZnRcIl0pIHJldHVybiB0aGlzLnJ1bkNvbmRpdGlvbih2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Db25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb24pOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgbGVmdCA9IGNvbmRpdGlvbi5sZWZ0O1xyXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUobGVmdCk7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NWYWx1ZS5oYXNWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcykpIHJldHVybiBjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZW1wdHlcIjtcclxuICAgICAgICAgICAgbGVmdCA9IHRoaXMucHJvY2Vzc1ZhbHVlLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xyXG4gICAgICAgIG5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZShyaWdodCk7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NWYWx1ZS5oYXNWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25kaXRpb24ucGVyZm9ybShsZWZ0LCByaWdodCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlTmFtZShub2RlVmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghbm9kZVZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodHlwZW9mIG5vZGVWYWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmIChub2RlVmFsdWUubGVuZ3RoIDwgMyB8fCBub2RlVmFsdWVbMF0gIT0gJ3snIHx8IG5vZGVWYWx1ZVtub2RlVmFsdWUubGVuZ3RoIC0gMV0gIT0gJ30nKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbm9kZVZhbHVlLnN1YnN0cigxLCBub2RlVmFsdWUubGVuZ3RoIC0gMik7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uZGl0aW9ucy50cyIsImV4cG9ydCB2YXIgc3VydmV5Q3NzID0ge1xyXG4gICAgY3VycmVudFR5cGU6IFwiXCIsXHJcbiAgICBnZXRDc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50VHlwZSA/IHRoaXNbdGhpcy5jdXJyZW50VHlwZV0gOiBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICAgICAgaWYgKCFsb2MpIGxvYyA9IGRlZmF1bHRTdGFuZGFyZENzcztcclxuICAgICAgICByZXR1cm4gbG9jO1xyXG4gICAgfSxcclxufTtcclxuXHJcbmV4cG9ydCB2YXIgZGVmYXVsdFN0YW5kYXJkQ3NzID0ge1xyXG4gICAgcm9vdDogXCJzdl9tYWluXCIsXHJcbiAgICBoZWFkZXI6IFwiXCIsXHJcbiAgICBib2R5OiBcInN2X2JvZHlcIixcclxuICAgIGZvb3RlcjogXCJzdl9uYXZcIixcclxuICAgIG5hdmlnYXRpb25CdXR0b246IFwiXCIsIG5hdmlnYXRpb246IHsgY29tcGxldGU6IFwiXCIsIHByZXY6XCJcIiwgbmV4dDogXCJcIn0sXHJcbiAgICBwcm9ncmVzczogXCJzdl9wcm9ncmVzc1wiLCBwcm9ncmVzc0JhcjogXCJcIixcclxuICAgIHBhZ2VUaXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICByb3c6IFwic3Zfcm93XCIsXHJcbiAgICBxdWVzdGlvbjogeyByb290OiBcInN2X3FcIiwgdGl0bGU6IFwic3ZfcV90aXRsZVwiLCBjb21tZW50OiBcIlwiLCBpbmRlbnQ6IDIwIH0sXHJcbiAgICBlcnJvcjogeyByb290OiBcInN2X3FfZXJib3hcIiwgaWNvbjogXCJcIiwgaXRlbTogXCJcIiB9LFxyXG5cclxuICAgIGNoZWNrYm94OiB7IHJvb3Q6IFwic3ZfcWNiY1wiLCBpdGVtOiBcInN2X3FfY2hlY2tib3hcIiwgb3RoZXI6IFwic3ZfcV9vdGhlclwiIH0sXHJcbiAgICBjb21tZW50OiBcIlwiLFxyXG4gICAgZHJvcGRvd246IHsgcm9vdDogXCJcIiwgY29udHJvbDogXCJcIiB9LFxyXG4gICAgbWF0cml4OiB7IHJvb3Q6IFwic3ZfcV9tYXRyaXhcIiB9LFxyXG4gICAgbWF0cml4ZHJvcGRvd246IHsgcm9vdDogXCJzdl9xX21hdHJpeFwiIH0sXHJcbiAgICBtYXRyaXhkeW5hbWljOiB7IHJvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcIlwiIH0sXHJcbiAgICBtdWx0aXBsZXRleHQ6IHsgcm9vdDogXCJcIiwgaXRlbVRpdGxlOiBcIlwiLCBpdGVtVmFsdWU6IFwiXCIgfSxcclxuICAgIHJhZGlvZ3JvdXA6IHsgcm9vdDogXCJzdl9xY2JjXCIsIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsIGxhYmVsOiBcIlwiLCBvdGhlcjogXCJzdl9xX290aGVyXCIgfSxcclxuICAgIHJhdGluZzogeyByb290OiBcInN2X3FfcmF0aW5nXCIsIGl0ZW06IFwic3ZfcV9yYXRpbmdfaXRlbVwiIH0sXHJcbiAgICB0ZXh0OiBcIlwiLFxyXG4gICAgd2luZG93OiB7XHJcbiAgICAgICAgcm9vdDogXCJzdl93aW5kb3dcIiwgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxyXG4gICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLCB0aXRsZTogXCJcIiwgYnV0dG9uOiBcIlwiLCBidXR0b25FeHBhbmRlZDogXCJcIiwgYnV0dG9uQ29sbGFwc2VkOiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuc3VydmV5Q3NzW1wic3RhbmRhcmRcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmQudHMiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gICAgcHJvdGVjdGVkIHN1cnZleTogU3VydmV5TW9kZWw7XHJcbiAgICBwcm90ZWN0ZWQgY3NzOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gcHJvcHMuc3VydmV5O1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHVwZGF0ZTogMCB9O1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV4dFByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVN0YXRlRnVuY3Rpb246IGFueSA9IG51bGw7XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLnVwZGF0ZSA9IHNlbGYuc3RhdGUudXBkYXRlICsgMTtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5yZW1vdmUodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJpbXBvcnQge0Jhc2UsIFN1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hvaWNlc1Jlc3RmdWxsIGV4dGVuZHMgQmFzZSB7XHJcbiAgICBwdWJsaWMgdXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHBhdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgdmFsdWVOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHRpdGxlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJ1bigpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXJsIHx8ICF0aGlzLmdldFJlc3VsdENhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB0aGlzLnVybCk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLm9uTG9hZChKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImNob2ljZXNCeVVybFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnVybCAmJiAhdGhpcy5wYXRoICYmICF0aGlzLnZhbHVlTmFtZSAmJiAhdGhpcy50aXRsZU5hbWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0RGF0YShqc29uOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgaWYgKGpzb24udXJsKSB0aGlzLnVybCA9IGpzb24udXJsO1xyXG4gICAgICAgIGlmIChqc29uLnBhdGgpIHRoaXMucGF0aCA9IGpzb24ucGF0aDtcclxuICAgICAgICBpZiAoanNvbi52YWx1ZU5hbWUpIHRoaXMudmFsdWVOYW1lID0ganNvbi52YWx1ZU5hbWU7XHJcbiAgICAgICAgaWYgKGpzb24udGl0bGVOYW1lKSB0aGlzLnRpdGxlTmFtZSA9IGpzb24udGl0bGVOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMudXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBhdGggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkKHJlc3VsdDogYW55KSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5nZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0KTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdFtcImxlbmd0aFwiXSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IHJlc3VsdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICghaXRlbVZhbHVlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobmV3IEl0ZW1WYWx1ZSh2YWx1ZSwgdGl0bGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVybEdldENob2ljZXNFcnJvclwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVycm9yKHN0YXR1czogc3RyaW5nLCByZXNwb25zZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBDdXN0b21FcnJvcihzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsUmVxdWVzdEVycm9yXCIpW1wiZm9ybWF0XCJdKHN0YXR1cywgcmVzcG9uc2UpKTtcclxuICAgICAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKFtdKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhdGgpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgdmFyIHBhdGhlcyA9IHRoaXMuZ2V0UGF0aGVzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhlc1tpXV07XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UGF0aGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwYXRoZXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5wYXRoLmluZGV4T2YoJzsnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHBhdGhlcyA9IHRoaXMucGF0aC5zcGxpdCgnOycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhdGhlcyA9IHRoaXMucGF0aC5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF0aGVzLmxlbmd0aCA9PSAwKSBwYXRoZXMucHVzaCh0aGlzLnBhdGgpO1xyXG4gICAgICAgIHJldHVybiBwYXRoZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lKSByZXR1cm4gaXRlbVt0aGlzLnZhbHVlTmFtZV07XHJcbiAgICAgICAgdmFyIGxlbiA9IE9iamVjdC5rZXlzKGl0ZW0pLmxlbmd0aDtcclxuICAgICAgICBpZiAobGVuIDwgMSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bT2JqZWN0LmtleXMoaXRlbSlbMF1dO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUaXRsZShpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdGhpcy50aXRsZU5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMudGl0bGVOYW1lXTtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiY2hvaWNlc0J5VXJsXCIsIFtcInVybFwiLCBcInBhdGhcIiwgXCJ2YWx1ZU5hbWVcIiwgXCJ0aXRsZU5hbWVcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nob2ljZXNSZXN0ZnVsbC50cyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2Nlc3NWYWx1ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIGdldEZpcnN0TmFtZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgdmFyIHJlcyA9IFwiXCI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaCA9IHRleHRbaV07XHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ1snKSBicmVhaztcclxuICAgICAgICAgICAgcmVzICs9IGNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc1ZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xyXG4gICAgICAgIHJldHVybiByZXMuaGFzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcclxuICAgICAgICByZXR1cm4gcmVzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHsgaGFzVmFsdWU6IGZhbHNlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICAgIHZhciBjdXJWYWx1ZSA9IHZhbHVlcztcclxuICAgICAgICBpZiAoIWN1clZhbHVlKSByZXR1cm4gcmVzO1xyXG4gICAgICAgIHZhciBpc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAodGV4dCAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzQXJyYXkgPSAhaXNGaXJzdCAmJiB0ZXh0WzBdID09ICdbJztcclxuICAgICAgICAgICAgaWYgKCFpc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3QpIHRleHQgPSB0ZXh0LnN1YnN0cigxKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdE5hbWUodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1ck5hbWUpIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1clZhbHVlW2N1ck5hbWVdKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBjdXJWYWx1ZVtjdXJOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKGN1ck5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJWYWx1ZSkpIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0W2luZGV4XSAhPSAnXScpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGV4dFtpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRleHQgPSBpbmRleCA8IHRleHQubGVuZ3RoID8gdGV4dC5zdWJzdHIoaW5kZXggKyAxKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0SW50VmFsdWUoc3RyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gY3VyVmFsdWUubGVuZ3RoKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBjdXJWYWx1ZVtpbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMudmFsdWUgPSBjdXJWYWx1ZTtcclxuICAgICAgICByZXMuaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEludFZhbHVlKHN0cjogYW55KSB7XHJcbiAgICAgICAgaWYgKHN0ciA9PSBcIjBcIiB8fCAoKHN0ciB8IDApID4gMCAmJiBzdHIgJSAxID09IDApKVxyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHN0cik7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0Jhc2UsIElTdXJ2ZXlEYXRhLCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uU2VsZWN0QmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNoZWNrYm94TW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX2NoZWNrYm94XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcclxuaW1wb3J0IHtRdWVzdGlvblRleHRNb2RlbH0gZnJvbSBcIi4vcXVlc3Rpb25fdGV4dFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQ29tbWVudE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9jb21tZW50XCI7XHJcbmltcG9ydCB7Q2hvaWNlc1Jlc3RmdWxsfSBmcm9tIFwiLi9jaG9pY2VzUmVzdGZ1bGxcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERyb3Bkb3duRGF0YSB7XHJcbiAgICBvblJvd0NoYW5nZWQoY2VsbDogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIG5ld1Jvd1ZhbHVlOiBhbnkpO1xyXG4gICAgY29sdW1uczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+O1xyXG4gICAgY3JlYXRlUXVlc3Rpb24ocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uO1xyXG4gICAgZ2V0TG9jYWxlKCk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ29sdW1uIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICAgIHByaXZhdGUgY2hvaWNlc1ZhbHVlOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jT3B0aW9uc0NhcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1BsYWNlSG9sZGVyVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzT3RoZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBjZWxsVHlwZTogc3RyaW5nID0gXCJkZWZhdWx0XCI7XHJcbiAgICBwdWJsaWMgaW5wdXRUeXBlOiBzdHJpbmcgPSBcInRleHRcIjtcclxuICAgIHB1YmxpYyBjaG9pY2VzT3JkZXI6IHN0cmluZyA9IFwibm9uZVwiO1xyXG4gICAgcHVibGljIGNob2ljZXNCeVVybDogQ2hvaWNlc1Jlc3RmdWxsO1xyXG4gICAgcHVibGljIGxvY093bmVyOiBJTG9jYWxpemFibGVPd25lciA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNvbENvdW50VmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsID0gbmV3IENob2ljZXNSZXN0ZnVsbCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKSB7IHJldHVybiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIgfVxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0ID8gdGhpcy5sb2NUaXRsZS50ZXh0IDogdGhpcy5uYW1lOyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NUaXRsZS50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKSB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbHVlOiBzdHJpbmcpeyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY09wdGlvbnNDYXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlOyB9XHJcblxyXG4gICAgcHVibGljIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY2hvaWNlcyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMuY2hvaWNlc1ZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IC0xIHx8IHZhbHVlID4gNCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY29sQ291bnRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldExvY2FsZSgpIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25DZWxsIHtcclxuICAgIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbiwgcHVibGljIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVmFsdWUgPSBkYXRhLmNyZWF0ZVF1ZXN0aW9uKHRoaXMucm93LCB0aGlzLmNvbHVtbik7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlLnNldERhdGEocm93KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24geyByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7IHJldHVybiB0aGlzLnF1ZXN0aW9uLnZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpZENvdW50ZXI6IG51bWJlciA9IDE7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRJZCgpOiBzdHJpbmcgeyByZXR1cm4gXCJzcm93X1wiICsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuaWRDb3VudGVyKys7IH1cclxuICAgIHByb3RlY3RlZCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhO1xyXG4gICAgcHJpdmF0ZSByb3dWYWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHJvd0NvbW1lbnRzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBpc1NldHRpbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGNlbGxzOiBBcnJheTxNYXRyaXhEcm9wZG93bkNlbGw+ID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmdldElkKCk7XHJcbiAgICAgICAgdGhpcy5idWlsZENlbGxzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcm93TmFtZSgpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLnJvd1ZhbHVlczsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZXMgPSB7fTtcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm93VmFsdWVzW2tleV0gPSB2YWx1ZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmNlbGxzW2ldLnF1ZXN0aW9uLm9uU3VydmV5VmFsdWVDaGFuZ2VkKHRoaXMuZ2V0VmFsdWUodGhpcy5jZWxsc1tpXS5jb2x1bW4ubmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb3dWYWx1ZXNbbmFtZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZXR0aW5nVmFsdWUpIHJldHVybjtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIpIG5ld1ZhbHVlID0gbnVsbDtcclxuICAgICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1ZhbHVlc1tuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJvd1ZhbHVlc1tuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhLm9uUm93Q2hhbmdlZCh0aGlzLCB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93Q29tbWVudHNbbmFtZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJvd0NvbW1lbnRzW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCF2YWwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRMb2NhbGUoKSA6IFwiXCI7fVxyXG4gICAgcHJpdmF0ZSBidWlsZENlbGxzKCkge1xyXG4gICAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5kYXRhLmNvbHVtbnM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSBjb2x1bW5zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVDZWxsKGNvbHVtbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDZWxsKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBNYXRyaXhEcm9wZG93bkNlbGwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25DZWxsKGNvbHVtbiwgdGhpcywgdGhpcy5kYXRhKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgcHVibGljIHN0YXRpYyAgYWRkRGVmYXVsdENvbHVtbnMobWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XHJcbiAgICAgICAgdmFyIGNvbE5hbWVzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGNvbE5hbWVzLmxlbmd0aDsgaSArKylcclxuICAgICAgICAgICAgbWF0cml4LmFkZENvbHVtbihjb2xOYW1lc1tpXSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNvbHVtbnNWYWx1ZTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+ID0gW107XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgbG9jT3B0aW9uc0NhcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZWRWaXNpYmxlUm93czogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2VsbFR5cGVWYWx1ZTogc3RyaW5nID0gXCJkcm9wZG93blwiO1xyXG4gICAgcHJpdmF0ZSBjb2x1bW5Db2xDb3VudFZhbHVlOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGNvbHVtbk1pbldpZHRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGhvcml6b250YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb2x1bW5zQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIHVwZGF0ZUNlbGxzQ2FsbGJhazogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzVmFsdWUgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub3ZlcnJpZGVDb2x1bW5zTWV0aG9kcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxNYXRyaXhEcm9wZG93bkNvbHVtbj4geyByZXR1cm4gdGhpcy5jb2x1bW5zVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sdW1ucyh2YWx1ZTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+KSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29sdW1uc01ldGhvZHMoKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvdmVycmlkZUNvbHVtbnNNZXRob2RzKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZS5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgdmFsdWUubG9jT3duZXIgPSBzZWxmO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sdW1uc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBNYXRyaXhEcm9wZG93bkNvbHVtbltdKTogTWF0cml4RHJvcGRvd25Db2x1bW5bXSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcywgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi4gaXRlbXMpO1xyXG4gICAgICAgICAgICBpZighaXRlbXMpIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zW2ldLmxvY093bmVyID0gc2VsZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZi5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sdW1uc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjZWxsVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jZWxsVHlwZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNlbGxUeXBlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jZWxsVHlwZSA9PSBuZXdWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2VsbFR5cGVWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudXBkYXRlQ2VsbHNDYWxsYmFrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29sdW1uQ29sQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29sdW1uQ29sQ291bnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb2x1bW5Db2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbHVtbkNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnVwZGF0ZUNlbGxzQ2FsbGJhayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29sdW1uVGl0bGUoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNvbHVtbi50aXRsZTtcclxuICAgICAgICBpZiAoY29sdW1uLmlzUmVxdWlyZWQgJiYgdGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgICAgICAgdmFyIHJlcXVpcmVUZXh0ID0gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0O1xyXG4gICAgICAgICAgICBpZiAocmVxdWlyZVRleHQpIHJlcXVpcmVUZXh0ICs9IFwiIFwiO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXF1aXJlVGV4dCArIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDb2x1bW5XaWR0aChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLm1pbldpZHRoID8gY29sdW1uLm1pbldpZHRoIDogdGhpcy5jb2x1bW5NaW5XaWR0aDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvcHRpb25zQ2FwdGlvbigpIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dCA/IHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTsgfVxyXG4gICAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbihuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY09wdGlvbnNDYXB0aW9uKCkgeyByZXR1cm4gdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlOyB9XHJcbiAgICBwdWJsaWMgYWRkQ29sdW1uKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyA9IG51bGwpOiBNYXRyaXhEcm9wZG93bkNvbHVtbiB7XHJcbiAgICAgICAgdmFyIGNvbHVtbiA9IG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihuYW1lLCB0aXRsZSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUucHVzaChjb2x1bW4pO1xyXG4gICAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSB0aGlzLmdlbmVyYXRlUm93cygpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4geyByZXR1cm4gbnVsbDsgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhuYW1lOiBhbnksIHRleHQ6IHN0cmluZywgdmFsdWU6IGFueSk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVOZXdWYWx1ZShjdXJWYWx1ZTogYW55KTogYW55IHsgcmV0dXJuICFjdXJWYWx1ZSA/IHt9IDogY3VyVmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBnZXRSb3dWYWx1ZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBxdWVzdGlvblZhbHVlOiBhbnksIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gPyBxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQgJiYgY3JlYXRlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgICAgICBxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXSA9IHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkJlZm9yZVZhbHVlQ2hhbmdlZCh2YWw6IGFueSkge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcclxuICAgICAgICB0aGlzLm9uQmVmb3JlVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGlmKCEodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgfHwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZShyb3csIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XHJcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICAgICAgaWYgKCFyb3dzKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNlbGxzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgaWYgKCFjZWxscykgY29udGludWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCBjZWxscy5sZW5ndGg7IGNvbEluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbiAmJiAoIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgfHwgIXF1ZXN0aW9uLnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGVycm9zSW5Db2x1bW5zID0gdGhpcy5oYXNFcnJvckluQ29sdW1ucyhmaXJlQ2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKSB8fCBlcnJvc0luQ29sdW1ucztcclxuICAgIH1cclxuICAgIHByaXZhdGUgaGFzRXJyb3JJbkNvbHVtbnMoZmlyZUNhbGxiYWNrOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHJlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGxzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgICAgIHJlcyA9IGNlbGxzICYmIGNlbGxzW2NvbEluZGV4XSAmJiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb24gJiYgY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spIHx8IHJlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0Q2VsbFF1ZXN0aW9uKGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gPyBxdWVzdGlvbi5pbnB1dElkIDogc3VwZXIuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24odHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEZpcnN0Q2VsbFF1ZXN0aW9uKG9uRXJyb3I6IGJvb2xlYW4pOiBRdWVzdGlvbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNlbGxzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGNvbEluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghb25FcnJvcikgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmIChjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb24uY3VycmVudEVycm9yQ291bnQgPiAwKSByZXR1cm4gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvL0lNYXRyaXhEcm9wZG93bkRhdGFcclxuICAgIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuY3JlYXRlUXVlc3Rpb25Db3JlKHJvdywgY29sdW1uKTtcclxuICAgICAgICBxdWVzdGlvbi5uYW1lID0gY29sdW1uLm5hbWU7XHJcbiAgICAgICAgcXVlc3Rpb24uaXNSZXF1aXJlZCA9IGNvbHVtbi5pc1JlcXVpcmVkO1xyXG4gICAgICAgIHF1ZXN0aW9uLmhhc090aGVyID0gY29sdW1uLmhhc090aGVyO1xyXG4gICAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5ID0gdGhpcy5yZWFkT25seTtcclxuICAgICAgICBxdWVzdGlvbi5zZXREYXRhKHRoaXMuc3VydmV5KTtcclxuICAgICAgICBpZiAoY29sdW1uLmhhc090aGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbiBpbnN0YW5jZW9mIFF1ZXN0aW9uU2VsZWN0QmFzZSkge1xyXG4gICAgICAgICAgICAgICAgKDxRdWVzdGlvblNlbGVjdEJhc2U+cXVlc3Rpb24pLnN0b3JlT3RoZXJzQXNDb21tZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uQ29yZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIHZhciBjZWxsVHlwZSA9IGNvbHVtbi5jZWxsVHlwZSA9PSBcImRlZmF1bHRcIiA/IHRoaXMuY2VsbFR5cGUgOiBjb2x1bW4uY2VsbFR5cGU7XHJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldFF1ZXN0aW9uTmFtZShyb3csIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwiY2hlY2tib3hcIikgcmV0dXJuIHRoaXMuY3JlYXRlQ2hlY2tib3gobmFtZSwgY29sdW1uKTtcclxuICAgICAgICBpZiAoY2VsbFR5cGUgPT0gXCJyYWRpb2dyb3VwXCIpIHJldHVybiB0aGlzLmNyZWF0ZVJhZGlvZ3JvdXAobmFtZSwgY29sdW1uKTtcclxuICAgICAgICBpZiAoY2VsbFR5cGUgPT0gXCJ0ZXh0XCIpIHJldHVybiB0aGlzLmNyZWF0ZVRleHQobmFtZSwgY29sdW1uKTtcclxuICAgICAgICBpZiAoY2VsbFR5cGUgPT0gXCJjb21tZW50XCIpIHJldHVybiB0aGlzLmNyZWF0ZUNvbW1lbnQobmFtZSwgY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVEcm9wZG93bihuYW1lLCBjb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uTmFtZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogc3RyaW5nIHsgcmV0dXJuIHJvdy5yb3dOYW1lICsgXCJfXCIgKyBjb2x1bW4ubmFtZTsgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbHVtbkNob2ljZXMoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW4uY2hvaWNlcyAmJiBjb2x1bW4uY2hvaWNlcy5sZW5ndGggPiAwID8gY29sdW1uLmNob2ljZXMgOiB0aGlzLmNob2ljZXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q29sdW1uT3B0aW9uc0NhcHRpb24oY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5vcHRpb25zQ2FwdGlvbiA/IGNvbHVtbi5vcHRpb25zQ2FwdGlvbiA6IHRoaXMub3B0aW9uc0NhcHRpb247XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlRHJvcGRvd24obmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25Ecm9wZG93bk1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkRyb3Bkb3duTW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJkcm9wZG93blwiLCBuYW1lKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdEJhc2VQcm9wZXJ0aWVzKHEsIGNvbHVtbik7XHJcbiAgICAgICAgcS5vcHRpb25zQ2FwdGlvbiA9IHRoaXMuZ2V0Q29sdW1uT3B0aW9uc0NhcHRpb24oY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gcTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDaGVja2JveChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xyXG4gICAgICAgIHZhciBxID0gPFF1ZXN0aW9uQ2hlY2tib3hNb2RlbD50aGlzLmNyZWF0ZUNlbGxRdWVzdGlvbihcImNoZWNrYm94XCIsIG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0QmFzZVByb3BlcnRpZXMocSwgY29sdW1uKTtcclxuICAgICAgICBxLmNvbENvdW50ID0gY29sdW1uLmNvbENvdW50ID4gLSAxID8gY29sdW1uLmNvbENvdW50IDogdGhpcy5jb2x1bW5Db2xDb3VudDtcclxuICAgICAgICByZXR1cm4gcTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSYWRpb2dyb3VwKG5hbWU6IHN0cmluZywgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbD50aGlzLmNyZWF0ZUNlbGxRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxLCBjb2x1bW4pO1xyXG4gICAgICAgIHEuY29sQ291bnQgPSBjb2x1bW4uY29sQ291bnQgPiAtIDEgPyBjb2x1bW4uY29sQ291bnQgOiB0aGlzLmNvbHVtbkNvbENvdW50O1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldFNlbGVjdEJhc2VQcm9wZXJ0aWVzKHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pIHtcclxuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzT3JkZXIgPSBjb2x1bW4uY2hvaWNlc09yZGVyO1xyXG4gICAgICAgIHF1ZXN0aW9uLmNob2ljZXMgPSB0aGlzLmdldENvbHVtbkNob2ljZXMoY29sdW1uKTtcclxuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzQnlVcmwuc2V0RGF0YShjb2x1bW4uY2hvaWNlc0J5VXJsKTtcclxuICAgICAgICBpZighcXVlc3Rpb24uY2hvaWNlc0J5VXJsLmlzRW1wdHkpIHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uY2hvaWNlc0J5VXJsLnJ1bigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVUZXh0KG5hbWU6IHN0cmluZywgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uVGV4dE1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvblRleHRNb2RlbD50aGlzLmNyZWF0ZUNlbGxRdWVzdGlvbihcInRleHRcIiwgbmFtZSk7XHJcbiAgICAgICAgcS5pbnB1dFR5cGUgPSBjb2x1bW4uaW5wdXRUeXBlO1xyXG4gICAgICAgIHEucGxhY2VIb2xkZXIgPSBjb2x1bW4ucGxhY2VIb2xkZXI7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29tbWVudChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbkNvbW1lbnRNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25Db21tZW50TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJjb21tZW50XCIsIG5hbWUpO1xyXG4gICAgICAgIHEucGxhY2VIb2xkZXIgPSBjb2x1bW4ucGxhY2VIb2xkZXI7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbFF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIDxRdWVzdGlvbj5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuYW1lKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShuZXdWYWx1ZTogYW55LCByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYW55IHtcclxuICAgICAgICBkZWxldGUgbmV3VmFsdWVbcm93LnJvd05hbWVdO1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhuZXdWYWx1ZSkubGVuZ3RoID09IDAgPyBudWxsIDogbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgICBvblJvd0NoYW5nZWQocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgbmV3Um93VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZShyb3csIG5ld1ZhbHVlLCB0cnVlKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcm93VmFsdWUpIGRlbGV0ZSByb3dWYWx1ZVtrZXldO1xyXG4gICAgICAgIGlmIChuZXdSb3dWYWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdSb3dWYWx1ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobmV3Um93VmFsdWUpKTtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5ld1Jvd1ZhbHVlKSByb3dWYWx1ZVtrZXldID0gbmV3Um93VmFsdWVba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvd1ZhbHVlKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZGVsZXRlUm93VmFsdWUobmV3VmFsdWUsIHJvdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLCBbXCJuYW1lXCIsIHsgbmFtZTogXCJ0aXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmouY2hvaWNlcyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmouY2hvaWNlcyA9IHZhbHVlOyB9fSxcclxuICAgICAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY09wdGlvbnNDYXB0aW9uXCJ9ICwgeyBuYW1lOiBcImNlbGxUeXBlXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiZHJvcGRvd25cIiwgXCJjaGVja2JveFwiLCBcInJhZGlvZ3JvdXBcIiwgXCJ0ZXh0XCIsIFwiY29tbWVudFwiXSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjb2xDb3VudFwiLCBkZWZhdWx0OiAtMSwgY2hvaWNlczogWy0xLCAwLCAxLCAyLCAzLCA0XSB9LCBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLCBcImhhc090aGVyOmJvb2xlYW5cIiwgXCJtaW5XaWR0aFwiLCB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCJ9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzT3JkZXJcIiwgZGVmYXVsdDogXCJub25lXCIsIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJhc2NcIiwgXCJkZXNjXCIsIFwicmFuZG9tXCJdIH0sXHJcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNCeVVybDpyZXN0ZnVsbFwiLCBjbGFzc05hbWU6IFwiQ2hvaWNlc1Jlc3RmdWxsXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gb2JqLmNob2ljZXNCeVVybC5pc0VtcHR5ID8gbnVsbCA6IG9iai5jaG9pY2VzQnlVcmw7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmouY2hvaWNlc0J5VXJsLnNldERhdGEodmFsdWUpOyB9IH0sXHJcbiAgICAgICAgeyBuYW1lOiBcImlucHV0VHlwZVwiLCBkZWZhdWx0OiBcInRleHRcIiwgY2hvaWNlczogW1wiY29sb3JcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiLCBcImVtYWlsXCIsIFwibW9udGhcIiwgXCJudW1iZXJcIiwgXCJwYXNzd29yZFwiLCBcInJhbmdlXCIsIFwidGVsXCIsIFwidGV4dFwiLCBcInRpbWVcIiwgXCJ1cmxcIiwgXCJ3ZWVrXCJdIH1dLFxyXG4gICAgICAgIFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ29sdW1uKFwiXCIpOyB9KTtcclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhkcm9wZG93bmJhc2VcIiwgW3sgbmFtZTogXCJjb2x1bW5zOm1hdHJpeGRyb3Bkb3duY29sdW1uc1wiLCBjbGFzc05hbWU6IFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIn0sXHJcbiAgICAgICAgXCJob3Jpem9udGFsU2Nyb2xsOmJvb2xlYW5cIixcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNob2ljZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICAgICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwiIH0sXHJcbiAgICAgICAgeyBuYW1lOiBcImNlbGxUeXBlXCIsIGRlZmF1bHQ6IFwiZHJvcGRvd25cIiwgY2hvaWNlczogW1wiZHJvcGRvd25cIiwgXCJjaGVja2JveFwiLCBcInJhZGlvZ3JvdXBcIiwgXCJ0ZXh0XCIsIFwiY29tbWVudFwiXSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjb2x1bW5Db2xDb3VudFwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNF0gfSwgXCJjb2x1bW5NaW5XaWR0aFwiXSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHMiLCJpbXBvcnQge0Jhc2UsIElRdWVzdGlvbiwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleURhdGEsIElTdXJ2ZXksIEhhc2hUYWJsZX0gZnJvbSAnLi9iYXNlJztcclxuaW1wb3J0IHtRdWVzdGlvbkN1c3RvbVdpZGdldH0gZnJvbSAnLi9xdWVzdGlvbkN1c3RvbVdpZGdldHMnO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gJy4vanNvbm9iamVjdCc7XHJcbmltcG9ydCB7Q29uZGl0aW9uUnVubmVyfSBmcm9tICcuL2NvbmRpdGlvbnMnO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQmFzZSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJUXVlc3Rpb24sIElDb25kaXRpb25SdW5uZXIsIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIHF1ZXN0aW9uQ291bnRlciA9IDEwMDtcclxuICAgIHByaXZhdGUgc3RhdGljIGdldFF1ZXN0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJzcV9cIiArIFF1ZXN0aW9uQmFzZS5xdWVzdGlvbkNvdW50ZXIrKztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkYXRhOiBJU3VydmV5RGF0YTtcclxuICAgIHByaXZhdGUgc3VydmV5VmFsdWU6IElTdXJ2ZXk7XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcclxuICAgIHB1YmxpYyBjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0O1xyXG4gICAgcHVibGljIHZpc2libGVJZjogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgaWRWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBzdGFydFdpdGhOZXdMaW5lVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlSW5kZXhWYWx1ZTogbnVtYmVyID0gLTE7XHJcbiAgICBwdWJsaWMgd2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIHJlbmRlcldpZHRoVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIHJpZ2h0SW5kZW50VmFsdWU6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgaW5kZW50OiBudW1iZXIgPSAwO1xyXG4gICAgZm9jdXNDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICB2aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgdmlzaWJsZUluZGV4Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7ICAgIFxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uQmFzZS5nZXRRdWVzdGlvbklkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNyZWF0aW5nKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yb3dWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCg8SVF1ZXN0aW9uPnRoaXMsIHRoaXMudmlzaWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGUgfHwgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSk7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnZpc2libGVJbmRleFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRFcnJvckNvdW50KCk6IG51bWJlciB7IHJldHVybiAwOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBoYXNDb21tZW50KCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuaWRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBzdGFydFdpdGhOZXdMaW5lKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGFydFdpdGhOZXdMaW5lVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc3RhcnRXaXRoTmV3TGluZSh2YWx1ZTogYm9vbGVhbikgeyBcclxuICAgICAgICBpZih0aGlzLnN0YXJ0V2l0aE5ld0xpbmUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjaykgdGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnJlbmRlcldpZHRoVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMucmVuZGVyV2lkdGgpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlbmRlcldpZHRoVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnJpZ2h0SW5kZW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMucmlnaHRJbmRlbnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJpZ2h0SW5kZW50VmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7IH1cclxuICAgIHNldERhdGEobmV3VmFsdWU6IElTdXJ2ZXlEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3VmFsdWU7XHJcbiAgICAgICAgaWYobmV3VmFsdWUgJiYgbmV3VmFsdWVbXCJxdWVzdGlvbkFkZGVkXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSA8SVN1cnZleT5uZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblNldERhdGEoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc3VydmV5KCk6IElTdXJ2ZXkgeyByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTsgfVxyXG4gICAgcHJvdGVjdGVkIGZpcmVDYWxsYmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblNldERhdGEoKSB7IH1cclxuICAgIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkgeyB9XHJcbiAgICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pIHtcclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvblJ1bm5lcikgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcclxuICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICAvL0lRdWVzdGlvblxyXG4gICAgcHVibGljIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmxlSW5kZXhWYWx1ZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUluZGV4VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGNsZWFyVW51c2VkVmFsdWVzKCkge31cclxuICAgIHB1YmxpYyBvbkxvY2FsZUNoYW5nZWQoKSB7fVxyXG4gICAgLy9JTG9jYWxpemFibGVPd25lclxyXG4gICAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPyAoPElMb2NhbGl6YWJsZU93bmVyPjxhbnk+dGhpcy5kYXRhKS5nZXRMb2NhbGUoKSA6IFwiXCI7IFxyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJxdWVzdGlvbmJhc2VcIiwgW1wiIW5hbWVcIiwgeyBuYW1lOiBcInZpc2libGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIFwidmlzaWJsZUlmOmV4cHJlc3Npb25cIixcclxuICAgIHsgbmFtZTogXCJ3aWR0aFwiIH0sIHsgbmFtZTogXCJzdGFydFdpdGhOZXdMaW5lOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZX0sIHtuYW1lOiBcImluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdfV0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbmJhc2UudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtCYXNlLCBJU3VydmV5LCBIYXNoVGFibGUsIElRdWVzdGlvbiwgSUVsZW1lbnQsIElDb25kaXRpb25SdW5uZXIsIElQYWdlLCBTdXJ2ZXlFcnJvciwgRXZlbnR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtJU3VydmV5VHJpZ2dlck93bmVyLCBTdXJ2ZXlUcmlnZ2VyfSBmcm9tIFwiLi90cmlnZ2VyXCI7XHJcbmltcG9ydCB7UGFnZU1vZGVsfSBmcm9tIFwiLi9wYWdlXCI7XHJcbmltcG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5pbXBvcnQge1Byb2Nlc3NWYWx1ZX0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XHJcbmltcG9ydCB7ZHhTdXJ2ZXlTZXJ2aWNlfSBmcm9tIFwiLi9keFN1cnZleVNlcnZpY2VcIjtcclxuaW1wb3J0IHtKc29uRXJyb3J9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0N1c3RvbVdpZGdldENvbGxlY3Rpb259IGZyb20gJy4vcXVlc3Rpb25DdXN0b21XaWRnZXRzJztcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TW9kZWwgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVN1cnZleSwgSVN1cnZleVRyaWdnZXJPd25lciwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHVibGljIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIHN1cnZleVBvc3RJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjbGllbnRJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjb29raWVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNvbW1lbnRQcmVmaXg6IHN0cmluZyA9IFwiLUNvbW1lbnRcIjtcclxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd1RpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93UGFnZVRpdGxlczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd0NvbXBsZXRlZFBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHJlcXVpcmVkVGV4dDogc3RyaW5nID0gXCIqXCI7XHJcbiAgICBwdWJsaWMgcXVlc3Rpb25TdGFydEluZGV4OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHNob3dQcm9ncmVzc0Jhcjogc3RyaW5nID0gXCJvZmZcIjtcclxuICAgIHB1YmxpYyBzdG9yZU90aGVyc0FzQ29tbWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgZ29OZXh0UGFnZUF1dG9tYXRpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHBhZ2VzOiBBcnJheTxQYWdlTW9kZWw+ID0gbmV3IEFycmF5PFBhZ2VNb2RlbD4oKTtcclxuICAgIHB1YmxpYyB0cmlnZ2VyczogQXJyYXk8U3VydmV5VHJpZ2dlcj4gPSBuZXcgQXJyYXk8U3VydmV5VHJpZ2dlcj4oKTtcclxuICAgIHB1YmxpYyBjbGVhckludmlzaWJsZVZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZSA6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NDb21wbGV0ZWRIdG1sVmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGFnZVByZXZUZXh0VmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUGFnZU5leHRUZXh0VmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jQ29tcGxldGVUZXh0VmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudFBhZ2VWYWx1ZTogUGFnZU1vZGVsID0gbnVsbDtcclxuICAgIHByaXZhdGUgdmFsdWVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgdmFyaWFibGVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgcGFnZVByZXZUZXh0VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcGFnZU5leHRUZXh0VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgY29tcGxldGVUZXh0VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgc2hvd1BhZ2VOdW1iZXJzVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc2hvd1F1ZXN0aW9uTnVtYmVyc1ZhbHVlOiBzdHJpbmcgPSBcIm9uXCI7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlOiBzdHJpbmcgPSBcInRvcFwiO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgaXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHByb2Nlc3NlZFRleHRWYWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XHJcbiAgICBwcml2YXRlIGlzVmFsaWRhdGluZ09uU2VydmVyVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbW9kZVZhbHVlOiBzdHJpbmcgPSBcImVkaXRcIjtcclxuICAgIHByaXZhdGUgaXNEZXNpZ25Nb2RlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYXJ0aWFsU2VuZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25DdXJyZW50UGFnZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblZhbHVlQ2hhbmdlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uVmlzaWJsZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblBhZ2VWaXNpYmxlQ2hhbmdlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUXVlc3Rpb25BZGRlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUXVlc3Rpb25SZW1vdmVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYW5lbEFkZGVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYW5lbFJlbW92ZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblZhbGlkYXRlUXVlc3Rpb246IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zOiAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnk7XHJcbiAgICBwdWJsaWMgb25Qcm9jZXNzSHRtbDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uU2VuZFJlc3VsdDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uR2V0UmVzdWx0OiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25VcGxvYWRGaWxlOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclN1cnZleTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJQYWdlOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclF1ZXN0aW9uOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25BZnRlclJlbmRlclBhbmVsOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMganNvbkVycm9yczogQXJyYXk8SnNvbkVycm9yPiA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoanNvbk9iajogYW55ID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jQ29tcGxldGVkSHRtbFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGFnZVByZXZUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NQYWdlTmV4dFRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY0NvbXBsZXRlVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yKCk7XHJcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uSGFzVmFsdWUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7IHJldHVybiBzZWxmLmhhc1Byb2Nlc3NlZFRleHRWYWx1ZShuYW1lKTsgfTtcclxuICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgdGhpcy5wYWdlcy5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEgPSBzZWxmO1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJzLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUuc2V0T3duZXIoc2VsZik7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvY2Vzc2VkVGV4dFZhbHVlcygpO1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDcmVhdGluZygpO1xyXG4gICAgICAgIGlmIChqc29uT2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SnNvbk9iamVjdChqc29uT2JqKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5SWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFN1cnZleUZyb21TZXJ2aWNlKHRoaXMuc3VydmV5SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwic3VydmV5XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY2FsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5jdXJyZW50TG9jYWxlID0gdmFsdWU7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ub25Mb2NhbGVDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9JTG9jYWxpemFibGVPd25lclxyXG4gICAgcHVibGljIGdldExvY2FsZSgpIHsgcmV0dXJuIHRoaXMubG9jYWxlOyB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jU3RyaW5nKHN0cjogc3RyaW5nKSB7IHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGVtcHR5U3VydmV5VGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJlbXB0eVN1cnZleVwiKTsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NUaXRsZS50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVkSHRtbC50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgY29tcGxldGVkSHRtbCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jQ29tcGxldGVkSHRtbC50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NDb21wbGV0ZWRIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVkSHRtbFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgcGFnZVByZXZUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BhZ2VQcmV2VGV4dC50ZXh0ID8gdGhpcy5sb2NQYWdlUHJldlRleHQudGV4dCA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGFnZVByZXZUZXh0XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IHBhZ2VQcmV2VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGFnZVByZXZUZXh0LnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQYWdlUHJldlRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlUHJldlRleHRWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IHBhZ2VOZXh0VGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlTmV4dFRleHQudGV4dCA/IHRoaXMubG9jUGFnZU5leHRUZXh0LnRleHQgOiB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VOZXh0VGV4dFwiKTsgfVxyXG4gICAgcHVibGljIHNldCBwYWdlTmV4dFRleHQobmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BhZ2VOZXh0VGV4dC50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGFnZU5leHRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZU5leHRUZXh0VmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBjb21wbGV0ZVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVUZXh0LnRleHQgPyB0aGlzLmxvY0NvbXBsZXRlVGV4dC50ZXh0IDogdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0ZVRleHRcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgY29tcGxldGVUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NDb21wbGV0ZVRleHQudGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0NvbXBsZXRlVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlVGV4dFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZS50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUudGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlVmFsdWU7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3dQYWdlTnVtYmVycygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc2hvd1BhZ2VOdW1iZXJzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd1BhZ2VOdW1iZXJzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dQYWdlTnVtYmVycykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2hvd1BhZ2VOdW1iZXJzVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNob3dRdWVzdGlvbk51bWJlcnMoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVyc1ZhbHVlOyB9O1xyXG4gICAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVyc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7IHJldHVybiB0aGlzLnByb2Nlc3NUZXh0KHRoaXMudGl0bGUpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZTsgfTtcclxuICAgIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uVmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlID0gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgcHVibGljIGdldCBtb2RlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm1vZGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5tb2RlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IFwiZWRpdFwiICYmIHZhbHVlICE9IFwiZGlzcGxheVwiKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tb2RlVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXNIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy52YWx1ZXNIYXNoW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldERhdGFWYWx1ZShkYXRhOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNIYXNoW2tleV0gPSBkYXRhW2tleV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGRhdGEoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNIYXNoID0ge307XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGFWYWx1ZShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1RyaWdnZXJzKGtleSwgZGF0YVtrZXldLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1trZXkudG9Mb3dlckNhc2UoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNba2V5LnRvTG93ZXJDYXNlKCldID0gXCJ2YWx1ZVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29tbWVudHMoKTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFsdWVzSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5jb21tZW50UHJlZml4KSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy52YWx1ZXNIYXNoW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8UGFnZU1vZGVsPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5wYWdlcztcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PFBhZ2VNb2RlbD4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnBhZ2VzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGggPT0gMDsgfVxyXG4gICAgcHVibGljIGdldCBQYWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVQYWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50UGFnZSgpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IG51bGwgJiYgdlBhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudFBhZ2UodmFsdWU6IFBhZ2VNb2RlbCkge1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2UGFnZXMuaW5kZXhPZih2YWx1ZSkgPCAwKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUN1c3RvbVdpZGdldHModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VDaGFuZ2VkKHZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRQYWdlTm8oKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudFBhZ2VObyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdGhpcy52aXNpYmxlUGFnZXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VzW3ZhbHVlXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0UXVlc3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUuc2Nyb2xsVG9Ub3AoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybiBcImxvYWRpbmdcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCkgcmV0dXJuIFwiY29tcGxldGVkXCI7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlKSA/IFwicnVubmluZ1wiIDogXCJlbXB0eVwiXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoY2xlYXJEYXRhOiBib29sZWFuID0gdHJ1ZSwgZ290b0ZpcnN0UGFnZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoY2xlYXJEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzSGFzaCA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGdvdG9GaXJzdFBhZ2UgJiYgdGhpcy52aXNpYmxlUGFnZUNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG1lcmdlVmFsdWVzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcclxuICAgICAgICBpZiAoIWRlc3QgfHwgIXNyYykgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gc3JjW2tleV07XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc3Rba2V5XSkgZGVzdFtrZXldID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCBkZXN0W2tleV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVzdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ3VzdG9tV2lkZ2V0cyhwYWdlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2UucXVlc3Rpb25zW2ldLmN1c3RvbVdpZGdldCA9IEN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuZ2V0Q3VzdG9tV2lkZ2V0KHBhZ2UucXVlc3Rpb25zW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudFBhZ2VDaGFuZ2VkKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmZpcmUodGhpcywgeyAnb2xkQ3VycmVudFBhZ2UnOiBvbGRWYWx1ZSwgJ25ld0N1cnJlbnRQYWdlJzogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UHJvZ3Jlc3MoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gMDtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKChpbmRleCAqIDEwMCAvIHRoaXMudmlzaWJsZVBhZ2VDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09IFwic2hvd1wiIHx8XHJcbiAgICAgICAgICAgIChwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSAhPSBcImhpZGVcIiAmJiB0aGlzLnNob3dOYXZpZ2F0aW9uQnV0dG9ucyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm1vZGUgPT0gXCJlZGl0XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubW9kZSA9PSBcImRpc3BsYXlcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc0Rlc2lnbk1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzRGVzaWduTW9kZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0RGVzaWduTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNEZXNpZ25Nb2RlVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29va2llKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWU7XHJcbiAgICAgICAgcmV0dXJuIGNvb2tpZXMgJiYgY29va2llcy5pbmRleE9mKHRoaXMuY29va2llTmFtZSArIFwiPXRydWVcIikgPiAtMTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDb29raWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHJldHVybjtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSB0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlOyBleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMDowOjAgR01UXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGVsZXRlQ29va2llKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm47XHJcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gdGhpcy5jb29raWVOYW1lICsgXCI9O1wiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuaXNDdXJyZW50UGFnZUhhc0Vycm9ycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRvU2VydmVyVmFsaWRhdGlvbigpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb05leHRQYWdlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBnZXQgaXNDdXJyZW50UGFnZUhhc0Vycm9ycygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZS5oYXNFcnJvcnModHJ1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcHJldlBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCAtIDFdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNvbXBsZXRlTGFzdFBhZ2UoKSA6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUgJiYgdGhpcy5pc0N1cnJlbnRQYWdlSGFzRXJyb3JzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9TZXJ2ZXJWYWxpZGF0aW9uKCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmRvQ29tcGxldGUoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7IFxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHJldHVybiB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSA9PSB2UGFnZXMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkb0NvbXBsZXRlKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcclxuICAgICAgICB0aGlzLnNldENvb2tpZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tcGxldGVkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmZpcmUodGhpcywgbnVsbCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5UG9zdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFJlc3VsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWYWxpZGF0aW5nT25TZXJ2ZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyVmFsdWU7IH1cclxuICAgIHByaXZhdGUgc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlclZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMub25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpIHsgfVxyXG4gICAgcHJvdGVjdGVkIGRvU2VydmVyVmFsaWRhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgZGF0YToge30sIGVycm9yczoge30sIHN1cnZleTogdGhpcywgY29tcGxldGUgOiBmdW5jdGlvbiAoKSB7IHNlbGYuY29tcGxldGVTZXJ2ZXJWYWxpZGF0aW9uKG9wdGlvbnMpOyB9IH07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRQYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmN1cnJlbnRQYWdlLnF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZShxdWVzdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSBvcHRpb25zLmRhdGFbcXVlc3Rpb24ubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih0cnVlKTtcclxuICAgICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKGZhbHNlKTtcclxuICAgICAgICBpZiAoIW9wdGlvbnMgJiYgIW9wdGlvbnMuc3VydmV5KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHNlbGYgPSBvcHRpb25zLnN1cnZleTtcclxuICAgICAgICB2YXIgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucy5lcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHNlbGYuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiYgcXVlc3Rpb25bXCJlcnJvcnNcIl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uW1wiYWRkRXJyb3JcIl0obmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3JzW25hbWVdKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaXNMYXN0UGFnZSkgc2VsZi5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2VsZi5kb05leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGRvTmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja09uUGFnZVRyaWdnZXJzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VuZFJlc3VsdE9uUGFnZU5leHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kUmVzdWx0KHRoaXMuc3VydmV5UG9zdElkLCB0aGlzLmNsaWVudElkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbaW5kZXggKyAxXTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRDb21wbGV0ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWRIdG1sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMuY29tcGxldGVkSHRtbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleVwiKSArIFwiPC9oMz5cIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkTG9hZGluZ0h0bWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCI8aDM+XCIgKyB0aGlzLmdldExvY1N0cmluZyhcImxvYWRpbmdTdXJ2ZXlcIikgKyBcIjwvaDM+XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKGluZGV4LCB2UGFnZXMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBhZnRlclJlbmRlclN1cnZleShodG1sRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclN1cnZleS5maXJlKHRoaXMsIHsgc3VydmV5OiB0aGlzLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgICBhZnRlclJlbmRlclBhZ2UoaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5pc0VtcHR5KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5maXJlKHRoaXMsIHsgcGFnZTogdGhpcy5jdXJyZW50UGFnZSwgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50IH0pO1xyXG4gICAgfVxyXG4gICAgYWZ0ZXJSZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuICAgIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclBhbmVsLmZpcmUodGhpcywgeyBwYW5lbDogcGFuZWwsIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBsb2FkRmlsZShuYW1lOiBzdHJpbmcsIGZpbGU6IEZpbGUsIHN0b3JlRGF0YUFzVGV4dDogYm9vbGVhbiwgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZyk9PmFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBhY2NlcHQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25VcGxvYWRGaWxlLmZpcmUodGhpcywgeyBuYW1lOiBuYW1lLCBmaWxlOiBmaWxlLCBhY2NlcHQ6IGFjY2VwdCB9KTtcclxuICAgICAgICBpZiAoIWFjY2VwdCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghc3RvcmVEYXRhQXNUZXh0ICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvcmUobmFtZSwgZmlsZSwgdXBsb2FkaW5nQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGxvYWRGaWxlQ29yZShuYW1lOiBzdHJpbmcsIGZpbGU6IEZpbGUsIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcpID0+IGFueSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAodXBsb2FkaW5nQ2FsbGJhY2spIHVwbG9hZGluZ0NhbGxiYWNrKFwidXBsb2FkaW5nXCIpO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5zZW5kRmlsZSh0aGlzLnN1cnZleVBvc3RJZCwgZmlsZSwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhzdWNjZXNzID8gXCJzdWNjZXNzXCIgOiBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZXRWYWx1ZShuYW1lLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGdldFBhZ2UoaW5kZXg6IG51bWJlcik6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgYWRkUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICBpZiAocGFnZSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYWdlcy5wdXNoKHBhZ2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH1cclxuICAgIGFkZE5ld1BhZ2UobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UobmFtZSk7XHJcbiAgICAgICAgdGhpcy5hZGRQYWdlKHBhZ2UpO1xyXG4gICAgICAgIHJldHVybiBwYWdlO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YocGFnZSk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IHBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXMubGVuZ3RoID4gMCA/IHRoaXMucGFnZXNbMF0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nLCBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElRdWVzdGlvbiB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbk5hbWUgPSBxdWVzdGlvbnNbaV0ubmFtZTtcclxuICAgICAgICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkgcXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmKHF1ZXN0aW9uTmFtZSA9PSBuYW1lKSByZXR1cm4gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRRdWVzdGlvbnNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UpOiBJUXVlc3Rpb25bXSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghbmFtZXNbaV0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWVzW2ldLCBjYXNlSW5zZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24pIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlQnlFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogUGFnZU1vZGVsIHtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XHJcbiAgICAgICAgICAgIGlmKHBhZ2UuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gcGFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucGFnZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VzQnlOYW1lcyhuYW1lczogc3RyaW5nW10pOiBQYWdlTW9kZWxbXXtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKCFuYW1lcykgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFuYW1lc1tpXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2UpIHJlc3VsdC5wdXNoKHBhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFF1ZXN0aW9ucyh2aXNpYmxlT25seTogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SVF1ZXN0aW9uPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUXVlc3Rpb24+KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFnZShuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIG5ldyBQYWdlTW9kZWwobmFtZSk7IH1cclxuICAgIHByaXZhdGUgbm90aWZ5UXVlc3Rpb25PblZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5uYW1lICE9IG5hbWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5kb1N1cnZleVZhbHVlQ2hhbmdlZChxdWVzdGlvbiwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgeyAnbmFtZSc6IG5hbWUsICdxdWVzdGlvbic6IHF1ZXN0aW9uLCAndmFsdWUnOiBuZXdWYWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmRvU3VydmV5VmFsdWVDaGFuZ2VkKHF1ZXN0aW9uc1tpXSwgdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0ubmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkb1N1cnZleVZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgcXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja09uUGFnZVRyaWdnZXJzKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVHJpZ2dlcnMocXVlc3Rpb24ubmFtZSwgdmFsdWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb25CYXNlPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBwYWdlLnF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbi52aXNpYmxlIHx8ICFxdWVzdGlvbi5uYW1lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja1RyaWdnZXJzKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSwgaXNPbk5leHRQYWdlOiBib29sZWFuKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMudHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJzW2ldO1xyXG4gICAgICAgICAgICBpZiAodHJpZ2dlci5uYW1lID09IG5hbWUgJiYgdHJpZ2dlci5pc09uTmV4dFBhZ2UgPT0gaXNPbk5leHRQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyLmNoZWNrKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9FbGVtZW50c09uTG9hZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5vblN1cnZleUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bkNvbmRpdGlvbnMoKSB7XHJcbiAgICAgICAgdmFyIHBhZ2VzID0gdGhpcy5wYWdlcztcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzW2ldLnJ1bkNvbmRpdGlvbih0aGlzLnZhbHVlc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0KHBvc3RJZDogc3RyaW5nID0gbnVsbCwgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmIHRoaXMub25QYXJ0aWFsU2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uUGFydGlhbFNlbmQuZmlyZSh0aGlzLCBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcG9zdElkICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XHJcbiAgICAgICAgICAgIHBvc3RJZCA9IHRoaXMuc3VydmV5UG9zdElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBvc3RJZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjbGllbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gY2xpZW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQgJiYgIXRoaXMuY2xpZW50SWQpIHJldHVybjtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbmV3IGR4U3VydmV5U2VydmljZSgpLnNlbmRSZXN1bHQocG9zdElkLCB0aGlzLmRhdGEsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIHNlbGYub25TZW5kUmVzdWx0LmZpcmUoc2VsZiwgeyBzdWNjZXNzOiBzdWNjZXNzLCByZXNwb25zZTogcmVzcG9uc2V9KTtcclxuICAgICAgICB9LCB0aGlzLmNsaWVudElkLCBpc1BhcnRpYWxDb21wbGV0ZWQpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFJlc3VsdChyZXN1bHRJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbmV3IGR4U3VydmV5U2VydmljZSgpLmdldFJlc3VsdChyZXN1bHRJZCwgbmFtZSwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIGRhdGE6IGFueSwgZGF0YUxpc3Q6IGFueVtdLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7IHN1Y2Nlc3M6IHN1Y2Nlc3MsIGRhdGE6IGRhdGEsIGRhdGFMaXN0OiBkYXRhTGlzdCwgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXlGcm9tU2VydmljZShzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzdXJ2ZXlJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleUlkID0gc3VydmV5SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5sb2FkU3VydmV5KHRoaXMuc3VydmV5SWQsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0SnNvbk9iamVjdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoZWNrUGFnZVZpc2liaWxpdHkocXVlc3Rpb246IElRdWVzdGlvbiwgb2xkUXVlc3Rpb25WaXNpYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmdldFBhZ2VCeVF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICBpZiAoIXBhZ2UpIHJldHVybjtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBwYWdlLmlzVmlzaWJsZTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgIT0gcGFnZS5nZXRJc1BhZ2VWaXNpYmxlKHF1ZXN0aW9uKSB8fCBvbGRRdWVzdGlvblZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlVmlzaWJsZUluZGV4ZXMoKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXModGhpcy5zaG93UGFnZU51bWJlcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblBhZ2VcIikge1xyXG4gICAgICAgICAgICB2YXIgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvblZpc2libGVJbmRleGVzKHZpc1BhZ2VzW2ldLnF1ZXN0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uVmlzaWJsZUluZGV4ZXModGhpcy5nZXRBbGxRdWVzdGlvbnMoZmFsc2UpLCB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyhzaG93SW5kZXg6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCA9IHRoaXMucGFnZXNbaV0udmlzaWJsZSA/IChpbmRleCsrKSA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLm51bSA9IHNob3dJbmRleCAmJiB0aGlzLnBhZ2VzW2ldLnZpc2libGUgPyB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCArIDEgOiAtMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVF1ZXN0aW9uVmlzaWJsZUluZGV4ZXMocXVlc3Rpb25zOiBJUXVlc3Rpb25bXSwgc2hvd0luZGV4OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0uc2V0VmlzaWJsZUluZGV4KHNob3dJbmRleCAmJiBxdWVzdGlvbnNbaV0udmlzaWJsZSAmJiBxdWVzdGlvbnNbaV0uaGFzVGl0bGUgPyAoaW5kZXgrKykgOiAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2V0IGlzTG9hZGluZ0Zyb21Kc29uKCkgeyByZXR1cm4gdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlOyB9XHJcbiAgICBwcml2YXRlIHNldEpzb25PYmplY3QoanNvbk9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKCFqc29uT2JqKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5qc29uRXJyb3JzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHZhciBqc29uQ29udmVydGVyID0gbmV3IEpzb25PYmplY3QoKTtcclxuICAgICAgICBqc29uQ29udmVydGVyLnRvT2JqZWN0KGpzb25PYmosIHRoaXMpO1xyXG4gICAgICAgIGlmIChqc29uQ29udmVydGVyLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbkVycm9ycyA9IGpzb25Db252ZXJ0ZXIuZXJyb3JzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2Nlc3NlZFRleHRWYWx1ZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb29raWUpIHtcclxuICAgICAgICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xyXG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0aW5nKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHsgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQcm9jZXNzZWRUZXh0VmFsdWVzKCkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbXCJwYWdlbm9cIl0gPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gc2VsZi5jdXJyZW50UGFnZSAhPSBudWxsID8gc2VsZi52aXNpYmxlUGFnZXMuaW5kZXhPZihzZWxmLmN1cnJlbnRQYWdlKSArIDEgOiAwOyB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW1wicGFnZWNvdW50XCJdID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHNlbGYudmlzaWJsZVBhZ2VDb3VudDsgfVxyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUXVlc3Rpb25Ub1Byb2Nlc3NlZFRleHRWYWx1ZXMocXVlc3Rpb25zW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFkZFF1ZXN0aW9uVG9Qcm9jZXNzZWRUZXh0VmFsdWVzKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbcXVlc3Rpb24ubmFtZS50b0xvd2VyQ2FzZSgpXSA9IFwicXVlc3Rpb25cIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaGFzUHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZShuYW1lKTtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2ZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHZhbCA9PSBcInZhcmlhYmxlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUobmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbCA9PSBcInF1ZXN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgbmFtZSA9IHF1ZXN0aW9uLm5hbWUgKyBuYW1lLnN1YnN0cihmaXJzdE5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsID09IFwidmFsdWVcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzSGFzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWwobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNsZWFyVW51c2VkVmFsdWVzKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV0udmlzaWJsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZShxdWVzdGlvbnNbaV0ubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXNIYXNoW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gXCJ2YXJpYWJsZVwiO1xyXG4gICAgfVxyXG4gICAgLy9JU3VydmV5IGRhdGFcclxuICAgIHByb3RlY3RlZCBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgLy9kbyBub3QgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBpbnN0YW5jZSEhIVxyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZXNIYXNoW25hbWVdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRXF1YWwobmFtZSwgbmV3VmFsdWUpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiIHx8IG5ld1ZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc0hhc2hbbmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gXCJ2YWx1ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeVF1ZXN0aW9uT25WYWx1ZUNoYW5nZWQobmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhuYW1lLCBuZXdWYWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUVxdWFsKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSBcIlwiKSBuZXdWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IG51bGwpIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgfHwgIXRoaXMuY3VycmVudFBhZ2UpIHJldHVybjtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbiAmJiAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkpKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zW2ldLmhhc0lucHV0ICYmICF0aGlzLmdldFZhbHVlKHF1ZXN0aW9uc1tpXS5uYW1lKSkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2UuaGFzRXJyb3JzKHRydWUsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGFbbmFtZSArIHRoaXMuY29tbWVudFByZWZpeF07XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBuYW1lID0gbmFtZSArIHRoaXMuY29tbWVudFByZWZpeDtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzSGFzaFtuYW1lXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc0hhc2hbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhclZhbHVlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb21tZW50KG5hbWUsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7ICdxdWVzdGlvbic6IHF1ZXN0aW9uLCAnbmFtZSc6IHF1ZXN0aW9uLm5hbWUsICd2aXNpYmxlJzogbmV3VmFsdWUgfSk7XHJcbiAgICAgICAgdGhpcy5jaGVja1BhZ2VWaXNpYmlsaXR5KHF1ZXN0aW9uLCAhbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2U6IElQYWdlLCBuZXdWYWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywgeyAncGFnZSc6IHBhZ2UsICd2aXNpYmxlJzogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBxdWVzdGlvbkFkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMuYWRkUXVlc3Rpb25Ub1Byb2Nlc3NlZFRleHRWYWx1ZXMocXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMub25RdWVzdGlvbkFkZGVkLmZpcmUodGhpcywgeyAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ25hbWUnOiBxdWVzdGlvbi5uYW1lLCAnaW5kZXgnOiBpbmRleCwgJ3BhcmVudFBhbmVsJzogcGFyZW50UGFuZWwsICdyb290UGFuZWwnOiByb290UGFuZWwgfSk7XHJcbiAgICB9XHJcbiAgICBxdWVzdGlvblJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUXVlc3Rpb25SZW1vdmVkLmZpcmUodGhpcywgeyAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ25hbWUnOiBxdWVzdGlvbi5uYW1lIH0pO1xyXG4gICAgfVxyXG4gICAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25QYW5lbEFkZGVkLmZpcmUodGhpcywgeyAncGFuZWwnOiBwYW5lbCwgJ25hbWUnOiBwYW5lbC5uYW1lLCAnaW5kZXgnOiBpbmRleCwgJ3BhcmVudFBhbmVsJzogcGFyZW50UGFuZWwsICdyb290UGFuZWwnOiByb290UGFuZWwgfSk7XHJcbiAgICB9XHJcbiAgICBwYW5lbFJlbW92ZWQocGFuZWw6IElFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHRoaXMub25QYW5lbFJlbW92ZWQuZmlyZSh0aGlzLCB7ICdwYW5lbCc6IHBhbmVsLCAnbmFtZSc6IHBhbmVsLm5hbWUgfSk7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZVF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFN1cnZleUVycm9yIHtcclxuICAgICAgICBpZiAodGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IG5hbWU6IG5hbWUsIHZhbHVlOiB0aGlzLmdldFZhbHVlKG5hbWUpLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvcikgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJvY2Vzc0h0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgaHRtbDogaHRtbCB9O1xyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzSHRtbC5maXJlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUZXh0KG9wdGlvbnMuaHRtbCk7XHJcbiAgICB9XHJcbiAgICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0KTtcclxuICAgIH1cclxuICAgIC8vSVN1cnZleVRyaWdnZXJPd25lclxyXG4gICAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXXtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocmVzdWx0LCB0aGlzLmdldFBhZ2VzQnlOYW1lcyhwYWdlcykpO1xyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRRdWVzdGlvbnNCeU5hbWVzKHF1ZXN0aW9ucykpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBzZXRUcmlnZ2VyVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc1ZhcmlhYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vL01ha2UgbG9jYWxpemFibGU6IGNvbXBsZXRlZEh0bWwsIHBhZ2VQcmV2VGV4dCwgcGFnZU5leHRUZXh0LCBjb21wbGV0ZVRleHRcclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW3sgbmFtZTogXCJsb2NhbGVcIiwgY2hvaWNlczogKCkgPT4geyByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXMoKSB9IH0sXHJcbiAgICB7bmFtZTogXCJ0aXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIn0sIHsgbmFtZTogXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlfSwgXHJcbiAgICB7bmFtZTogXCJjb21wbGV0ZWRIdG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlZEh0bWxcIn0sIHsgbmFtZTogXCJwYWdlc1wiLCBjbGFzc05hbWU6IFwicGFnZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxyXG4gICAgeyBuYW1lOiBcInF1ZXN0aW9uc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInF1ZXN0aW9uXCIsIHZpc2libGU6IGZhbHNlLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBudWxsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWx1ZSwganNvbkNvbnZlcnRlcikgeyB2YXIgcGFnZSA9IG9iai5hZGROZXdQYWdlKFwiXCIpOyBqc29uQ29udmVydGVyLnRvT2JqZWN0KHsgcXVlc3Rpb25zOiB2YWx1ZSB9LCBwYWdlKTsgfSB9LFxyXG4gICAgeyBuYW1lOiBcInRyaWdnZXJzOnRyaWdnZXJzXCIsIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dHJpZ2dlclwiLCBjbGFzc05hbWVQYXJ0OiBcInRyaWdnZXJcIiB9LFxyXG4gICAgXCJzdXJ2ZXlJZFwiLCBcInN1cnZleVBvc3RJZFwiLCBcImNvb2tpZU5hbWVcIiwgXCJzZW5kUmVzdWx0T25QYWdlTmV4dDpib29sZWFuXCIsXHJcbiAgICB7IG5hbWU6IFwic2hvd05hdmlnYXRpb25CdXR0b25zOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCB7IG5hbWU6IFwic2hvd1RpdGxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcclxuICAgIHsgbmFtZTogXCJzaG93UGFnZVRpdGxlczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgeyBuYW1lOiBcInNob3dDb21wbGV0ZWRQYWdlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxyXG4gICAgXCJzaG93UGFnZU51bWJlcnM6Ym9vbGVhblwiLCB7IG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCBkZWZhdWx0OiBcIm9uXCIsIGNob2ljZXM6IFtcIm9uXCIsIFwib25QYWdlXCIsIFwib2ZmXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwidG9wXCIsIGNob2ljZXM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSB9LFxyXG4gICAgeyBuYW1lOiBcInNob3dQcm9ncmVzc0JhclwiLCBkZWZhdWx0OiBcIm9mZlwiLCBjaG9pY2VzOiBbXCJvZmZcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0gfSxcclxuICAgIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxyXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcImdvTmV4dFBhZ2VBdXRvbWF0aWM6Ym9vbGVhblwiLCBcImNsZWFySW52aXNpYmxlVmFsdWVzOmJvb2xlYW5cIixcclxuICAgIHsgbmFtZTogXCJwYWdlUHJldlRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VQcmV2VGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJwYWdlTmV4dFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VOZXh0VGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJjb21wbGV0ZVRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlVGV4dFwifSxcclxuICAgIHsgbmFtZTogXCJyZXF1aXJlZFRleHRcIiwgZGVmYXVsdDogXCIqXCIgfSwgXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwge25hbWU6IFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGVcIn1dKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5LnRzIiwiZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3JJdGVtIHtcclxuICAgIHB1YmxpYyBzdGFydDogbnVtYmVyO1xyXG4gICAgcHVibGljIGVuZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvciB7XHJcbiAgICBwdWJsaWMgb25Qcm9jZXNzOiAobmFtZTogc3RyaW5nKSA9PiBhbnk7XHJcbiAgICBwdWJsaWMgb25IYXNWYWx1ZTogKG5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgICBwdWJsaWMgcHJvY2Vzcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uUHJvY2VzcykgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5nZXRJdGVtcyh0ZXh0KTtcclxuICAgICAgICBmb3IgKHZhciBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldE5hbWUodGV4dC5zdWJzdHJpbmcoaXRlbS5zdGFydCArIDEsIGl0ZW0uZW5kKSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Qcm9jZXNzTmFtZShuYW1lKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uSGFzVmFsdWUgJiYgIXRoaXMub25IYXNWYWx1ZShuYW1lKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMub25Qcm9jZXNzKG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHIoMCwgaXRlbS5zdGFydCkgKyB2YWx1ZSArIHRleHQuc3Vic3RyKGl0ZW0uZW5kICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtcyh0ZXh0OiBzdHJpbmcpOiBBcnJheTxUZXh0UHJlUHJvY2Vzc29ySXRlbT4ge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgICAgICB2YXIgc3RhcnQgPSAtMTtcclxuICAgICAgICB2YXIgY2ggPSAnJztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNoID0gdGV4dFtpXTtcclxuICAgICAgICAgICAgaWYgKGNoID09ICd7Jykgc3RhcnQgPSBpO1xyXG4gICAgICAgICAgICBpZiAoY2ggPT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IFRleHRQcmVQcm9jZXNzb3JJdGVtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGFydCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5kID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICByZXR1cm4gbmFtZS50cmltKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNhblByb2Nlc3NOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2ggPSBuYW1lW2ldO1xyXG4gICAgICAgICAgICAvL1RPRE9cclxuICAgICAgICAgICAgaWYgKGNoID09ICcgJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJyYnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHMiLCJpbXBvcnQge0Jhc2UsIFN1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tRXJyb3IsIFJlcXVyZU51bWVyaWNFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tICcuL2pzb25vYmplY3QnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IGFueSwgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGwpIHtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVZhbGlkYXRvciBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIDogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy50ZXh0KSByZXR1cm4gdGhpcy50ZXh0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRFcnJvclRleHQobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvck93bmVyIHtcclxuICAgIHZhbGlkYXRvcnM6IEFycmF5PFN1cnZleVZhbGlkYXRvcj47XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSdW5uZXIge1xyXG4gICAgcHVibGljIHJ1bihvd25lcjogSVZhbGlkYXRvck93bmVyKTogU3VydmV5RXJyb3Ige1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3duZXIudmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmFsaWRhdG9yUmVzdWx0ID0gb3duZXIudmFsaWRhdG9yc1tpXS52YWxpZGF0ZShvd25lci52YWx1ZSwgb3duZXIuZ2V0VmFsaWRhdG9yVGl0bGUoKSk7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3JSZXN1bHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvclJlc3VsdC5lcnJvcikgcmV0dXJuIHZhbGlkYXRvclJlc3VsdC5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3JSZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvd25lci52YWx1ZSA9IHZhbGlkYXRvclJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWNWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1pblZhbHVlOiBudW1iZXIgPSBudWxsLCBwdWJsaWMgbWF4VmFsdWU6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwibnVtZXJpY3ZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdGhpcy5pc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IFJlcXVyZU51bWVyaWNFcnJvcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWYWxpZGF0b3JSZXN1bHQocGFyc2VGbG9hdCh2YWx1ZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLm1pblZhbHVlICYmIHRoaXMubWluVmFsdWUgPiByZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yID0gbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgJiYgdGhpcy5tYXhWYWx1ZSA8IHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpID8gbnVsbCA6IHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciB2TmFtZSA9IG5hbWUgPyBuYW1lIDogXCJ2YWx1ZVwiO1xyXG4gICAgICAgIGlmICh0aGlzLm1pblZhbHVlICYmIHRoaXMubWF4VmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljTWluTWF4XCIpW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljTWluXCIpW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1pblZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNNYXhcIilbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWF4VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNOdW1iZXIodmFsdWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSAmJiBpc0Zpbml0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBtaW5MZW5ndGg6IG51bWJlciA9IDAsIHB1YmxpYyBtYXhMZW5ndGg6IG51bWJlciA9IDApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidGV4dHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwICYmIHRoaXMubWF4TGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0ZXh0TWluTWF4TGVuZ3RoXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluTGVuZ3RoLCB0aGlzLm1heExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCkgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0ZXh0TWluTGVuZ3RoXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluTGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRleHRNYXhMZW5ndGhcIilbXCJmb3JtYXRcIl0odGhpcy5tYXhMZW5ndGgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQW5zd2VyQ291bnRWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1pbkNvdW50OiBudW1iZXIgPSBudWxsLCBwdWJsaWMgbWF4Q291bnQ6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmNvbnN0cnVjdG9yICE9IEFycmF5KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgY291bnQgPSB2YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMubWluQ291bnQgJiYgY291bnQgPCB0aGlzLm1pbkNvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWluU2VsZWN0RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5taW5Db3VudCkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heENvdW50ICYmIGNvdW50ID4gdGhpcy5tYXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQoc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1heFNlbGVjdEVycm9yXCIpW1wiZm9ybWF0XCJdKHRoaXMubWF4Q291bnQpKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVnZXhWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlZ2V4OiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInJlZ2V4dmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAoIXRoaXMucmVnZXggfHwgIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRoaXMucmVnZXgpO1xyXG4gICAgICAgIGlmIChyZS50ZXN0KHZhbHVlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSkpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBFbWFpbFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBwcml2YXRlIHJlID0gL14oKFtePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl17Mix9KSQvaTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJlbWFpbHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiaW52YWxpZEVtYWlsXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5dmFsaWRhdG9yXCIsIFtcInRleHRcIl0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibnVtZXJpY3ZhbGlkYXRvclwiLCBbXCJtaW5WYWx1ZTpudW1iZXJcIiwgXCJtYXhWYWx1ZTpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBOdW1lcmljVmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidGV4dHZhbGlkYXRvclwiLCBbXCJtaW5MZW5ndGg6bnVtYmVyXCIsIFwibWF4TGVuZ3RoOm51bWJlclwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFRleHRWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJhbnN3ZXJjb3VudHZhbGlkYXRvclwiLCBbXCJtaW5Db3VudDpudW1iZXJcIiwgXCJtYXhDb3VudDpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBBbnN3ZXJDb3VudFZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInJlZ2V4dmFsaWRhdG9yXCIsIFtcInJlZ2V4XCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUmVnZXhWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJlbWFpbHZhbGlkYXRvclwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEVtYWlsVmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy92YWxpZGF0b3IudHMiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7UmVhY3RTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xyXG5pbXBvcnQge1N1cnZleVBhZ2V9IGZyb20gXCIuL3JlYWN0cGFnZVwiO1xyXG5pbXBvcnQge1N1cnZleU5hdmlnYXRpb259IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvblwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4uL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0lTdXJ2ZXlDcmVhdG9yfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7c3VydmV5Q3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xyXG5pbXBvcnQge1N1cnZleVByb2dyZXNzfSBmcm9tIFwiLi9yZWFjdFN1cnZleVByb2dyZXNzXCI7XHJcbmltcG9ydCB7U3VydmV5UGFnZUlkfSBmcm9tIFwiLi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4gaW1wbGVtZW50cyBJU3VydmV5Q3JlYXRvciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBjc3NUeXBlKCk6IHN0cmluZyB7IHJldHVybiBzdXJ2ZXlDc3MuY3VycmVudFR5cGU7IH1cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IGNzc1R5cGUodmFsdWU6IHN0cmluZykgeyBzdXJ2ZXlDc3MuY3VycmVudFR5cGUgPSB2YWx1ZTsgfVxyXG4gICAgcHJvdGVjdGVkIHN1cnZleTogUmVhY3RTdXJ2ZXlNb2RlbDtcclxuICAgIHByaXZhdGUgaXNDdXJyZW50UGFnZUNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU3VydmV5KHByb3BzKTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVN1cnZleShuZXh0UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5LmZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuZG9BZnRlclJlbmRlclN1cnZleShlbCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSByZXR1cm4gdGhpcy5yZW5kZXJDb21wbGV0ZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJsb2FkaW5nXCIpIHJldHVybiB0aGlzLnJlbmRlckxvYWRpbmcoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJTdXJ2ZXkoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY3NzKCk6IGFueSB7IHJldHVybiBzdXJ2ZXlDc3MuZ2V0Q3NzKCk7IH1cclxuICAgIHB1YmxpYyBzZXQgY3NzKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnN1cnZleS5tZXJnZUNzcyh2YWx1ZSwgdGhpcy5jc3MpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckNvbXBsZXRlZCgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEh0bWwgfTtcclxuICAgICAgICByZXR1cm4gKDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckxvYWRpbmcoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkTG9hZGluZ0h0bWwgfTtcclxuICAgICAgICByZXR1cm4gKDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclN1cnZleSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5zdXJ2ZXkudGl0bGUgJiYgdGhpcy5zdXJ2ZXkuc2hvd1RpdGxlID8gdGhpcy5yZW5kZXJUaXRsZSgpIDogbnVsbDtcclxuICAgICAgICB2YXIgY3VycmVudFBhZ2UgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZSA/IHRoaXMucmVuZGVyUGFnZSgpIDogbnVsbDtcclxuICAgICAgICB2YXIgdG9wUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5zaG93UHJvZ3Jlc3NCYXIgPT0gXCJ0b3BcIiA/IHRoaXMucmVuZGVyUHJvZ3Jlc3ModHJ1ZSkgOiBudWxsO1xyXG4gICAgICAgIHZhciBib3R0b21Qcm9ncmVzcyA9IHRoaXMuc3VydmV5LnNob3dQcm9ncmVzc0JhciA9PSBcImJvdHRvbVwiID8gdGhpcy5yZW5kZXJQcm9ncmVzcyhmYWxzZSkgOiBudWxsO1xyXG4gICAgICAgIHZhciBidXR0b25zID0gKGN1cnJlbnRQYWdlICYmIHRoaXMuc3VydmV5LnNob3dOYXZpZ2F0aW9uQnV0dG9ucykgPyB0aGlzLnJlbmRlck5hdmlnYXRpb24oKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UGFnZSkge1xyXG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMucmVuZGVyRW1wdHlTdXJ2ZXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiByZWY9XCJyb290XCIgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgIHt0aXRsZX1cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9e1N1cnZleVBhZ2VJZH0gY2xhc3NOYW1lPXt0aGlzLmNzcy5ib2R5fT5cclxuICAgICAgICAgICAgICAgICAgICB7dG9wUHJvZ3Jlc3N9XHJcbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRQYWdlfVxyXG4gICAgICAgICAgICAgICAgICAgIHtib3R0b21Qcm9ncmVzc31cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAge2J1dHRvbnN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyfT48aDM+e3RoaXMuc3VydmV5LnByb2Nlc3NlZFRpdGxlfTwvaDM+PC9kaXY+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclBhZ2UoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UGFnZSBzdXJ2ZXk9e3RoaXMuc3VydmV5fSBwYWdlPXt0aGlzLnN1cnZleS5jdXJyZW50UGFnZX0gY3NzPXt0aGlzLmNzc30gY3JlYXRvcj17dGhpc30gLz47XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUHJvZ3Jlc3MoaXNUb3A6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlQcm9ncmVzcyBzdXJ2ZXk9e3RoaXMuc3VydmV5fSBjc3M9e3RoaXMuY3NzfSBpc1RvcD17aXNUb3B9ICAvPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0aW9uKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gPFN1cnZleU5hdmlnYXRpb24gc3VydmV5ID0ge3RoaXMuc3VydmV5fSBjc3M9e3RoaXMuY3NzfS8+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckVtcHR5U3VydmV5KCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gKDxzcGFuPnt0aGlzLnN1cnZleS5lbXB0eVN1cnZleVRleHR9PC9zcGFuPik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcy5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXdQcm9wcy5tb2RlbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdQcm9wcy5qc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgUmVhY3RTdXJ2ZXlNb2RlbChuZXdQcm9wcy5qc29uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFJlYWN0U3VydmV5TW9kZWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcy5jbGllbnRJZCkgdGhpcy5zdXJ2ZXkuY2xpZW50SWQgPSBuZXdQcm9wcy5jbGllbnRJZDtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzLmRhdGEpIHRoaXMuc3VydmV5LmRhdGEgPSBuZXdQcm9wcy5kYXRhO1xyXG4gICAgICAgICAgICBpZiAobmV3UHJvcHMuY3NzKSB0aGlzLnN1cnZleS5tZXJnZUNzcyhuZXdQcm9wcy5jc3MsIHRoaXMuY3NzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vc2V0IHRoZSBmaXJzdCBwYWdlXHJcbiAgICAgICAgdmFyIGR1bW15ID0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2U7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHBhZ2VJbmRleENoYW5nZTogMCwgaXNDb21wbGV0ZWQ6IGZhbHNlLCBtb2RlbENoYW5nZWQ6IDAgfTtcclxuICAgICAgICB0aGlzLnNldFN1cnZleUV2ZW50cyhuZXdQcm9wcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0U3VydmV5RXZlbnRzKG5ld1Byb3BzOiBhbnkpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID0gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoKHNlbmRlcikgPT4geyBzZWxmLnN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZTsgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTsgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25QYXJ0aWFsU2VuZC5hZGQoKHNlbmRlcikgPT4geyBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleS5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLmlzQ3VycmVudFBhZ2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5wYWdlSW5kZXhDaGFuZ2UgPSBzZWxmLnN0YXRlLnBhZ2VJbmRleENoYW5nZSArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcyAmJiBuZXdQcm9wcy5vbkN1cnJlbnRQYWdlQ2hhbmdlZCkgbmV3UHJvcHMub25DdXJyZW50UGFnZUNoYW5nZWQoc2VuZGVyLCBvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleS5vblZpc2libGVDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uICYmIG9wdGlvbnMucXVlc3Rpb24ucmVhY3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IG9wdGlvbnMucXVlc3Rpb24ucmVhY3Quc3RhdGU7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS52aXNpYmxlID0gb3B0aW9ucy5xdWVzdGlvbi52aXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbi5yZWFjdC5zZXRTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleS5vblZhbHVlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5xdWVzdGlvbiAmJiBvcHRpb25zLnF1ZXN0aW9uLnJlYWN0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBvcHRpb25zLnF1ZXN0aW9uLnJlYWN0LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbi5yZWFjdC5zZXRTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIW5ld1Byb3BzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25WYWx1ZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzLmRhdGEpIG5ld1Byb3BzLmRhdGFbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcy5vblZhbHVlQ2hhbmdlZCkgbmV3UHJvcHMub25WYWx1ZUNoYW5nZWQoc2VuZGVyLCBvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobmV3UHJvcHMub25Db21wbGV0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRlLmFkZCgoc2VuZGVyKSA9PiB7IG5ld1Byb3BzLm9uQ29tcGxldGUoc2VuZGVyKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblBhcnRpYWxTZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uUGFydGlhbFNlbmQuYWRkKChzZW5kZXIpID0+IHsgbmV3UHJvcHMub25QYXJ0aWFsU2VuZChzZW5kZXIpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgaWYgKG5ld1Byb3BzLm9uUGFnZVZpc2libGVDaGFuZ2VkKSBuZXdQcm9wcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZChzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICBpZiAobmV3UHJvcHMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zID0gbmV3UHJvcHMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uUXVlc3Rpb25BZGRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblF1ZXN0aW9uQWRkZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25RdWVzdGlvbkFkZGVkKHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25RdWVzdGlvblJlbW92ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25RdWVzdGlvblJlbW92ZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25RdWVzdGlvblJlbW92ZWQoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblZhbGlkYXRlUXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25WYWxpZGF0ZVF1ZXN0aW9uLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uVmFsaWRhdGVRdWVzdGlvbihzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uU2VuZFJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vblNlbmRSZXN1bHQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25TZW5kUmVzdWx0KHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25HZXRSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25HZXRSZXN1bHQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25HZXRSZXN1bHQoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vblByb2Nlc3NIdG1sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvY2Vzc0h0bWwuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25Qcm9jZXNzSHRtbChzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Byb3BzLm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25BZnRlclJlbmRlclN1cnZleS5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4geyBuZXdQcm9wcy5vbkFmdGVyUmVuZGVyU3VydmV5KHNlbmRlciwgb3B0aW9ucyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3UHJvcHMub25BZnRlclJlbmRlclBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25BZnRlclJlbmRlclBhZ2UuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHsgbmV3UHJvcHMub25BZnRlclJlbmRlclBhZ2Uoc2VuZGVyLCBvcHRpb25zKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdQcm9wcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkub25BZnRlclJlbmRlclF1ZXN0aW9uLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7IG5ld1Byb3BzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbihzZW5kZXIsIG9wdGlvbnMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9JU3VydmV5Q3JlYXRvclxyXG4gICAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb25CYXNlKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbkNzcyA9IHRoaXMuY3NzW3F1ZXN0aW9uLmdldFR5cGUoKV07XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uLmdldFR5cGUoKSwge1xyXG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sIGNzczogcXVlc3Rpb25Dc3MsIHJvb3RDc3M6IHRoaXMuY3NzLCBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc1JlYWRPbmx5LCBjcmVhdG9yOiB0aGlzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yVGV4dDogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMuY3NzLmVycm9yLml0ZW19PntlcnJvclRleHR9PC9kaXY+O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uOyB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXkudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcbmltcG9ydCB7U3VydmV5TmF2aWdhdGlvbkJhc2V9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVByZXZDbGljayA9IHRoaXMuaGFuZGxlUHJldkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2sgPSB0aGlzLmhhbmRsZU5leHRDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVDbGljayA9IHRoaXMuaGFuZGxlQ29tcGxldGVDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlUHJldkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkucHJldlBhZ2UoKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU5leHRDbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm5leHRQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVDb21wbGV0ZUNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVMYXN0UGFnZSgpO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHByZXZCdXR0b24gPSAhdGhpcy5zdXJ2ZXkuaXNGaXJzdFBhZ2UgPyB0aGlzLnJlbmRlckJ1dHRvbih0aGlzLmhhbmRsZVByZXZDbGljaywgdGhpcy5zdXJ2ZXkucGFnZVByZXZUZXh0LCB0aGlzLmNzcy5uYXZpZ2F0aW9uLnByZXYpIDogbnVsbDtcclxuICAgICAgICB2YXIgbmV4dEJ1dHRvbiA9ICF0aGlzLnN1cnZleS5pc0xhc3RQYWdlID8gdGhpcy5yZW5kZXJCdXR0b24odGhpcy5oYW5kbGVOZXh0Q2xpY2ssIHRoaXMuc3VydmV5LnBhZ2VOZXh0VGV4dCwgdGhpcy5jc3MubmF2aWdhdGlvbi5uZXh0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGNvbXBsZXRlQnV0dG9uID0gdGhpcy5zdXJ2ZXkuaXNMYXN0UGFnZSAmJiB0aGlzLnN1cnZleS5pc0VkaXRNb2RlID8gdGhpcy5yZW5kZXJCdXR0b24odGhpcy5oYW5kbGVDb21wbGV0ZUNsaWNrLCB0aGlzLnN1cnZleS5jb21wbGV0ZVRleHQsIHRoaXMuY3NzLm5hdmlnYXRpb24uY29tcGxldGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuZm9vdGVyfT5cclxuICAgICAgICAgICAgICAgIHtwcmV2QnV0dG9ufVxyXG4gICAgICAgICAgICAgICAge25leHRCdXR0b259XHJcbiAgICAgICAgICAgICAgICB7Y29tcGxldGVCdXR0b259XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbihjbGljazogYW55LCB0ZXh0OiBzdHJpbmcsIGJ0bkNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luUmlnaHQ6IFwiNXB4XCIgfTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbiArIChidG5DbGFzc05hbWUgPyAnICcgKyBidG5DbGFzc05hbWUgOiBcIlwiKTtcclxuICAgICAgICByZXR1cm4gPGlucHV0IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBzdHlsZT17c3R5bGV9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtjbGlja30gdmFsdWU9e3RleHR9IC8+O1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbi50c3giLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuaW1wb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9uQmFzZX0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIGlzVG9wOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmlzVG9wID0gcHJvcHMuaXNUb3A7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuaXNUb3AgPSBuZXh0UHJvcHMuaXNUb3A7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnN1cnZleS5nZXRQcm9ncmVzcygpOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0OyB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7IHdpZHRoOiBcIjYwJVwiIH0gOiB7IHdpZHRoOiBcIjYwJVwiLCBtYXJnaW5Ub3A6IFwiMTBweFwiIH07XHJcbiAgICAgICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7IHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIgfTtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT17cHJvZ3Jlc3NTdHlsZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn0gcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57dGhpcy5wcm9ncmVzc1RleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2Pik7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb259IGZyb20gJy4vcmVhY3RxdWVzdGlvbidcclxuaW1wb3J0IHtQYWdlTW9kZWx9IGZyb20gXCIuLi9wYWdlXCI7XHJcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvcn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uUm93TW9kZWwsIFBhbmVsTW9kZWx9IGZyb20gXCIuLi9wYW5lbFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4uL3F1ZXN0aW9uYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcGFnZTogUGFnZU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xyXG4gICAgcHJpdmF0ZSBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcjtcclxuICAgIHByb3RlY3RlZCBjc3M6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gcHJvcHMucGFnZTtcclxuICAgICAgICB0aGlzLnN1cnZleSA9IHByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBwcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IG5leHRQcm9wcy5wYWdlO1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV4dFByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnZSA9PSBudWxsIHx8IHRoaXMuc3VydmV5ID09IG51bGwgfHwgdGhpcy5jcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcclxuICAgICAgICB2YXIgcm93cyA9IFtdO1xyXG4gICAgICAgIHZhciBxdWVzdGlvblJvd3MgPSB0aGlzLnBhZ2Uucm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByb3dzLnB1c2godGhpcy5jcmVhdGVSb3cocXVlc3Rpb25Sb3dzW2ldLCBpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgcmVmPVwicm9vdFwiPlxyXG4gICAgICAgICAgICAgICAge3RpdGxlfVxyXG4gICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJvdyhyb3c6IFF1ZXN0aW9uUm93TW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHJvd05hbWUgPSBcInJvd1wiICsgKGluZGV4ICsgMSk7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlSb3cga2V5PXtyb3dOYW1lfSByb3c9e3Jvd30gc3VydmV5PXt0aGlzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBjc3M9e3RoaXMuY3NzfSAvPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2UudGl0bGUgfHwgIXRoaXMuc3VydmV5LnNob3dQYWdlVGl0bGVzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGV4dCA9IHRoaXMucGFnZS5wcm9jZXNzZWRUaXRsZTtcclxuICAgICAgICBpZiAodGhpcy5wYWdlLm51bSA+IDApIHtcclxuICAgICAgICAgICAgdGV4dCA9IHRoaXMucGFnZS5udW0gKyBcIi4gXCIgKyB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxoNCBjbGFzc05hbWU9e3RoaXMuY3NzLnBhZ2VUaXRsZX0+e3RleHR9PC9oND4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICAgIHByaXZhdGUgcGFuZWw6IFBhbmVsTW9kZWw7XHJcbiAgICBwcml2YXRlIHN1cnZleTogU3VydmV5TW9kZWw7XHJcbiAgICBwcml2YXRlIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnBhbmVsID0gcHJvcHMucGFuZWw7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBwcm9wcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gcHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IHByb3BzLmNzcztcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnBhbmVsID0gbmV4dFByb3BzLnBhbmVsO1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV4dFByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnJlZnNbXCJyb290XCJdO1xyXG4gICAgICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFuZWwgPT0gbnVsbCB8fCB0aGlzLnN1cnZleSA9PSBudWxsIHx8IHRoaXMuY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnJlbmRlclRpdGxlKCk7XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgcXVlc3Rpb25Sb3dzID0gdGhpcy5wYW5lbC5yb3dzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25Sb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvd3MucHVzaCh0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN0eWxlID0geyBcIm1hcmdpbkxlZnRcIjogdGhpcy5wYW5lbC5pbm5lckluZGVudCAqIHRoaXMuY3NzLnF1ZXN0aW9uLmluZGVudCArICdweCcgfTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHJlZj1cInJvb3RcIj5cclxuICAgICAgICAgICAgICAgIHt0aXRsZX1cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgICAgICAgICB7cm93c31cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJvdyhyb3c6IFF1ZXN0aW9uUm93TW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHJvd05hbWUgPSBcInJvd1wiICsgKGluZGV4ICsgMSk7XHJcbiAgICAgICAgcmV0dXJuIDxTdXJ2ZXlSb3cga2V5PXtyb3dOYW1lfSByb3c9e3Jvd30gc3VydmV5PXt0aGlzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBjc3M9e3RoaXMuY3NzfSAvPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhbmVsLnRpdGxlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdGV4dCA9IHRoaXMucGFuZWwucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICAgICAgcmV0dXJuICg8aDQgY2xhc3NOYW1lPXt0aGlzLmNzcy5wYWdlVGl0bGV9Pnt0ZXh0fTwvaDQ+KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gICAgcHJpdmF0ZSByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XHJcbiAgICBwcml2YXRlIHN1cnZleTogU3VydmV5TW9kZWw7XHJcbiAgICBwcml2YXRlIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgcHJvdGVjdGVkIGNzczogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhuZXh0UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKHByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJvdyA9IHByb3BzLnJvdztcclxuICAgICAgICBpZiAodGhpcy5yb3cpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnJvdy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLnNldFN0YXRlKHsgdmlzaWJsZTogc2VsZi5yb3cudmlzaWJsZSB9KTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleSA9IHByb3BzLnN1cnZleTtcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBwcm9wcy5jcmVhdG9yO1xyXG4gICAgICAgIHRoaXMuY3NzID0gcHJvcHMuY3NzO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAodGhpcy5yb3cgPT0gbnVsbCB8fCB0aGlzLnN1cnZleSA9PSBudWxsIHx8IHRoaXMuY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5yb3cudmlzaWJsZSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvdy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5yb3cuZWxlbWVudHNbaV0gYXMgUXVlc3Rpb25CYXNlO1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2godGhpcy5jcmVhdGVRdWVzdGlvbihxdWVzdGlvbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMucm93LnZpc2libGUgPyAge30gOiB7IGRpc3BsYXk6IFwibm9uZVwiIH07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnJvd30gc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgICAgIHtxdWVzdGlvbnN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAocXVlc3Rpb24uaXNQYW5lbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gPFN1cnZleVBhbmVsIGtleT17cXVlc3Rpb24ubmFtZX0gcGFuZWw9e3F1ZXN0aW9ufSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9IC8+O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb24ga2V5PXtxdWVzdGlvbi5uYW1lfSBxdWVzdGlvbj17cXVlc3Rpb259IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzPXt0aGlzLmNzc30gLz47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHBhZ2UudHN4IiwiaW1wb3J0IHtDb25kaXRpb24sIENvbmRpdGlvbk5vZGV9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyIHtcclxuICAgIHByaXZhdGUgdGV4dDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByb290OiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uTm9kZXM6IEFycmF5PENvbmRpdGlvbk5vZGU+O1xyXG4gICAgcHJpdmF0ZSBub2RlOiBDb25kaXRpb25Ob2RlO1xyXG4gICAgcHJpdmF0ZSBhdDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBsZW5ndGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwYXJzZSh0ZXh0OiBzdHJpbmcsIHJvb3Q6IENvbmRpdGlvbk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XHJcbiAgICAgICAgdGhpcy5yb290LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hdCA9IDA7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLnRleHQubGVuZ3RoO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnBhcnNlVGV4dCgpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9TdHJpbmcocm9vdDogQ29uZGl0aW9uTm9kZSk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlVG9TdHJpbmcocm9vdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHRvU3RyaW5nQ29yZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAodmFsdWVbXCJjaGlsZHJlblwiXSkgcmV0dXJuIHRoaXMubm9kZVRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICBpZiAodmFsdWVbXCJsZWZ0XCJdKSByZXR1cm4gdGhpcy5jb25kaXRpb25Ub1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vZGVUb1N0cmluZyhub2RlOiBDb25kaXRpb25Ob2RlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobm9kZS5pc0VtcHR5KSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgcmVzID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVUZXh0ID0gdGhpcy50b1N0cmluZ0NvcmUobm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykgcmVzICs9ICcgJyArIG5vZGUuY29ubmVjdGl2ZSArICcgJztcclxuICAgICAgICAgICAgICAgIHJlcyArPSBub2RlVGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSAhPSB0aGlzLnJvb3QgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJlcyA9ICcoJyArIHJlcyArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBDb25kaXRpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uLnJpZ2h0IHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7XHJcbiAgICAgICAgaWYgKGxlZnQgJiYgIXRoaXMuaXNOdW1lcmljKGxlZnQpKSBsZWZ0ID0gXCInXCIgKyBsZWZ0ICsgXCInXCI7XHJcbiAgICAgICAgdmFyIHJlcyA9IGxlZnQgKyAnICcgKyB0aGlzLm9wZXJhdGlvblRvU3RyaW5nKGNvbmRpdGlvbi5vcGVyYXRvcik7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb1JpZ2h0T3BlcmF0aW9uKGNvbmRpdGlvbi5vcGVyYXRvcikpIHJldHVybiByZXM7XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xyXG4gICAgICAgIGlmIChyaWdodCAmJiAhdGhpcy5pc051bWVyaWMocmlnaHQpKSByaWdodCA9IFwiJ1wiICsgcmlnaHQgKyBcIidcIjtcclxuICAgICAgICByZXR1cm4gcmVzICsgJyAnICsgcmlnaHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wZXJhdGlvblRvU3RyaW5nKG9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChvcCA9PSBcImVxdWFsXCIpIHJldHVybiBcIj1cIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJub3RlcXVhbFwiKSByZXR1cm4gXCIhPVwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJcIikgcmV0dXJuIFwiPlwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImxlc3NcIikgcmV0dXJuIFwiPFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImdyZWF0ZXJvcmVxdWFsXCIpIHJldHVybiBcIj49XCI7XHJcbiAgICAgICAgaWYgKG9wID09IFwibGVzc29yZXF1YWxcIikgcmV0dXJuIFwiPD1cIjtcclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtZXJpYyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBhcnNlVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTm9kZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKHRoaXMubm9kZSk7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMucmVhZENvbmRpdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gcmVzICYmIHRoaXMuYXQgPj0gdGhpcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRDb25kaXRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlYWRDb25kaXRpb24oKTtcclxuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIHJlcztcclxuICAgICAgICB2YXIgY29ubmVjdGl2ZSA9IHRoaXMucmVhZENvbm5lY3RpdmUoKTtcclxuICAgICAgICBpZiAoY29ubmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENvbm5lY3RpdmUoY29ubmVjdGl2ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRDb25kaXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29uZGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBleHBSZXMgPSB0aGlzLnJlYWRFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgaWYgKGV4cFJlcyA8IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZihleHBSZXMgPT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIGxlZnQgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWxlZnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRPcGVyYXRvcigpO1xyXG4gICAgICAgIGlmICghb3ApIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgYyA9IG5ldyBDb25kaXRpb24oKTtcclxuICAgICAgICBjLmxlZnQgPSBsZWZ0OyBjLm9wZXJhdG9yID0gb3A7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTm9SaWdodE9wZXJhdGlvbihvcCkpIHtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmICghcmlnaHQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgYy5yaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENvbmRpdGlvbihjKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZEV4cHJlc3Npb24oKTogbnVtYmVyIHtcclxuICAgICAgICB0aGlzLnNraXAoKTtcclxuICAgICAgICBpZiAodGhpcy5hdCA+PSB0aGlzLmxlbmd0aCB8fCB0aGlzLmNoICE9ICcoJykgcmV0dXJuIDA7XHJcbiAgICAgICAgdGhpcy5hdCsrO1xyXG4gICAgICAgIHRoaXMucHVzaEV4cHJlc3Npb24oKTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5yZWFkQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5za2lwKCk7XHJcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuY2ggPT0gPHN0cmluZz4nKSc7XHJcbiAgICAgICAgICAgIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgdGhpcy5wb3BFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBjaCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmF0KTsgfVxyXG4gICAgcHJpdmF0ZSBza2lwKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGggJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSB0aGlzLmF0Kys7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU3BhY2UoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1xcbicgfHwgYyA9PSAnXFx0JyB8fCBjID09ICdcXHInO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1F1b3RlcyhjOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYyA9PSBcIidcIiB8fCBjID09ICdcIidcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNPcGVyYXRvckNoYXIoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gJz4nIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz0nIHx8IGMgPT0gJyEnO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0JyYWNrZXRzKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjID09ICcoJyB8fCBjID09ICcpJztcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZFN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgIHRoaXMuc2tpcCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0ID49IHRoaXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmF0O1xyXG4gICAgICAgIHZhciBoYXNRdW90ZXMgPSB0aGlzLmlzUXVvdGVzKHRoaXMuY2gpO1xyXG4gICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICB2YXIgaXNGaXJzdE9wQ2ggPSB0aGlzLmlzT3BlcmF0b3JDaGFyKHRoaXMuY2gpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmF0IDwgdGhpcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFoYXNRdW90ZXMgJiYgdGhpcy5pc1NwYWNlKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNRdW90ZXModGhpcy5jaCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNRdW90ZXMpIHRoaXMuYXQrKztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaGFzUXVvdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdE9wQ2ggIT0gdGhpcy5pc09wZXJhdG9yQ2hhcih0aGlzLmNoKSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0JyYWNrZXRzKHRoaXMuY2gpKSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmF0IDw9IHN0YXJ0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy50ZXh0LnN1YnN0cihzdGFydCwgdGhpcy5hdCAtIHN0YXJ0KTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMSAmJiB0aGlzLmlzUXVvdGVzKHJlc1swXSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSByZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUXVvdGVzKHJlc1tyZXMubGVuZ3RoIC0gMV0pKSBsZW4tLTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5zdWJzdHIoMSwgbGVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc05vUmlnaHRPcGVyYXRpb24ob3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBvcCA9PSBcImVtcHR5XCIgfHwgb3AgPT0gXCJub3RlbXB0eVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkT3BlcmF0b3IoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIW9wKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBvcCA9IG9wLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKG9wID09ICc+Jykgb3AgPSBcImdyZWF0ZXJcIjtcclxuICAgICAgICBpZiAob3AgPT0gJzwnKSBvcCA9IFwibGVzc1wiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPj0nIHx8IG9wID09ICc9PicpIG9wID0gXCJncmVhdGVyb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPD0nIHx8IG9wID09ICc9PCcpIG9wID0gXCJsZXNzb3JlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPScgfHwgb3AgPT0gJz09Jykgb3AgPSBcImVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICc8PicgfHwgb3AgPT0gJyE9Jykgb3AgPSBcIm5vdGVxdWFsXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdjb250YWluJykgb3AgPSBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICdub3Rjb250YWluJykgb3AgPSBcIm5vdGNvbnRhaW5zXCI7XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29ubmVjdGl2ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBjb24gPSB0aGlzLnJlYWRTdHJpbmcoKTtcclxuICAgICAgICBpZiAoIWNvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uID0gY29uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGNvbiA9PSBcIiZcIiB8fCBjb24gPT0gXCImJlwiKSBjb24gPSBcImFuZFwiO1xyXG4gICAgICAgIGlmIChjb24gPT0gXCJ8XCIgfHwgY29uID09IFwifHxcIikgY29uID0gXCJvclwiO1xyXG4gICAgICAgIGlmIChjb24gIT0gXCJhbmRcIiAmJiBjb24gIT0gXCJvclwiKSBjb24gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBjb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHB1c2hFeHByZXNzaW9uKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBvcEV4cHJlc3Npb24oKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlcy5wb3AoKTtcclxuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmV4cHJlc3Npb25Ob2Rlc1t0aGlzLmV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkQ29uZGl0aW9uKGM6IENvbmRpdGlvbikge1xyXG4gICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKGMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRDb25uZWN0aXZlKGNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0aXZlID0gY29uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY29ubmVjdGl2ZSAhPSBjb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDb24gPSB0aGlzLm5vZGUuY29ubmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRDaGlsZHJlbiA9IHRoaXMubm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3RpdmUgPSBjb247XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTm9kZSA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNvbm5lY3RpdmUgPSBvbGRDb247XHJcbiAgICAgICAgICAgICAgICBvbGROb2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChvbGROb2RlKTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwiZXhwb3J0IGNsYXNzIGR4U3VydmV5U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlcnZpY2VVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly9keHN1cnZleWFwaS5henVyZXdlYnNpdGVzLm5ldC9hcGkvU3VydmV5XCI7XHJcbiAgICAvL3B1YmxpYyBzdGF0aWMgc2VydmljZVVybDogc3RyaW5nID0gXCJodHRwOi8vbG9jYWxob3N0OjUwNDg4L2FwaS9TdXJ2ZXlcIjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRTdXJ2ZXkoc3VydmV5SWQ6IHN0cmluZywgb25Mb2FkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy9nZXRTdXJ2ZXk/c3VydmV5SWQ9JyArIHN1cnZleUlkKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0KHBvc3RJZDogc3RyaW5nLCByZXN1bHQ6IEpTT04sIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpPT4gdm9pZCwgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdQT1NUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL3Bvc3QvJyk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7IHBvc3RJZDogcG9zdElkLCBzdXJ2ZXlSZXN1bHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgfTtcclxuICAgICAgICBpZiAoY2xpZW50SWQpIGRhdGFbJ2NsaWVudElkJ10gPSBjbGllbnRJZDtcclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkKSBkYXRhWydpc1BhcnRpYWxDb21wbGV0ZWQnXSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGRhdGFTdHJpbmdpZnk6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XHJcbiAgICAgICAgICAgIG9uU2VuZFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKGRhdGFTdHJpbmdpZnkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNlbmRGaWxlKHBvc3RJZDogc3RyaW5nLCBmaWxlOiBGaWxlLCBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghb25TZW5kRmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy91cGxvYWQvJywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJwb3N0SWRcIiwgcG9zdElkKTtcclxuICAgICAgICB4aHIuc2VuZChmb3JtRGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgb25HZXRSZXN1bHQ6IChzdWNjZXNzOiBib29sZWFuLCBkYXRhOiBhbnksIGRhdGFMaXN0OiBBcnJheTxhbnk+LCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmbmFtZT0nICsgbmFtZTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL2dldFJlc3VsdD8nICsgZGF0YSk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LlF1ZXN0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0geyBuYW1lOiBrZXksIHZhbHVlOiByZXN1bHQuUXVlc3Rpb25SZXN1bHRba2V5XSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25HZXRSZXN1bHQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgbGlzdCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNDb21wbGV0ZWQocmVzdWx0SWQ6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZywgb25Jc0NvbXBsZXRlZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHZhciBkYXRhID0gJ3Jlc3VsdElkPScgKyByZXN1bHRJZCArICcmY2xpZW50SWQ9JyArIGNsaWVudElkO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArICcvaXNDb21wbGV0ZWQ/JyArIGRhdGEpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvbklzQ29tcGxldGVkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElQYWdlLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5LCBJRWxlbWVudCwgSVF1ZXN0aW9uLCBIYXNoVGFibGUsIFN1cnZleUVsZW1lbnQsIFN1cnZleVBhZ2VJZH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7Q29uZGl0aW9uUnVubmVyfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbH0gZnJvbSBcIi4vcGFuZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElQYWdlIHtcclxuICAgIHByaXZhdGUgbnVtVmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eTogc3RyaW5nID0gXCJpbmhlcml0XCI7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicGFnZVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG51bSgpIHsgcmV0dXJuIHRoaXMubnVtVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgbnVtKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5udW1WYWx1ZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubnVtVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9uTnVtQ2hhbmdlZCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24uaGFzSW5wdXQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpXS5mb2N1cygpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb25zW2ldLnZpc2libGUgfHwgdGhpcy5xdWVzdGlvbnNbaV0uY3VycmVudEVycm9yQ291bnQgPT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2ldLmZvY3VzKHRydWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AoU3VydmV5UGFnZUlkKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbk51bUNoYW5nZWQodmFsdWU6IG51bWJlcikge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMudmlzaWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInBhZ2VcIiwgW3sgbmFtZTogXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIiwgZGVmYXVsdDogXCJpbmhlcml0XCIsIGNob2ljZXM6IFtcImloZXJpdFwiLCBcInNob3dcIiwgXCJoaWRlXCJdIH1dLCBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQYWdlTW9kZWwoKTsgfSwgXCJwYW5lbFwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGFnZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0Jhc2UsIElQYWdlLCBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5LCBJU3VydmV5RGF0YSwgSUVsZW1lbnQsIElRdWVzdGlvbiwgSGFzaFRhYmxlLCBTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlQYWdlSWR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUm93TW9kZWwge1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW47XHJcbiAgICB2aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gcGFuZWwuZGF0YSAmJiBwYW5lbC5kYXRhLmlzRGVzaWduTW9kZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBlbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+ID0gW107XHJcbiAgICAvL1RPRE8gcmVtb3ZlIGFmdGVyIHVwZGF0aW5nIHJlYWN0IGFuZCB2dWVcclxuICAgIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PElFbGVtZW50PiB7IHJldHVybiB0aGlzLmVsZW1lbnRzO30gXHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdXBkYXRlVmlzaWJsZSgpIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmNhbGNWaXNpYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEVsZW1lbnQocTogSUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2gocSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKSB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0V2lkdGgoKSB7XHJcbiAgICAgICAgdmFyIHZpc0NvdW50ID0gdGhpcy5nZXRWaXNpYmxlQ291bnQoKTtcclxuICAgICAgICBpZiAodmlzQ291bnQgPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHEgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgcS5yZW5kZXJXaWR0aCA9IHEud2lkdGggPyBxLndpZHRoIDogTWF0aC5mbG9vcigxMDAgLyB2aXNDb3VudCkgKyAnJSc7XHJcbiAgICAgICAgICAgICAgICBxLnJpZ2h0SW5kZW50ID0gY291bnRlciA8IHZpc0NvdW50IC0gMSA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZpc2libGVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciByZXMgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHJlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjYWxjVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUNvdW50KCkgPiAwOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsQmFzZSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJQ29uZGl0aW9uUnVubmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBwYW5lbENvdW50ZXIgPSAxMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYW5lbElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwic3BfXCIgKyBQYW5lbE1vZGVsQmFzZS5wYW5lbENvdW50ZXIrKztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRhdGFWYWx1ZTogSVN1cnZleSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcclxuICAgIHByaXZhdGUgZWxlbWVudHNWYWx1ZTogQXJyYXk8SUVsZW1lbnQ+ID0gbmV3IEFycmF5PElFbGVtZW50PigpO1xyXG4gICAgcHJpdmF0ZSBpc1F1ZXN0aW9uc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uc1ZhbHVlOiBBcnJheTxRdWVzdGlvbkJhc2U+ID0gbmV3IEFycmF5PFF1ZXN0aW9uQmFzZT4oKTtcclxuICAgIHB1YmxpYyBwYXJlbnQ6IFBhbmVsTW9kZWxCYXNlID0gbnVsbDtcclxuICAgIHB1YmxpYyB2aXNpYmxlSWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICByb3dzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHJpdmF0ZSBsb2NUaXRsZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHB1YmxpYyB2aXNpYmxlSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IFBhbmVsTW9kZWxCYXNlLmdldFBhbmVsSWQoKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHNWYWx1ZS5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKTogbnVtYmVyIHsgcmV0dXJuIHNlbGYuZG9PblB1c2hFbGVtZW50KHRoaXMsIHZhbHVlKTsgfTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzVmFsdWUuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IFF1ZXN0aW9uQmFzZVtdKTogUXVlc3Rpb25CYXNlW10ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5kb1NwbGljZUVsZW1lbnRzKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogSVN1cnZleSB7IHJldHVybiB0aGlzLmRhdGFWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBJU3VydmV5KSB7XHJcbiAgICAgICAgaWYodGhpcy5kYXRhVmFsdWUgPT09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kYXRhVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXREYXRhKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGUudGV4dCA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH0gXHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/ICg8SUxvY2FsaXphYmxlT3duZXI+PGFueT50aGlzLmRhdGEpLmdldExvY2FsZSgpIDogXCJcIjsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbkJhc2U+IHsgXHJcbiAgICAgICAgaWYoIXRoaXMuaXNRdWVzdGlvbnNSZWFkeSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmKGVsLmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXMgPSAoPFBhbmVsTW9kZWw+ZWwpLnF1ZXN0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgcXMubGVuZ3RoOyBqICsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaChxc1tqXSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZS5wdXNoKDxRdWVzdGlvbkJhc2U+ZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpIHtcclxuICAgICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLnBhcmVudCkgdGhpcy5wYXJlbnQubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7IHJldHVybiB0aGlzLmVsZW1lbnRzVmFsdWU7IH1cclxuICAgIHB1YmxpYyBjb250YWluc0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsOiBhbnkgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZihlbCA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgaWYoKDxQYW5lbE1vZGVsQmFzZT5lbCkuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIGZvY3VzZU9uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBmaXJzdEVycm9yUXVlc3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHZhciB2aXNpYmxlUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5hZGRRdWVzdGlvbnNUb0xpc3QodmlzaWJsZVF1ZXN0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHZpc2libGVRdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VPbkZpcnN0RXJyb3IgJiYgZmlyc3RFcnJvclF1ZXN0aW9uID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdEVycm9yUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcnN0RXJyb3JRdWVzdGlvbikgZmlyc3RFcnJvclF1ZXN0aW9uLmZvY3VzKHRydWUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUXVlc3Rpb25zVG9MaXN0KGxpc3Q6IEFycmF5PElRdWVzdGlvbj4sIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihlbC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAoPFBhbmVsTW9kZWw+ZWwpLmFkZFF1ZXN0aW9uc1RvTGlzdChsaXN0LCB2aXNpYmxlT25seSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IFxyXG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKDxJUXVlc3Rpb24+ZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PFF1ZXN0aW9uUm93TW9kZWw+IHtcclxuICAgICAgICBpZighdGhpcy5yb3dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXMgPSB0aGlzLmJ1aWxkUm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCkgeyByZXR1cm4gKCF0aGlzLmRhdGEpIHx8IHRoaXMuZGF0YS5jdXJyZW50UGFnZSA9PSB0aGlzLnJvb3Q7IH1cclxuICAgIHByb3RlY3RlZCBnZXQgcm9vdCgpOiBQYW5lbE1vZGVsQmFzZSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsQmFzZT50aGlzO1xyXG4gICAgICAgIHdoaWxlKHJlcy5wYXJlbnQpIHJlcyA9IHJlcy5wYXJlbnQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVSb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7IHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTsgfVxyXG4gICAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJvd3NDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgaXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzTG9hZGluZ0Zyb21Kc29uOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25Sb3dzQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnJvd1ZhbHVlcyA9IG51bGw7XHJcbiAgICAgICAgaWYodGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB0aGlzLnJvd3NDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0IGlzRGVzaWduTW9kZSgpIHsgcmV0dXJuIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuaXNEZXNpZ25Nb2RlOyB9XHJcbiAgICBwcml2YXRlIGRvT25QdXNoRWxlbWVudChsaXN0OiBBcnJheTxJRWxlbWVudD4sIHZhbHVlOiBJRWxlbWVudCkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGxpc3QsIHZhbHVlKTtcclxuICAgICAgICB0aGlzLm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xyXG4gICAgICAgIHRoaXMub25BZGRFbGVtZW50KHZhbHVlLCBsaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9TcGxpY2VFbGVtZW50cyhsaXN0OiBBcnJheTxJRWxlbWVudD4sIHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IElFbGVtZW50W10pIHtcclxuICAgICAgICBpZighc3RhcnQpIHN0YXJ0ID0gMDtcclxuICAgICAgICBpZighZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcclxuICAgICAgICB2YXIgZGVsZXRlZFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkZWxldGVDb3VudDsgaSArKykge1xyXG4gICAgICAgICAgICBpZihpICsgc3RhcnQgPj0gbGlzdC5sZW5ndGgpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBkZWxldGVkUXVlc3Rpb25zLnB1c2gobGlzdFtpICsgc3RhcnRdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChsaXN0LCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcclxuICAgICAgICBpZighaXRlbXMpIGl0ZW1zID0gW107XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRRdWVzdGlvbnMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50KGRlbGV0ZWRRdWVzdGlvbnNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFkZEVsZW1lbnQoaXRlbXNbaV0sIHN0YXJ0ICsgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uQWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmKGVsZW1lbnQuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICB2YXIgcCA9IDxQYW5lbE1vZGVsPmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHAuZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICAgICAgcC5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkJhc2U+ZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHEuc2V0RGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnF1ZXN0aW9uQWRkZWQocSwgaW5kZXgsIHRoaXMsIHRoaXMucm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGVsZW1lbnQucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50KTsgfVxyXG4gICAgICAgIGVsZW1lbnQuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50KTsgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcclxuICAgICAgICBpZighZWxlbWVudC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkgdGhpcy5kYXRhLnF1ZXN0aW9uUmVtb3ZlZCg8UXVlc3Rpb25CYXNlPmVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkgdGhpcy5kYXRhLnBhbmVsUmVtb3ZlZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvd1ZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRWxlbWVudFN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50OiBhbnkpICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd1ZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChyb3cuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGJ1aWxkUm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvblJvd01vZGVsPigpO1xyXG4gICAgICAgIHZhciBsYXN0Um93VmlzaWJsZUluZGV4ID0gLTE7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICB2YXIgaXNOZXdSb3cgPSBpID09IDAgfHwgZWwuc3RhcnRXaXRoTmV3TGluZTtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IGlzTmV3Um93ID8gdGhpcy5jcmVhdGVSb3coKSA6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGlmKGlzTmV3Um93KSByZXN1bHQucHVzaChyb3cpO1xyXG4gICAgICAgICAgICByb3cuYWRkRWxlbWVudChlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtpXS51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkgeyBcclxuICAgICAgICB2YXIgc3RyID0gdGhpcy50aXRsZTtcclxuICAgICAgICBpZighc3RyICYmIHRoaXMuaXNQYW5lbCAmJiB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSAhPSBudWxsID8gdGhpcy5kYXRhLnByb2Nlc3NUZXh0KHN0cikgOiBzdHI7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xyXG5cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4geyAgcmV0dXJuICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzRGVzaWduTW9kZSkgfHwgdGhpcy5nZXRJc1BhZ2VWaXNpYmxlKG51bGwpOyB9XHJcbiAgICBwdWJsaWMgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXSA9PSBleGNlcHRpb25RdWVzdGlvbikgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXS52aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIgPSAtMSkge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UsIGluZGV4OiBudW1iZXIgPSAtMSkge1xyXG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChxdWVzdGlvbiwgaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFBhbmVsKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZEVsZW1lbnQocGFuZWwsIGluZGV4KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGROZXdRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb25CYXNlIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb247XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbChuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFBhbmVsKHBhbmVsKTtcclxuICAgICAgICByZXR1cm4gcGFuZWw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZihlbC5pc1BhbmVsICYmICg8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZWwpKS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmVRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55Pikge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvblJ1bm5lcikgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcclxuICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLm9uTG9jYWxlQ2hhbmdlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vL2V4cG9ydCBjbGFzcyBcclxuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElFbGVtZW50IHtcclxuICAgIHByaXZhdGUgcmVuZGVyV2lkdGhWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByaWdodEluZGVudFZhbHVlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgd2lkdGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgaW5uZXJJbmRlbnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgc3RhcnRXaXRoTmV3TGluZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicGFuZWxcIjsgfVxyXG4gICAgcHVibGljIHNldERhdGEobmV3VmFsdWU6IElTdXJ2ZXlEYXRhKSB7IFxyXG4gICAgICAgIHRoaXMuZGF0YSA9IDxJU3VydmV5Pm5ld1ZhbHVlOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuaW5uZXJJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5pbm5lckluZGVudFZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbm5lckluZGVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIGlmKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spIHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmVuZGVyV2lkdGgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVuZGVyV2lkdGhWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yZW5kZXJXaWR0aCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVuZGVyV2lkdGhWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN0YXJ0V2l0aE5ld0xpbmUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzdGFydFdpdGhOZXdMaW5lKHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmlnaHRJbmRlbnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMucmlnaHRJbmRlbnRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByaWdodEluZGVudCh2YWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5yaWdodEluZGVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmlnaHRJbmRlbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZih0aGlzLnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spIHRoaXMucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicGFuZWxcIiwgW1wibmFtZVwiLCAgeyBuYW1lOiBcImVsZW1lbnRzXCIsIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIiwgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxyXG4gICAgeyBuYW1lOiBcInZpc2libGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIFwidmlzaWJsZUlmOmV4cHJlc3Npb25cIiwgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgIHtuYW1lOiBcImlubmVySW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM119XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFBhbmVsTW9kZWwoKTsgfSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wYW5lbC50cyIsImltcG9ydCB7QmFzZSwgSVF1ZXN0aW9uLCBFdmVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcclxuICAgIHB1YmxpYyBodG1sVGVtcGxhdGU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyB3aWRnZXRKc29uOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmh0bWxUZW1wbGF0ZSA9IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlID8gd2lkZ2V0SnNvbi5odG1sVGVtcGxhdGUgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGVsOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKSB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB3aWxsVW5tb3VudChxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudCkgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNGaXQocXVlc3Rpb246IElRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldEpzb24uaXNGaXQpIHJldHVybiB0aGlzLndpZGdldEpzb24uaXNGaXQocXVlc3Rpb24pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldENvbGxlY3Rpb24ge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XHJcbiAgICBwcml2YXRlIHdpZGdldHNWYWx1ZXM6IEFycmF5PFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0PiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBvbkN1c3RvbVdpZGdldEFkZGVkOiBFdmVudDwoY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldCkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksIGFueT4oKTtcclxuICAgICAgICBcclxuICAgIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4geyByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzOyB9XHJcbiAgICBwdWJsaWMgYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldEpzb246IGFueSkge1xyXG4gICAgICAgIHZhciBuYW1lID0gd2lkZ2V0SnNvbi5uYW1lO1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICBuYW1lID0gXCJ3aWRnZXRfXCIgKyB0aGlzLndpZGdldHMubGVuZ3RoICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcclxuICAgICAgICB0aGlzLndpZGdldHNWYWx1ZXMucHVzaChjdXN0b21XaWRnZXQpO1xyXG4gICAgICAgIHRoaXMub25DdXN0b21XaWRnZXRBZGRlZC5maXJlKGN1c3RvbVdpZGdldCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7IHRoaXMud2lkZ2V0c1ZhbHVlcyA9IFtdOyB9XHJcblxyXG4gICAgcHVibGljIGdldEN1c3RvbVdpZGdldChxdWVzdGlvbjogSVF1ZXN0aW9uKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53aWRnZXRzVmFsdWVzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXRzVmFsdWVzW2ldLmlzRml0KHF1ZXN0aW9uKSkgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwiaW1wb3J0IHtzdXJ2ZXlDc3N9IGZyb20gXCIuL2Nzc3N0YW5kYXJkXCI7XHJcblxyXG5leHBvcnQgdmFyIGRlZmF1bHRCb290c3RyYXBDc3MgPSB7XHJcbiAgICByb290OiBcIlwiLFxyXG4gICAgaGVhZGVyOiBcInBhbmVsLWhlYWRpbmdcIixcclxuICAgIGJvZHk6IFwicGFuZWwtYm9keVwiLFxyXG4gICAgZm9vdGVyOiBcInBhbmVsLWZvb3RlclwiLFxyXG4gICAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIiwgbmF2aWdhdGlvbjogeyBjb21wbGV0ZTogXCJcIiwgcHJldjogXCJcIiwgbmV4dDogXCJcIiB9LFxyXG4gICAgcHJvZ3Jlc3M6IFwicHJvZ3Jlc3MgY2VudGVyLWJsb2NrXCIsIHByb2dyZXNzQmFyOiBcInByb2dyZXNzLWJhclwiLFxyXG4gICAgcGFnZVRpdGxlOiBcIlwiLFxyXG4gICAgcm93OiBcIlwiLFxyXG4gICAgcXVlc3Rpb246IHsgcm9vdDogXCJcIiwgdGl0bGU6IFwiXCIsIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsIGluZGVudDogMjAgfSxcclxuICAgIGVycm9yOiB7IHJvb3Q6IFwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIsIGljb246IFwiZ2x5cGhpY29uIGdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduXCIsIGl0ZW06IFwiXCIgfSxcclxuXHJcbiAgICBjaGVja2JveDogeyByb290OiBcImZvcm0taW5saW5lXCIsIGl0ZW06IFwiY2hlY2tib3hcIiwgb3RoZXI6IFwiXCIgfSxcclxuICAgIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXHJcbiAgICBkcm9wZG93bjogeyByb290OiBcIlwiLCBjb250cm9sOiBcImZvcm0tY29udHJvbFwiIH0sXHJcbiAgICBtYXRyaXg6IHsgcm9vdDogXCJ0YWJsZVwiIH0sXHJcbiAgICBtYXRyaXhkcm9wZG93bjogeyByb290OiBcInRhYmxlXCIgfSxcclxuICAgIG1hdHJpeGR5bmFtaWM6IHsgcm9vdDogXCJ0YWJsZVwiLCBidXR0b246IFwiYnV0dG9uXCIgfSxcclxuICAgIG11bHRpcGxldGV4dDogeyByb290OiBcInRhYmxlXCIsIGl0ZW1UaXRsZTogXCJcIiwgaXRlbVZhbHVlOiBcImZvcm0tY29udHJvbFwiIH0sXHJcbiAgICByYWRpb2dyb3VwOiB7IHJvb3Q6IFwiZm9ybS1pbmxpbmVcIiwgaXRlbTogXCJyYWRpb1wiLCBsYWJlbDogXCJcIiwgb3RoZXI6IFwiXCIgfSxcclxuICAgIHJhdGluZzogeyByb290OiBcImJ0bi1ncm91cFwiLCBpdGVtOiBcImJ0biBidG4tZGVmYXVsdFwiIH0sXHJcbiAgICB0ZXh0OiBcImZvcm0tY29udHJvbFwiLFxyXG4gICAgd2luZG93OiB7XHJcbiAgICAgICAgcm9vdDogXCJtb2RhbC1jb250ZW50XCIsIGJvZHk6IFwibW9kYWwtYm9keVwiLFxyXG4gICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICByb290OiBcIm1vZGFsLWhlYWRlciBwYW5lbC10aXRsZVwiLCB0aXRsZTogXCJwdWxsLWxlZnRcIiwgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLXVwXCIsIGJ1dHRvbkNvbGxhcHNlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi1kb3duXCJcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbnN1cnZleUNzc1tcImJvb3RzdHJhcFwiXSA9IGRlZmF1bHRCb290c3RyYXBDc3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwLnRzIiwiaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vY3plY2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9kYW5pc2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9kdXRjaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2Zpbm5pc2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9mcmVuY2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9nZXJtYW4nO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9ncmVlayc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3BvbGlzaCc7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3JvbWFuaWFuJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vcnVzc2lhbic7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3N3ZWRpc2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi90dXJraXNoJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9jaHVua3MvbG9jYWxpemF0aW9uLnRzIiwiLy8gc3R5bGVzXHJcbmltcG9ydCBcIi4uLy4uL21haW4uc2Nzc1wiO1xyXG5cclxuZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XHJcblZlcnNpb24gPSBgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWA7XHJcblxyXG5leHBvcnQge1xyXG4gICAgQW5zd2VyQ291bnRWYWxpZGF0b3IsIEVtYWlsVmFsaWRhdG9yLCBOdW1lcmljVmFsaWRhdG9yLCBSZWdleFZhbGlkYXRvcixcclxuICAgIFN1cnZleVZhbGlkYXRvciwgVGV4dFZhbGlkYXRvciwgVmFsaWRhdG9yUmVzdWx0LCBWYWxpZGF0b3JSdW5uZXJcclxufSBmcm9tIFwiLi4vLi4vdmFsaWRhdG9yXCI7XHJcbmV4cG9ydCB7QmFzZSwgRXZlbnQsIFN1cnZleUVycm9yLCBJU3VydmV5fSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xyXG5leHBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4uLy4uL2l0ZW12YWx1ZVwiO1xyXG5leHBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4uLy4uL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcbmV4cG9ydCB7Q2hvaWNlc1Jlc3RmdWxsfSBmcm9tIFwiLi4vLi4vY2hvaWNlc1Jlc3RmdWxsXCI7XHJcbmV4cG9ydCB7Q29uZGl0aW9uLCBDb25kaXRpb25Ob2RlLCBDb25kaXRpb25SdW5uZXJ9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zXCI7XHJcbmV4cG9ydCB7Q29uZGl0aW9uc1BhcnNlcn0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvbnNQYXJzZXJcIjtcclxuZXhwb3J0IHtQcm9jZXNzVmFsdWV9IGZyb20gXCIuLi8uLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcclxuZXhwb3J0IHtDdXN0b21FcnJvciwgRXhjZWVkU2l6ZUVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3J9IGZyb20gXCIuLi8uLi9lcnJvclwiO1xyXG5leHBvcnQge1xyXG4gICAgSnNvbkVycm9yLCBKc29uSW5jb3JyZWN0VHlwZUVycm9yLCBKc29uTWV0YWRhdGEsIEpzb25NZXRhZGF0YUNsYXNzLFxyXG4gICAgSnNvbk1pc3NpbmdUeXBlRXJyb3IsIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSwgSnNvbk9iamVjdCwgSnNvbk9iamVjdFByb3BlcnR5LFxyXG4gICAgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciwgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yXHJcbn0gZnJvbSBcIi4uLy4uL2pzb25vYmplY3RcIjtcclxuZXhwb3J0IHtcclxuICAgIE1hdHJpeERyb3Bkb3duQ2VsbCwgTWF0cml4RHJvcGRvd25Db2x1bW4sIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxyXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuZXhwb3J0IHtNYXRyaXhEcm9wZG93blJvd01vZGVsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xyXG5leHBvcnQge01hdHJpeER5bmFtaWNSb3dNb2RlbCwgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcbmV4cG9ydCB7TWF0cml4Um93TW9kZWwsIFF1ZXN0aW9uTWF0cml4TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhcIjtcclxuZXhwb3J0IHtNdWx0aXBsZVRleHRJdGVtTW9kZWwsIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuZXhwb3J0IHtQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbH0gZnJvbSBcIi4uLy4uL3BhbmVsXCI7XHJcbmV4cG9ydCB7UGFnZU1vZGVsfSBmcm9tIFwiLi4vLi4vcGFnZVwiO1xyXG5leHBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25cIjtcclxuZXhwb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuLi8uLi9xdWVzdGlvbmJhc2VcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkNoZWNrYm94QmFzZSwgUXVlc3Rpb25TZWxlY3RCYXNlfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ2hlY2tib3hNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25Db21tZW50TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jb21tZW50XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25Ecm9wZG93bk1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcclxuZXhwb3J0IHtRdWVzdGlvbkZhY3RvcnksIEVsZW1lbnRGYWN0b3J5fSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25GaWxlTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9maWxlXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25IdG1sTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9odG1sXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25SYXRpbmdNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xyXG5leHBvcnQge1F1ZXN0aW9uVGV4dE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fdGV4dFwiO1xyXG5leHBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vLi4vc3VydmV5XCI7XHJcbmV4cG9ydCB7XHJcbiAgICBTdXJ2ZXlUcmlnZ2VyLCBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUsIFN1cnZleVRyaWdnZXJTZXRWYWx1ZSwgU3VydmV5VHJpZ2dlclZpc2libGUsXHJcbiAgICBUcmlnZ2VyXHJcbn0gZnJvbSBcIi4uLy4uL3RyaWdnZXJcIjtcclxuZXhwb3J0IHtTdXJ2ZXlXaW5kb3dNb2RlbH0gZnJvbSBcIi4uLy4uL3N1cnZleVdpbmRvd1wiO1xyXG5leHBvcnQge1RleHRQcmVQcm9jZXNzb3J9IGZyb20gXCIuLi8uLi90ZXh0UHJlUHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQge2R4U3VydmV5U2VydmljZX0gZnJvbSBcIi4uLy4uL2R4U3VydmV5U2VydmljZVwiO1xyXG5leHBvcnQge3N1cnZleUxvY2FsaXphdGlvbiwgc3VydmV5U3RyaW5nc30gZnJvbSBcIi4uLy4uL3N1cnZleVN0cmluZ3NcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkN1c3RvbVdpZGdldCwgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xyXG5cclxuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cclxuLy9leHBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb25EYXRlTW9kZWx9IGZyb20gXCIuLi8uLi9wbHVnaW5zL3F1ZXN0aW9uX2RhdGVcIjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHMiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7U3VydmV5fSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93IGV4dGVuZHMgU3VydmV5IHtcclxuICAgIHByaXZhdGUgdGl0bGU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkV4cGFuZGVkID0gdGhpcy5oYW5kbGVPbkV4cGFuZGVkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZCA9ICF0aGlzLnN0YXRlLmV4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmhpZGRlbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XHJcbiAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnN0YXRlLmV4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgcG9zaXRpb246IFwiZml4ZWRcIiwgYm90dG9tOiBcIjNweFwiLCByaWdodDogXCIxMHB4XCIgfTtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLndpbmRvdy5yb290fSBzdHlsZT17c3R5bGV9PlxyXG4gICAgICAgICAgICB7aGVhZGVyfVxyXG4gICAgICAgICAgICB7Ym9keX1cclxuICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIHN0eWxlQSA9IHsgd2lkdGg6IFwiMTAwJVwiIH07XHJcbiAgICAgICAgdmFyIHN0eWxlVGl0bGUgPSB7IHBhZGRpbmdSaWdodDogXCIxMHB4XCIgfTtcclxuICAgICAgICB2YXIgZ2x5cGhDbGFzc05hbWUgPSB0aGlzLnN0YXRlLmV4cGFuZGVkID8gdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25Db2xsYXBzZWQgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xyXG4gICAgICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmhlYWRlci5yb290fT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+e3RoaXMudGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnbHlwaENsYXNzTmFtZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckJvZHkoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmJvZHl9PlxyXG4gICAgICAgIHt0aGlzLnJlbmRlclN1cnZleSgpIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci51cGRhdGVTdXJ2ZXkobmV3UHJvcHMpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBuZXdQcm9wcy50aXRsZSA/IG5ld1Byb3BzLnRpdGxlIDogdGhpcy5zdXJ2ZXkudGl0bGU7XHJcbiAgICAgICAgdmFyIGhhc0V4cGFuZGVkID0gbmV3UHJvcHNbXCJleHBhbmRlZFwiXSA/IG5ld1Byb3BzLmV4cGFuZGVkIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZXhwYW5kZWQ6IGhhc0V4cGFuZGVkLCBoaWRkZW46IGZhbHNlIH07XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKGZ1bmN0aW9uIChzOiBTdXJ2ZXlNb2RlbCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3cudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGNob2ljZXNDaGFuZ2VkOiAwIH07XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uY2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCA9IHNlbGYuc3RhdGUuY2hvaWNlc0NoYW5nZWQgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbDsgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmdldEl0ZW1zKCkgfVxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcIml0ZW1cIiArIGk7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSwgaSA9PSAwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogYW55LCBpc0ZpcnN0OiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0ga2V5PXtrZXl9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMuY3NzfSByb290Q3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0gaXRlbT17aXRlbX0gdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX0gaXNGaXJzdD17aXNGaXJzdH0gLz47XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9uOiBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XHJcbiAgICBwcm90ZWN0ZWQgaXRlbTogSXRlbVZhbHVlO1xyXG4gICAgcHJvdGVjdGVkIHRleHRTdHlsZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGlzRmlyc3Q6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5pdGVtID0gcHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcHJvcHMucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy50ZXh0U3R5bGUgPSBwcm9wcy50ZXh0U3R5bGU7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gcHJvcHMuaXNGaXJzdDtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLml0ZW0gPSBuZXh0UHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLnRleHRTdHlsZSA9IG5leHRQcm9wcy50ZXh0U3R5bGU7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLmlzRmlyc3QgPSBuZXh0UHJvcHMuaXNGaXJzdDtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbmRleCA9IG5ld1ZhbHVlLmluZGV4T2YodGhpcy5pdGVtLnZhbHVlKTtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLml0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW0gfHwgIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID4gMCA/ICgxMDAgLyB0aGlzLnF1ZXN0aW9uLmNvbENvdW50KSArIFwiJVwiIDogXCJcIjtcclxuICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyBcIjVweFwiIDogXCIwcHhcIjtcclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB7IG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodCB9O1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGgpIHtcclxuICAgICAgICAgICAgZGl2U3R5bGVbXCJ3aWR0aFwiXSA9IGl0ZW1XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9ICh0aGlzLnF1ZXN0aW9uLnZhbHVlICYmIHRoaXMucXVlc3Rpb24udmFsdWUuaW5kZXhPZih0aGlzLml0ZW0udmFsdWUpID4gLTEpIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBvdGhlckl0ZW0gPSAodGhpcy5pdGVtLnZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSAmJiBpc0NoZWNrZWQpID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChpc0NoZWNrZWQsIGRpdlN0eWxlLCBvdGhlckl0ZW0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7IHJldHVybiB7IG1hcmdpblJpZ2h0OiBcIjNweFwiIH07IH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJDaGVja2JveChpc0NoZWNrZWQ6IGJvb2xlYW4sIGRpdlN0eWxlOiBhbnksIG90aGVySXRlbTogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pc0ZpcnN0ID8gdGhpcy5xdWVzdGlvbi5pbnB1dElkIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtfSBzdHlsZT17ZGl2U3R5bGV9PlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtfT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWR9IHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9IGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNoZWNrZWQ9e2lzQ2hlY2tlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RoaXMuaXRlbS50ZXh0fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAge290aGVySXRlbX1cclxuICAgICAgICAgICAgPC9kaXY+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mub3RoZXJ9PjxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9ICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9Lz48L2Rpdj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uY2hlY2tib3gudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25Ecm9wZG93bk1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uY29tbWVudFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge2Jyb3dzZXIsIGNvbXBhcmVWZXJzaW9uc30gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSwgY2hvaWNlc0NoYW5nZWQ6IDAgfTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmNob2ljZXNDaGFuZ2VkID0gc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT09IHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbDtcclxuICAgICAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoKTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgIHtzZWxlY3R9XHJcbiAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdCgpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSkgIHJldHVybiAoPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRyb2x9Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2Pik7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9uID0gPG9wdGlvbiBrZXk9e2tleX0gdmFsdWU9e2l0ZW0udmFsdWV9PntpdGVtLnRleHR9PC9vcHRpb24+O1xyXG4gICAgICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvbkNoYW5nZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGJyb3dzZXIubXNpZSB8fCAoYnJvd3Nlci5maXJlZm94ICYmIGNvbXBhcmVWZXJzaW9ucyhicm93c2VyLnZlcnNpb24sICc1MScpIDwgMCkpIHtcclxuICAgICAgICAgICAgb25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c2VsZWN0IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5jc3MuY29udHJvbH0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gb25JbnB1dD17dGhpcy5oYW5kbGVPbkNoYW5nZX0+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj5cclxuICAgICAgICAgICAge29wdGlvbnN9XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luVG9wOiBcIjNweFwiIH07XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3N0eWxlfT48U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0vPjwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmRyb3Bkb3duLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmlsZU1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fZmlsZVwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRmlsZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyBmaWxlTG9hZGVkOiAwIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25GaWxlTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25GaWxlTW9kZWw7IH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50OyBcclxuICAgICAgICBpZiAoIXdpbmRvd1tcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcclxuICAgICAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5sb2FkRmlsZShzcmMuZmlsZXNbMF0pO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlTG9hZGVkOiB0aGlzLnN0YXRlLmZpbGVMb2FkZWQgKyAxIH0pO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBpbWcgPSB0aGlzLnJlbmRlckltYWdlKCk7XHJcbiAgICAgICAgdmFyIGZpbGVJbnB1dCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzcGxheU1vZGUpIHtcclxuICAgICAgICAgICAgZmlsZUlucHV0ID0gPGlucHV0IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IHR5cGU9XCJmaWxlXCIgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9Lz47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICB7ZmlsZUlucHV0fVxyXG4gICAgICAgICAgICAgICAge2ltZ31cclxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckltYWdlKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gKDxkaXY+ICA8aW1nIHNyYz17dGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWV9IGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH0gd2lkdGg9e3RoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aH0gLz48L2Rpdj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xyXG59KTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25maWxlLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uSHRtbE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25faHRtbFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSHRtbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25IdG1sTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25IdG1sTW9kZWw7IH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLmh0bWwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5wcm9jZXNzZWRIdG1sIH07XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+ICk7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25IdG1sLCBwcm9wcyk7XHJcbn0pO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbmh0bWwudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhcIjtcclxuaW1wb3J0IHtNYXRyaXhSb3dNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4TW9kZWw7IH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgZmlyc3RUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0aD48L3RoPiA6IG51bGw7XHJcbiAgICAgICAgdmFyIGhlYWRlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24uY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5xdWVzdGlvbi5jb2x1bW5zW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCg8dGgga2V5PXtrZXl9Pntjb2x1bW4udGV4dH08L3RoPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwicm93XCIgKyBpO1xyXG4gICAgICAgICAgICByb3dzLnB1c2goPFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLmNzc30gcm9vdENzcz17dGhpcy5yb290Q3NzfSBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9IHJvdz17cm93fSBpc0ZpcnN0PXtpID09IDB9IC8+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Zmlyc3RUSH1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhNb2RlbDtcclxuICAgIHByaXZhdGUgcm93OiBNYXRyaXhSb3dNb2RlbDtcclxuICAgIHByaXZhdGUgaXNGaXJzdDogYm9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMucm93ID0gcHJvcHMucm93O1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IHByb3BzLmlzRmlyc3Q7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5yb3cudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG5leHRQcm9wcy5xdWVzdGlvbjtcclxuICAgICAgICB0aGlzLnJvdyA9IG5leHRQcm9wcy5yb3c7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gbmV4dFByb3BzLmlzRmlyc3Q7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3cpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBmaXJzdFREID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkPnt0aGlzLnJvdy50ZXh0fTwvdGQ+IDogbnVsbDtcclxuICAgICAgICB2YXIgdGRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24uY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwidmFsdWVcIiArIGk7XHJcbiAgICAgICAgICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dElkID0gdGhpcy5pc0ZpcnN0ICYmIGkgPT0gMCA/IHRoaXMucXVlc3Rpb24uaW5wdXRJZCA6IG51bGw7XHJcbiAgICAgICAgICAgIHZhciB0ZCA9IDx0ZCBrZXk9e2tleX0+PGlucHV0IGlkPXtpbnB1dElkfSB0eXBlPVwicmFkaW9cIiBuYW1lPXt0aGlzLnJvdy5mdWxsTmFtZX0gdmFsdWU9e2NvbHVtbi52YWx1ZX0gZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX0gY2hlY2tlZD17aXNDaGVja2VkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0vPjwvdGQ+O1xyXG4gICAgICAgICAgICB0ZHMucHVzaCh0ZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPHRyPntmaXJzdFREfXt0ZHN9PC90cj4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tYXRyaXgudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmltcG9ydCB7SVN1cnZleUNyZWF0b3IsIFN1cnZleVF1ZXN0aW9uRXJyb3JzfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25Sb3dNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25DZWxsfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbDsgfVxyXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBoZWFkZXJzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24uY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xyXG4gICAgICAgICAgICB2YXIgbWluV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmdldENvbHVtbldpZHRoKGNvbHVtbik7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW5TdHlsZSA9IG1pbldpZHRoID8geyBtaW5XaWR0aDogbWluV2lkdGggfSA6IHt9O1xyXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goPHRoIGtleT17a2V5fSBzdHlsZT17Y29sdW1uU3R5bGV9Pnt0aGlzLnF1ZXN0aW9uLmdldENvbHVtblRpdGxlKGNvbHVtbikgfTwvdGg+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xyXG4gICAgICAgICAgICByb3dzLnB1c2goPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25Sb3cgcm93PXtyb3d9IGNzcz17dGhpcy5jc3N9IHJvb3RDc3M9e3RoaXMucm9vdENzc30gaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8geyBvdmVyZmxvd1g6ICdzY3JvbGwnfSA6IHt9O1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgIHN0eWxlPXtkaXZTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLmNzcy5yb290fT5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93blJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlIHtcclxuICAgIHByaXZhdGUgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93ID0gbmV4dFByb3BzLnJvdztcclxuICAgICAgICB0aGlzLmNyZWF0b3IgPSBuZXh0UHJvcHMuY3JlYXRvcjtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvdykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLnJvdy5jZWxsc1tpXTtcclxuICAgICAgICAgICAgdmFyIGVycm9ycyA9IDxTdXJ2ZXlRdWVzdGlvbkVycm9ycyBxdWVzdGlvbj17Y2VsbC5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gLz5cclxuICAgICAgICAgICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNlbGwpO1xyXG4gICAgICAgICAgICB0ZHMucHVzaCg8dGQga2V5PXtcInJvd1wiICsgaX0+e2Vycm9yc317c2VsZWN0fTwvdGQ+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8dHI+PHRkPnt0aGlzLnJvdy50ZXh0fTwvdGQ+e3Rkc308L3RyPik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChjZWxsLnF1ZXN0aW9uKTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGRyb3Bkb3duLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmVsZW1lbnRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcclxuaW1wb3J0IHtJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FcnJvcnN9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcclxuaW1wb3J0IHtNYXRyaXhEeW5hbWljUm93TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XHJcbmltcG9ydCB7TWF0cml4RHJvcGRvd25DZWxsfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7UmVhY3RRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsOyB9XHJcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvcGVydGllcyhuZXh0UHJvcHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKG5leHRQcm9wczogYW55KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHJvd0NvdW50ZXI6IDAgfTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJvd0NvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnJvd0NvdW50ZXIgPSBzZWxmLnN0YXRlLnJvd0NvdW50ZXIgKyAxO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHNlbGYuc3RhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPblJvd0FkZENsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5hZGRSb3coKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaGVhZGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLmNvbHVtbnNbaV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBcImNvbHVtblwiICsgaTtcclxuICAgICAgICAgICAgdmFyIG1pbldpZHRoID0gdGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5XaWR0aChjb2x1bW4pO1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uU3R5bGUgPSBtaW5XaWR0aCA/IHsgbWluV2lkdGg6IG1pbldpZHRoIH0gOiB7fTtcclxuICAgICAgICAgICAgaGVhZGVycy5wdXNoKDx0aCBrZXk9e2tleX0gc3R5bGU9e2NvbHVtblN0eWxlfT57dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5UaXRsZShjb2x1bW4pIH08L3RoPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgcm93cy5wdXNoKDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSb3cgcm93PXtyb3d9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBpbmRleD17aX0gY3NzPXt0aGlzLmNzc30gcm9vdENzcz17dGhpcy5yb290Q3NzfSBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gLz4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwgPyB7IG92ZXJmbG93WDogJ3Njcm9sbCcgfSA6IHt9O1xyXG4gICAgICAgIHZhciBidG5EZWxldGVURCA9ICF0aGlzLmlzRGlzcGxheU1vZGUgPyA8dGg+PC90aD4gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICBzdHlsZT17ZGl2U3R5bGV9PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlcnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2J0bkRlbGV0ZVREfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8aW5wdXQgY2xhc3NOYW1lPXt0aGlzLmNzcy5idXR0b259IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2t9IHZhbHVlPXt0aGlzLnF1ZXN0aW9uLmFkZFJvd1RleHR9IC8+O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUm93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2Uge1xyXG4gICAgcHJpdmF0ZSByb3c6IE1hdHJpeER5bmFtaWNSb3dNb2RlbDtcclxuICAgIHByaXZhdGUgcXVlc3Rpb246IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xyXG4gICAgcHJpdmF0ZSBpbmRleDogbnVtYmVyO1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMobmV4dFByb3BzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0UHJvcGVydGllcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93ID0gbmV4dFByb3BzLnJvdztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbmV4dFByb3BzLnF1ZXN0aW9uO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBuZXh0UHJvcHMuaW5kZXg7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gbmV4dFByb3BzLmNyZWF0b3I7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPblJvd1JlbW92ZUNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3codGhpcy5pbmRleCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3cpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB0ZHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxsID0gdGhpcy5yb3cuY2VsbHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlcnJvcnMgPSA8U3VydmV5UXVlc3Rpb25FcnJvcnMgcXVlc3Rpb249e2NlbGwucXVlc3Rpb259IGNzcz17dGhpcy5yb290Q3NzfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IC8+O1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJRdWVzdGlvbihjZWxsKTtcclxuICAgICAgICAgICAgdGRzLnB1c2goPHRkIGtleT17XCJyb3dcIiArIGl9PntlcnJvcnN9e3NlbGVjdH08L3RkPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0Rpc3BsYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciByZW1vdmVCdXR0b24gPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xyXG4gICAgICAgICAgICB0ZHMucHVzaCg8dGQga2V5PXtcInJvd1wiICsgdGhpcy5yb3cuY2VsbHMubGVuZ3RoICsgMX0+e3JlbW92ZUJ1dHRvbn08L3RkPik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPHRyPnt0ZHN9PC90cj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChjZWxsLnF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiA8aW5wdXQgY2xhc3NOYW1lPXt0aGlzLmNzcy5idXR0b259IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9IHZhbHVlPXt0aGlzLnF1ZXN0aW9uLnJlbW92ZVJvd1RleHR9IC8+O1xyXG4gICAgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xyXG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGR5bmFtaWMudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtNdWx0aXBsZVRleHRJdGVtTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsOyB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KFwiaXRlbVwiICsgaSwgdGFibGVSb3dzW2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAge3Jvd3N9XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUm93KGtleTogc3RyaW5nLCBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPikge1xyXG4gICAgICAgIHZhciB0ZHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIHRkcy5wdXNoKDx0ZCBrZXk9e1wibGFiZWxcIiArIGl9PjxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3MuaXRlbVRpdGxlfT57aXRlbS5mdWxsVGl0bGV9PC9zcGFuPjwvdGQ+KTtcclxuICAgICAgICAgICAgdGRzLnB1c2goPHRkIGtleT17XCJ2YWx1ZVwiICsgaX0+e3RoaXMucmVuZGVySXRlbShpdGVtLCBpID09IDApfTwvdGQ+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDx0ciBrZXk9e2tleX0+e3Rkc308L3RyPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJJdGVtKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgaXNGaXJzdDogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICB2YXIgaW5wdXRJZCA9IGlzRmlyc3QgPyB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHRJdGVtIGl0ZW09e2l0ZW19IGNzcz17dGhpcy5jc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0gaW5wdXRJZD17aW5wdXRJZH0gLz47XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZSB7XHJcbiAgICBwcml2YXRlIGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbDtcclxuICAgIHByaXZhdGUgaW5wdXRJZDogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLml0ZW0gPSBwcm9wcy5pdGVtO1xyXG4gICAgICAgIHRoaXMuaW5wdXRJZCA9IHByb3BzLmlucHV0SWQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSB8fCAnJyB9O1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkJsdXIgPSB0aGlzLmhhbmRsZU9uQmx1ci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQmx1cihldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXRlbS52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLml0ZW0gPSBuZXh0UHJvcHMuaXRlbTtcclxuICAgICAgICB0aGlzLmNzcyA9IG5leHRQcm9wcy5jc3M7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgc3R5bGUgPSB7IGZsb2F0OiBcImxlZnRcIiB9O1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUpIHJldHVybiAoPGRpdiBpZD17dGhpcy5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzLml0ZW1WYWx1ZX0gc3R5bGU9e3N0eWxlfT57dGhpcy5pdGVtLnZhbHVlfTwvZGl2Pik7XHJcbiAgICAgICAgcmV0dXJuICg8aW5wdXQgaWQ9e3RoaXMuaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzcy5pdGVtVmFsdWV9IHN0eWxlPXtzdHlsZX0gdHlwZT1cInRleHRcIiB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gcGxhY2Vob2xkZXI9e3RoaXMuaXRlbS5wbGFjZUhvbGRlcn0gb25CbHVyPXt0aGlzLmhhbmRsZU9uQmx1cn0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgbWFpbkNsYXNzTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJcIjsgfVxyXG59XHJcblxyXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25tdWx0aXBsZXRleHQudHN4IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2V9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25lbGVtZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWx9IGZyb20gXCIuLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmNvbW1lbnRcIjtcclxuaW1wb3J0IHtSZWFjdFF1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgY2hvaWNlc0NoYW5nZWQ6IDAgfTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLmNob2ljZXNDaGFuZ2VkID0gc2VsZi5zdGF0ZS5jaG9pY2VzQ2hhbmdlZCArIDE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7IHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbDsgfVxyXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mucm9vdH0+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRJdGVtcygpIH1cclxuICAgICAgICAgICAgPC9kaXY+KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGkgPT0gMCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkgeyByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiIH07IH1cclxuICAgIHByaXZhdGUgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogSXRlbVZhbHVlLCBpc0ZpcnN0OiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xyXG4gICAgICAgIHZhciBpdGVtV2lkdGggPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID4gMCA/ICgxMDAgLyB0aGlzLnF1ZXN0aW9uLmNvbENvdW50KSArIFwiJVwiIDogXCJcIjtcclxuICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50ID09IDAgPyBcIjVweFwiIDogXCIwcHhcIjtcclxuICAgICAgICB2YXIgZGl2U3R5bGUgPSB7IG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodCB9O1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGgpIHtcclxuICAgICAgICAgICAgZGl2U3R5bGVbXCJ3aWR0aFwiXSA9IGl0ZW1XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgICB2YXIgb3RoZXJJdGVtID0gKGlzQ2hlY2tlZCAmJiBpdGVtLnZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSkgPyB0aGlzLnJlbmRlck90aGVyKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclJhZGlvKGtleSwgaXRlbSwgaXNDaGVja2VkLCBkaXZTdHlsZSwgb3RoZXJJdGVtLCBpc0ZpcnN0KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJSYWRpbyhrZXk6IHN0cmluZywgaXRlbTogSXRlbVZhbHVlLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIGRpdlN0eWxlOiBhbnksIG90aGVySXRlbTogSlNYLkVsZW1lbnQsIGlzRmlyc3Q6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlkID0gaXNGaXJzdCA/IHRoaXMucXVlc3Rpb24uaW5wdXRJZCA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMuY3NzLml0ZW19IHN0eWxlPXtkaXZTdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5sYWJlbH0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9e2lkfSB0eXBlPVwicmFkaW9cIiBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWUgKyBcIl9cIiArIHRoaXMucXVlc3Rpb25CYXNlLmlkfSBjaGVja2VkPXtpc0NoZWNrZWR9IHZhbHVlPXtpdGVtLnZhbHVlfSBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17dGhpcy50ZXh0U3R5bGV9PntpdGVtLnRleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICB7b3RoZXJJdGVtfVxyXG4gICAgICAgICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlck90aGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5vdGhlcn0+PFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBjc3M9e3RoaXMucm9vdENzc30gaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfS8+PC9kaXY+KTtcclxuICAgIH1cclxufVxyXG5cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAsIHByb3BzKTtcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25yYWRpb2dyb3VwLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW19IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25jb21tZW50XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25SYXRpbmdNb2RlbH0gZnJvbSBcIi4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmF0aW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYXRpbmdNb2RlbDsgfVxyXG4gICAgaGFuZGxlT25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgdmFsdWVzID0gW107XHJcbiAgICAgICAgdmFyIG1pblRleHQgPSB0aGlzLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvbiA/IHRoaXMucXVlc3Rpb24ubWluUmF0ZURlc2NyaXB0aW9uICsgXCIgXCIgOiBcIlwiO1xyXG4gICAgICAgIHZhciBtYXhUZXh0ID0gdGhpcy5xdWVzdGlvbi5tYXhSYXRlRGVzY3JpcHRpb24gPyBcIiBcIiArIHRoaXMucXVlc3Rpb24ubWF4UmF0ZURlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1pblRleHRWYWx1ZSA9IGkgPT0gMCA/IG1pblRleHQgOiBcIlwiO1xyXG4gICAgICAgICAgICB2YXIgbWF4VGV4dFZhbHVlID0gaSA9PSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSYXRlVmFsdWVzLmxlbmd0aCAtIDEgPyBtYXhUZXh0IDogXCJcIjtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5yZW5kZXJJdGVtKFwidmFsdWVcIiArIGksIHRoaXMucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXNbaV0sIG1pblRleHRWYWx1ZSwgbWF4VGV4dFZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5oYXNPdGhlciA/IHRoaXMucmVuZGVyT3RoZXIoKSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnJvb3R9PlxyXG4gICAgICAgICAgICAgICAge3ZhbHVlc31cclxuICAgICAgICAgICAgICAgIHtjb21tZW50fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oa2V5OiBzdHJpbmcsIGl0ZW06IEl0ZW1WYWx1ZSwgbWluVGV4dDogc3RyaW5nLCBtYXhUZXh0OiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jc3MuaXRlbTtcclxuICAgICAgICBpZiAoaXNDaGVja2VkKSBjbGFzc05hbWUgKz0gXCIgYWN0aXZlXCI7XHJcbiAgICAgICAgdmFyIG1pbiA9IG1pblRleHQgPyA8c3Bhbj57bWluVGV4dH08L3NwYW4+IDogbnVsbDtcclxuICAgICAgICB2YXIgbWF4ID0gbWF4VGV4dCA/IDxzcGFuPnttYXhUZXh0fTwvc3Bhbj4gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIHN0eWxlPXt7IGRpc3BsYXk6IFwibm9uZVwiIH19IG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX0gdmFsdWU9e2l0ZW0udmFsdWV9IGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9IGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgIHttaW59XHJcbiAgICAgICAgICAgIDxzcGFuPntpdGVtLnRleHR9PC9zcGFuPlxyXG4gICAgICAgICAgICB7bWF4fVxyXG4gICAgICAgICAgICA8L2xhYmVsPjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Mub3RoZXJ9PjxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gY3NzPXt0aGlzLnJvb3RDc3N9IGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX0vPjwvZGl2Pik7XHJcbiAgICB9XHJcbn1cclxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nLCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9ucmF0aW5nLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZWxlbWVudFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uVGV4dE1vZGVsfSBmcm9tIFwiLi4vcXVlc3Rpb25fdGV4dFwiO1xyXG5pbXBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlT25CbHVyID0gdGhpcy5oYW5kbGVPbkJsdXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25UZXh0TW9kZWwgeyByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25UZXh0TW9kZWw7IH1cclxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlci5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfHwgJycgfTtcclxuICAgIH1cclxuICAgIGhhbmRsZU9uQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBoYW5kbGVPbkJsdXIoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCAnJyB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKVxyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLmNzc30+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+KVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMuY3NzfSB0eXBlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZX0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IHNpemU9e3RoaXMucXVlc3Rpb24uc2l6ZX0gcGxhY2Vob2xkZXI9e3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJ9IG9uQmx1cj17dGhpcy5oYW5kbGVPbkJsdXJ9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfSAvPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25UZXh0LCBwcm9wcyk7XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9udGV4dC50c3giLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21haW4uc2Nzc1xuLy8gbW9kdWxlIGlkID0gNTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJQxZllZGNob3rDrVwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIkRhbMWhw61cIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJIb3Rvdm9cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiSmluw6Egb2Rwb3bEm8SPIChuYXBpxaF0ZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTdHJhbmEgezB9IHogezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJQcsWvemt1bXUgbmVvYnNhaHVqZSDFvsOhZG7DqSBvdMOhemt5LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJExJtrdWplbWUgemEgdnlwbG7Em27DrSBwcsWvemt1bXUhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIlByb2LDrWjDoSBuYcSNw610w6Fuw60gcHLFr3prdW11Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWeWJlci4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJPZHBvdsSbenRlIHByb3PDrW0gbmEgb3TDoXprdS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIHbFoWVjaG55IG90w6F6a3kuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiViB0b210byBwb2xpIGx6ZSB6YWRhdCBwb3V6ZSDEjcOtc2xhLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJaYWRlanRlIHByb3PDrW0gYWxlc3BvxYggezB9IHpuYWvFry5cIixcclxuICAgIHRleHRNYXhMZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIG3DqW7EmyBuZcW+IHswfSB6bmFrxa8uXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSBhIG3DqW7EmyBuZcW+IHsxfSB6bmFrxa8uXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlZ5cGzFiHRlIHByb3PDrW0gYWxlc3BvxYggezB9IMWZw6Fka8WvLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVnliZXJ0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB2YXJpYW50eS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIk5ldnliw61yZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IHZhcmlhbnQuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IHbEm3TFocOtIG5lYm8gcm92bm8gezF9IGEgbWVuxaHDrSBuZWJvIHJvdm5vIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCBtZW7FocOtIG5lYm8gcm92bm8gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiWmFkZWp0ZSBwcm9zw61tIHBsYXRub3UgZS1tYWlsb3ZvdSBhZHJlc3UuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiUG/FvmFkYXZlayB2csOhdGlsIGNoeWJ1ICd7MH0nLiB7MX1cIixcclxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJQb8W+YWRhdmVrIG5ldnLDoXRpbCBkYXRhIG5lYm8gY2VzdGEgamUgbmVwbGF0bsOhXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIlZlbGlrb3N0IHNvdWJvcnUgYnkgbmVtxJtsYSBiw710IHbEm3TFocOtIG5lxb4gezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlphZGVqdGUgcHJvc8OtbSBqaW5vdSBob2Rub3R1LlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJWw6HFoSBzb3Vib3Igc2UgbmFocsOhdsOhLiBaa3VzdGUgdG8gcHJvc8OtbSB6YSBuxJtrb2xpayBzZWt1bmQuXCIsXHJcbiAgICBhZGRSb3c6IFwiUMWZaWRhdCDFmcOhZGVrXCIsXHJcbiAgICByZW1vdmVSb3c6IFwiT2RzdHJhbml0XCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3pcIl0gPSBjemVjaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9jemVjaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBkYW5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlRpbGJhZ2VcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJWaWRlcmVcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJGw6ZyZGlnXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2lkZSB7MH0gYWYgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJEZXIgZXIgaW5nZW4gc3lubGlnZSBzcMO4cmdzbcOlbC5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWFuZ2UgdGFrIGZvciBkaW4gYmVzdmFyZWxzZSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiU3DDuHJnZXNrZW1hZXQgaGVudGVzIGZyYSBzZXJ2ZXJlbi4uLlwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJWYWxnZnJpdCBzdmFyLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWw6ZsZy4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWxldC5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJBbmdpdiBldCB0YWwuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIkFuZ2l2IG1pbmRzdCB7MH0gdGVnbi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IG1pbmRzdCAgezB9IHN2YXJtdWxpZ2hlZChlcikuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBmw6ZycmUgezB9IHN2YXJtdWxpZ2hlZGVyKGVyKS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIHN0w7hycmUgZW5kIHsxfSBvZyBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiQW5naXYgdmVubGlnc3QgZW4gZ3lsZGlnIGUtbWFpbCBhZHJlc3NlLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBtw6UgaWtrZSBvdmVyc3RpZ2UgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFuZ2l2IGVuIHbDpnJkaSBmb3IgZGl0IHZhbGdmcmllIHN2YXIuXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGFcIl0gPSBkYW5pc2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2RhbmlzaC50cyIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGR1dGNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJWb3JpZ2VcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJWb2xnZW5kZVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkFmc2x1aXRlblwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbmRlcmVcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IHZhbiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkVyIGlzIGdlZW4gemljaHRiYXJlIHBhZ2luYSBvZiB2cmFhZyBpbiBkZXplIHZyYWdlbmxpanN0XCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgb20gZGV6ZSB2cmFnZW5saWpzdCBpbiB0ZSB2dWxsZW5cIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRGUgdnJhZ2VubGlqc3QgaXMgYWFuIGhldCBsYWRlbi4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiS2llcy4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJHZWxpZXZlIGVlbiBhbnR3b29yZCBpbiB0ZSB2dWxsZW5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJIZXQgYW50d29vcmQgbW9ldCBlZW4gZ2V0YWwgemlqblwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJHZWxpZXZlIG1pbnN0ZW4gezB9IGthcmFrdGVycyBpbiB0ZSB2dWxsZW4uXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJHZWxpZXZlIG1pbmltdW0gezB9IGFudHdvb3JkZW4gdGUgc2VsZWN0ZXJlbi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIkdlbGlldmUgbmlldCBtZWVyIGRhbiB7MH0gYW50d29vcmRlbiB0ZSBzZWxlY3RlcmVuLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9IGVuIGtsZWluZXIgb2YgZ2VsaWprIGFhbiB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiR2VsaWV2ZSBlZW4gZ2VsZGlnIGUtbWFpbGFkcmVzIGluIHRlIHZ1bGxlbi5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRGUgZ3Jvb3R0ZSB2YW4gaGV0IGJlc3RhbmQgbWFnIG5pZXQgZ3JvdGVyIHppam4gZGFuIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJHZWxpZXZlIGhldCB2ZWxkICdBbmRlcmUnIGluIHRlIHZ1bGxlblwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIm5sXCJdID0gZHV0Y2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2R1dGNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGZpbm5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIkVkZWxsaW5lblwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlNldXJhYXZhXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiVmFsbWlzXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk11dSAoa3V2YWlsZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTaXZ1IHswfS97MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIlTDpHNzw6Qga3lzZWx5c3PDpCBlaSBvbGUgeWh0w6Rrw6TDpG4gbsOka3l2aWxsw6Qgb2xldmFhIHNpdnVhIHRhaSBreXN5bXlzdMOkLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJLaWl0b3Mga3lzZWx5eW4gdmFzdGFhbWlzZXN0YSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiS3lzZWx5w6QgbGFkYXRhYW4gcGFsdmVsaW1lbHRhLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWYWxpdHNlLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlZhc3RhYSBreXN5bXlrc2Vlbiwga2lpdG9zLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkFydm9uIHR1bGVlIG9sbGEgbnVtZWVyaW5lbi5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiT2xlIGh5dsOkIGphIHN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBtZXJra2nDpC5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIk9sZSBoeXbDpCBqYSB2YWxpdHNlIHbDpGhpbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJPbGUgaHl2w6QgamEgdmFsaXRzZSBlbmludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgdMOkeXR5eSBvbGxhIGVuZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfSBqYSB2w6RoZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyB0w6R5dHl5IG9sbGEgZW5lbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHTDpHl0eXkgb2xsYSB2w6RoZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlN5w7Z0w6QgdmFsaWRpIHPDpGhrw7Zwb3N0aW9zb2l0ZS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJPbGUgaHl2w6QgamEgc3nDtnTDpCBcXFwiTXV1IChrdXZhaWxlKVxcXCJcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmaVwiXSA9IGZpbm5pc2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHMiLCIvL0NyZWF0ZWQgb24gYmVoYWxmIGh0dHBzOi8vZ2l0aHViLmNvbS9GcmFuazEzXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBmcmVuY2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByXFx1MDBlOWNcXHUwMGU5ZGVudFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlN1aXZhbnRcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJUZXJtaW5lclwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBdXRyZSAocHJcXHUwMGU5Y2lzZXIpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gc3VyIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiSWwgbid5IGEgbmkgcGFnZSB2aXNpYmxlIG5pIHF1ZXN0aW9uIHZpc2libGUgZGFucyBjZSBxdWVzdGlvbm5haXJlXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIk1lcmNpIGQnYXZvaXIgclxcdTAwZTlwb25kdSBhdSBxdWVzdGlvbm5haXJlIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJMZSBxdWVzdGlvbm5haXJlIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJDaG9pc2lzc2V6Li4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIkxhIHJcXHUwMGU5cG9uc2UgXFx1MDBlMCBjZXR0ZSBxdWVzdGlvbiBlc3Qgb2JsaWdhdG9pcmUuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvdXRlcyBsZXMgbGlnbmVzIHNvbnQgb2JsaWdhdG9pcmVzXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiTGEgclxcdTAwZTlwb25zZSBkb2l0IFxcdTAwZWF0cmUgdW4gbm9tYnJlLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJNZXJjaSBkJ2VudHJlciBhdSBtb2lucyB7MH0gc3ltYm9sZXMuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzXFx1MDBlOWxlY3Rpb25uZXIgYXUgbW9pbnMgezB9clxcdTAwZTlwb25zZXMuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzXFx1MDBlOWxlY3Rpb25uZXIgYXUgcGx1cyB7MH1yXFx1MDBlOXBvbnNlcy5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiVm90cmUgclxcdTAwZTlwb25zZSAnezB9JyBkb2l0IFxcdTAwZWF0cmVzdXBcXHUwMGU5cmlldXJlIG91IFxcdTAwZTlnYWxlIFxcdTAwZTAgezF9IGV0IGluZlxcdTAwZTlyaWV1cmUgb3VcXHUwMGU5Z2FsZSBcXHUwMGUwIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJWb3RyZSByXFx1MDBlOXBvbnNlICd7MH0nIGRvaXQgXFx1MDBlYXRyZXN1cFxcdTAwZTlyaWV1cmUgb3UgXFx1MDBlOWdhbGUgXFx1MDBlMCB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVm90cmUgclxcdTAwZTlwb25zZSAnezB9JyBkb2l0IFxcdTAwZWF0cmVpbmZcXHUwMGU5cmlldXJlIG91IFxcdTAwZTlnYWxlIFxcdTAwZTAgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiTWVyY2kgZCdlbnRyZXIgdW5lIGFkcmVzc2UgbWFpbCB2YWxpZGUuXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkxhIHRhaWxsZSBkdSBmaWNoaWVyIG5lIGRvaXQgcGFzIGV4Y1xcdTAwZTlkZXIgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIk1lcmNpIGRlIHByXFx1MDBlOWNpc2VyIGxlIGNoYW1wICdBdXRyZScuXCJcclxufTtcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmclwiXSA9IGZyZW5jaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZ2VybWFuU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJadXLDvGNrXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiV2VpdGVyXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRmVydGlnXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2VpdGUgezB9IHZvbiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkVzIGdpYnQga2VpbmUgc2ljaHRiYXJlIEZyYWdlLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJWaWVsZW4gRGFuayBmw7xyIGRhcyBBdXNmw7xsbGVuIGRlcyBGcmFnZWJvZ2VucyFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRGVyIEZyYWdlYm9nZW4gd2lyZCB2b20gU2VydmVyIGdlbGFkZW4uLi5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQmVudXR6ZXJkZWZpbmllcnRlIEFudHdvcnQuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlfDpGhsZW4uLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiQml0dGUgYW50d29ydGVuIFNpZSBhdWYgZGllIEZyYWdlLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkRlciBXZXJ0IHNvbGx0ZSBlaW5lIFphaGwgc2Vpbi5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG1pbmRlc3RlbnMgezB9IFN5bWJvbGUuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIHswfSBWYXJpYW50ZW4uXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBuaWNodCBtZWhyIGFscyB7MH0gVmFyaWFudGVuLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyBzb2xsdGUgZ2xlaWNoIG9kZXIgZ3LDtsOfZXIgc2VpbiBhbHMgezF9IHVuZCBnbGVpY2ggb2RlciBrbGVpbmVyIGFscyB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgc29sbHRlIGdsZWljaCBvZGVyIGdyw7bDn2VyIHNlaW4gYWxzIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyBzb2xsdGUgZ2xlaWNoIG9kZXIga2xlaW5lciBhbHMgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgRW1haWwtQWRyZXNzZSBlaW4uXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkRpZSBEYXRlaWdyw7bDn2Ugc29sbCBuaWNodCBtZWhyIGFscyB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcnQgZsO8ciBJaHJlIGJlbnV0emVyZGVmaW5pZXJ0ZSBBbnR3b3J0IGVpbi5cIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkZVwiXSA9IGdlcm1hblN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwiLy9DcmVhdGVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2Vsb3NwYW5hZ2lvdGFraXNcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGdyZWVrU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCLOoM+Bzr/Ot86zzr/Pjc68zrXOvc6/XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwizpXPgM+MzrzOtc69zr9cIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCLOn867zr/Ous67zq7Pgc+Jz4POt1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCLOhs67zrvOvyAoz4DOsc+BzrHOus6xzrvPjiDOtM65zrXPhc66z4HOuc69zq/Pg8+EzrUpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwizqPOtc67zq/OtM6xIHswfSDOsc+Az4wgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCLOlM61zr0gz4XPgM6sz4HPh861zrkgzrrOsc68zq/OsSDOv8+BzrHPhM6uIM+DzrXOu86vzrTOsSDOriDOv8+BzrHPhM6uIM61z4HPjs+EzrfPg863IM+DzrUgzrHPhc+Ez4wgz4TOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLOlc+Fz4fOsc+BzrnPg8+Ezr/Pjc68zrUgzrPOuc6xIM+EzrfOvSDPg8+FzrzPgM67zq7Pgc+Jz4POtyDOsc+Fz4TOv8+FIM+Ezr/PhSDOtc+Bz4nPhM63zrzOsc+Ezr/Ou86/zrPOr86/z4UhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIs6kzr8gzrXPgc+Jz4TOt868zrHPhM6/zrvPjM6zzrnOvyDPhs6/z4HPhM+Ozr3Otc+EzrHOuSDOsc+Azr8gz4TOvyDOtM65zrHOus6/zrzOuc+Dz4TOri4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwizpXPgM65zrvOrc6+z4TOtS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrfOvSDOtc+Bz47PhM63z4POty5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4PPhM65z4IgzrXPgc+Jz4TOrs+DzrXOuc+CIM+DzrUgz4zOu861z4Igz4TOuc+CIM6zz4HOsc68zrzOrc+CLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIs6XIM+EzrnOvM6uIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrHPgc65zrjOvM65z4TOuc66zq4uXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPg8+NzrzOss6/zrvOsS5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM6zz4HOsc68zrzOrc+CLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Mz4fOuSDPgM6xz4HOsc+AzqzOvc+JIM6xz4DOvyB7MH0gz4DOsc+BzrHOu867zrHOs86tz4IuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIs6kzr8gJ3swfScgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6vz4POvyDOriDOvM61zrPOsc67z43PhM61z4HOvyDOsc+Azr8gz4TOvyB7MX0gzrrOsc65IM6vz4POvyDOriDOvM65zrrPgc+Mz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIs6kzr8gJ3swfScgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM61zrPOsc67z43PhM61z4HOvyDOriDOuc+Dzr8gzrzOtSDPhM6/IHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOuc66z4HPjM+EzrXPgc6/IM6uIM6vz4POvyDOsc+Azr8gz4TOvyB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzrzOuc6xIM6xz4DOv860zrXOus+Ezq4gzrTOuc61z43OuM+Fzr3Pg863IGUtbWFpbC5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM+Dz4bOrM67zrzOsSAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDOus61zr3OrCDOtM61zrTOv868zq3Ovc6xIM6uIM63IM65zrTPjM+EzrfPhM6xICfOvM6/zr3Ov8+AzqzPhM65L3BhdGgnIM61zq/Ovc6xzrkgzrXPg8+GzrHOu86tzrzOrc69zrdcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwizqTOvyDOvM6tzrPOtc64zr/PgiDOtM61zr0gzrzPgM6/z4HOtc6vIM69zrEgz4XPgM61z4HOss6tzr3Otc65IM+EzrEgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM63zr0gz4TOuc68zq4gzrPOuc6xIM+Ezr8gz4DOtc60zq/OvyAnzqzOu867zr8nLlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCLOpM6/IM6xz4HPh861zq/OvyDPg86xz4IgzrHOvc61zrLOsc6vzr3Otc65LiDOoM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61IM66zrHPgM6/zrnOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEgzrrOsc65IM60zr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrC5cIixcclxuICAgIGFkZFJvdzogXCLOoM+Bzr/Pg864zq7Ous63IM6zz4HOsc68zrzOrs+CXCIsXHJcbiAgICByZW1vdmVSb3c6IFwizpHPhs6xzq/Pgc61z4POt1wiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZ3JcIl0gPSBncmVla1N1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBwb2xpc2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIldzdGVjelwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIkRhbGVqXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiR290b3dlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIklubmEgb2Rwb3dpZWTFuiAod3Bpc3opXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3Ryb25hIHswfSB6IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiTmllIG1hIHdpZG9jem55Y2ggcHl0YcWELlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJEemnEmWt1amVteSB6YSB3eXBlxYJuaWVuaWUgYW5raWV0eSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiVHJ3YSB3Y3p5dHl3YW5pZSBhbmtpZXR5Li4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJXeWJpZXJ6Li4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB0byBweXRhbmllLlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgd3N6eXN0a2llIHB5dGFuaWEuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiVyB0eW0gcG9sdSBtb8W8bmEgd3Bpc2HEhyB0eWxrbyBsaWN6YnkuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyBjbyBuYWptbmllaiB7MH0gem5ha8Ozdy5cIixcclxuICAgIHRleHRNYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIG1uaWVqIG5pxbwgezB9IHpuYWvDs3cuXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyB3acSZY2VqIG5pxbwgezB9IGkgbW5pZWogbmnFvCB7MX0gem5ha8Ozdy5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiUHJvc3rEmSB1enVwZcWCbmnEhyBwcnp5bmFqbW5pZWogezB9IHdpZXJzenkuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgY28gbmFqbW5pZWogezB9IHBvenljamkuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgbmllIHdpxJljZWogbmnFvCB7MH0gcG96eWNqaS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX0gb3JheiBtbmllanN6YSBsdWIgcsOzd25hIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyBtbmllanN6YSBsdWIgcsOzd25hIHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIlByb3N6xJkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIGVtYWlsLlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIsW7xIVkYW5pZSB6d3LDs2NpxYJvIGLFgsSFZCAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwixbvEhWRhbmllIG5pZSB6d3LDs2NpxYJvIGRhbnljaCBhbGJvIMWbY2llxbxrYSBqZXN0IG5pZXByYXdpZMWCb3dhXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIlJvem1pYXIgcHJ6ZXPFgmFuZWdvIHBsaWt1IG5pZSBtb8W8ZSBwcnpla3JhY3phxIcgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgcG9kYcSHIGlubsSFIG9kcG93aWVkxbouXCIsXHJcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlRyd2EgcHJ6ZW5vc3plbmllIFR3b2plZ28gcGxpa3UsIHByb3N6xJkgc3Byw7Nib3dhxIcgcG9ub3duaWUgemEga2lsa2Egc2VrdW5kLlwiLFxyXG4gICAgYWRkUm93OiBcIkRvZGFqIHdpZXJzelwiLFxyXG4gICAgcmVtb3ZlUm93OiBcIlVzdcWEXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicGxcIl0gPSBwb2xpc2hTdXJ2ZXlTdHJpbmdzO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciByb21hbmlhblN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiVXJtxIN0b3JcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJGaW5hbGl6YXJlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkFsdHVsKHByZWNpemHFo2kpXCIsXHJcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaW4gezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJOdSBzdW50IMOubnRyZWLEg3JpIHBlbnRydSBhY2VzdCBjaGVzdGlvbmFyXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlbEgyBtdWzFo3VtaW0gcGVudHJ1IHRpbXB1bCBhY29yZGF0IVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJDaGVzdGlvbmFydWwgc2Ugw65uY2FyY8SDLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJBbGVnZcWjaS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJSxINzcHVuc3VsIGxhIGFjZWFzdMSDIMOubnRyZWJhcmUgZXN0ZSBvYmxpZ2F0b3JpdS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG9hdGUgcsSDc3B1bnN1cmlsZSBzdW50IG9ibGlnYXRvcmlpXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiUsSDc3B1bnN1bCB0cmVidWllIHPEgyBmaWUgbnVtZXJpYy5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNpIG1pbmltIHswfSBjYXJhY3RlcmUuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RlemkgbWluaW0gezB9IG9wxaNpdW5pLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiVHJlYnVpZSBzxIMgc2VsZWN0ZXppIG1heGltIHswfSBvcMWjaXVuaS5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9IMWfw64gbWFpIG1pYyBzYXUgZWdhbCBjdSB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtaWMgc2F1IGVnYWwgY2EgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlxaNpIG8gYWRyZXNhIGRlIGVtYWlsIHZhbGlkxIMuXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkRpbWVuc2l1bmVhIGZpxZ9pZXJ1bHVpIG51IHRyZWJ1aWUgc8SDIGRlcMSDxZ9lYXNjxIMgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlRyZWJ1aWUgc8SDIGNvbXBsZXRlemkgY8OibXB1bCAnQWx0dWwnLlwiXHJcbn07XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicm9cIl0gPSByb21hbmlhblN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcm9tYW5pYW4udHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgcnVzc2lhblN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9C10LVcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCLQk9C+0YLQvtCy0L5cIixcclxuICAgIHByb2dyZXNzVGV4dDogXCLQodGC0YDQsNC90LjRhtCwIHswfSDQuNC3IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdGCINC90Lgg0L7QtNC90L7Qs9C+INCy0L7Qv9GA0L7RgdCwLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQktCw0YEg0LfQsCDQt9Cw0L/QvtC70L3QtdC90LjQtSDQsNC90LrQtdGC0YshXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcItCX0LDQs9GA0YPQt9C60LAg0YEg0YHQtdGA0LLQtdGA0LAuLi5cIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQvtC1ICjQv9C+0LbQsNC70YPQudGB0YLQsCwg0L7Qv9C40YjQuNGC0LUpXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCLQktGL0LHRgNCw0YLRjC4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgS5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCLQntGC0LLQtdGCINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRh9C40YHQu9C+0LwuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRhdC+0YLRjyDQsdGLIHswfSDRgdC40LzQstC+0LvQvtCyLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0YXQvtGC0Y8g0LHRiyB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0L3QtSDQsdC+0LvQtdC1IHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0Lwg0LjQu9C4INCx0L7Qu9GM0YjQtSwg0YfQtdC8IHsxfSwg0Lgg0YDQsNCy0L3Ri9C8INC40LvQuCDQvNC10L3RjNGI0LUsINGH0LXQvCB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINGA0LDQstC90YvQvCDQuNC70Lgg0LHQvtC70YzRiNC1LCDRh9C10LwgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0Lwg0LjQu9C4INC80LXQvdGM0YjQtSwg0YfQtdC8IHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLLlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNCw0L3QvdGL0LUg0LIg0L/QvtC70LUgXFxcItCU0YDRg9Cz0L7QtVxcXCJcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJydVwiXSA9IHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIi8vQ3JlYXRlIGJ5IE1hdHRpYXMgQXNwbHVuZFxyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgc3dlZGlzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiRsO2cmVnw6VlbmRlXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiTsOkc3RhXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiRsOkcmRpZ1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbm5hdCAoYmVza3JpdilcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTaWRhIHswfSBhdiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkRldCBmaW5ucyBpbmdlbiBzeW5saWcgc2lkYSBlbGxlciBmcsOlZ2EgaSBlbmvDpHRlbi5cIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFjayBmw7ZyIGF0dCBkdSBnZW5vbWbDtnJ0IGVua8OkdGVuISFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRW5rw6R0ZW4gbGFkZGFzLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJWw6Rsai4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6VnYW4uXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdvcm5hIHDDpSBhbGxhIHJhZGVyLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIlbDpHJkZXQgc2thIHZhcmEgbnVtZXJpc2t0LlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJWYXIgdsOkbmxpZyBhbmdlIG1pbnN0IHswfSB0ZWNrZW4uXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlZhciB2w6RubGlnIGZ5bGwgaSBtaW5zdCB7MH0gcmFkZXIuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWYXIgdsOkbmxpZyB2w6RsaiDDpXRtaW5zdG9uZSB7MH0gdmFyaWFudGVyLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogaW50ZSBmbGVyIMOkbiB7MH0gdmFyaWFudGVyLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfSBzYW10IGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiVmFyIHbDpG5saWcgYW5nZSBlbiBrb3JyZWt0IGUtcG9zdGFkcmVzcy5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJGw7ZyZnLDpWdhbiByZXR1cm5lcmFkZSBmZWxldCAnezB9Jy4gezF9XCIsXHJcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiQW50aW5nZW4gcmV0dXJuZXJhZGUgZsO2cmZyw6VnYW4gaW5nZW4gZGF0YSBlbGxlciBzw6Ugw6RyIGVnZW5za2FwZW4gJ3BhdGgnIGludGUga29ycmVrdFwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdG9ybGVrZW4gZsOlciBlaiDDtnZlcnN0aWdhIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBhbmdlIGRldCBhbmRyYSB2w6RyZGV0LlwiLFxyXG4gICAgdXBsb2FkaW5nRmlsZTogXCJEaW4gZmlsIGxhZGRhcyB1cHAuIFZhciB2w6RubGlnIHbDpG50YSBuw6VncmEgc2VrdW5kZXIgb2NoIGbDtnJzw7ZrIHNlZGFuIGlnZW4uXCIsXHJcbiAgICBhZGRSb3c6IFwiTMOkZ2cgdGlsbCByYWRcIixcclxuICAgIHJlbW92ZVJvdzogXCJUYSBib3J0XCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wic3ZcIl0gPSBzd2VkaXNoU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgdHVya2lzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICAgICAgcGFnZVByZXZUZXh0OiBcIkdlcmlcIixcclxuICAgICAgICBwYWdlTmV4dFRleHQ6IFwixLBsZXJpXCIsXHJcbiAgICAgICAgY29tcGxldGVUZXh0OiBcIkFua2V0aSBUYW1hbWxhXCIsXHJcbiAgICAgICAgb3RoZXJJdGVtVGV4dDogXCJEacSfZXIgKGHDp8Sxa2xhecSxbsSxeilcIixcclxuICAgICAgICBwcm9ncmVzc1RleHQ6IFwiU2F5ZmEgezB9IC8gezF9XCIsXHJcbiAgICAgICAgZW1wdHlTdXJ2ZXk6IFwiQW5rZXR0ZSBnw7Zyw7xudMO8bGVuZWNlayBzYXlmYSB5YSBkYSBzb3J1IG1ldmN1dCBkZcSfaWwuXCIsXHJcbiAgICAgICAgY29tcGxldGluZ1N1cnZleTogXCJBbmtldGltaXppIHRhbWFtbGFkxLHEn8SxbsSxeiBpw6dpbiB0ZcWfZWtrw7xyIGVkZXJpei5cIixcclxuICAgICAgICBsb2FkaW5nU3VydmV5OiBcIkFua2V0IHN1bnVjdWRhbiB5w7xrbGVuaXlvciAuLi5cIixcclxuICAgICAgICBvcHRpb25zQ2FwdGlvbjogXCJTZcOnaW5peiAuLi5cIixcclxuICAgICAgICByZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gc29ydXlhIGNldmFwIHZlcmluaXpcIixcclxuICAgICAgICBudW1lcmljRXJyb3I6IFwiR2lyaWxlbiBkZcSfZXIgbnVtZXJpayBvbG1hbMSxZMSxclwiLFxyXG4gICAgICAgIHRleHRNaW5MZW5ndGg6IFwiRW4gYXogezB9IHNlbWJvbCBnaXJpbml6LlwiLFxyXG4gICAgICAgIG1pblJvd0NvdW50RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2F0xLFyxLEgZG9sZHVydW4uXCIsXHJcbiAgICAgICAgbWluU2VsZWN0RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2XDp2VuZcSfaSBzZcOnaW5pei5cIixcclxuICAgICAgICBtYXhTZWxlY3RFcnJvcjogXCJMw7x0ZmVuIHswfSBhZGV0dGVuIGZhemxhIHNlw6dtZXlpbml6LlwiLFxyXG4gICAgICAgIG51bWVyaWNNaW5NYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBtb3JlIHRoYW4gezF9IGFuZCBlcXVhbCBvciBsZXNzIHRoYW4gezJ9XCIsXHJcbiAgICAgICAgbnVtZXJpY01pbjogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgdmV5YSBiw7x5w7xrIG9sbWFsxLFkxLFyXCIsXHJcbiAgICAgICAgbnVtZXJpY01heDogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgeWEgZGEga8O8w6fDvGsgb2xtYWzEsWTEsXIuXCIsXHJcbiAgICAgICAgaW52YWxpZEVtYWlsOiBcIkzDvHRmZW4gZ2XDp2VybGkgYmlyIGVwb3N0YSBhZHJlc2kgZ2lyaW5pei5cIixcclxuICAgICAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGFsZWJpIMWfdSBoYXRhecSxIGTDtm5kw7wgJ3swfScuIHsxfVwiLFxyXG4gICAgICAgIHVybEdldENob2ljZXNFcnJvcjogXCJUYWxlcCBoZXJoYW5naSBiaXIgdmVyaSBkw7ZubWVkaSB5YSBkYSAncGF0aCcgw7Z6ZWxsacSfaSBoYXRhbMSxLlwiLFxyXG4gICAgICAgIGV4Y2VlZE1heFNpemU6IFwiRG9zeWEgYm95dXR1IHswfSBkZcSfZXJpbmkgZ2XDp2VtZXouXCIsXHJcbiAgICAgICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gZGnEn2VyIGRlxJ9lcmxlcmkgZ2lyaW5pei5cIixcclxuICAgICAgICB1cGxvYWRpbmdGaWxlOiBcIkRvc3lhbsSxeiB5w7xrbGVuaXlvci4gTMOcdGZlbiBiaXJrYcOnIHNhbml5ZSBiZWtsZXlpbiB2ZSB0ZWtyYXIgZGVuZXlpbi5cIixcclxuICAgICAgICBhZGRSb3c6IFwiU2F0xLFyIEVrbGVcIixcclxuICAgICAgICByZW1vdmVSb3c6IFwiS2FsZMSxclwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInRyXCJdID0gdHVya2lzaFN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNoZWNrYm94QmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdmFsLmluZGV4T2YodGhpcy5vdGhlckl0ZW0udmFsdWUpID49IDA7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiB2YWw7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWxbaV0gPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWxbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB2YWxbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBuZXdWYWxbaV0gPSB0aGlzLm90aGVySXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdmFsIHx8ICF2YWwubGVuZ3RoKSByZXR1cm4gdmFsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWxbaV0gPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldENvbW1lbnQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdWYWwgPSB2YWwuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYWxbaV0gPSB0aGlzLmdldENvbW1lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImNoZWNrYm94XCI7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNoZWNrYm94XCIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25DaGVja2JveE1vZGVsKFwiXCIpOyB9LCBcImNoZWNrYm94YmFzZVwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjaGVja2JveFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlczsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9jaGVja2JveC50cyIsImltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Db21tZW50TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwdWJsaWMgcm93czogbnVtYmVyID0gNDtcclxuICAgIHB1YmxpYyBjb2xzOiBudW1iZXIgPSA1MDtcclxuICAgIHByaXZhdGUgbG9jUGxhY2VIb2xkZXJWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge3JldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xyXG4gICAgfVxyXG4gICAgaXNFbXB0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuaXNFbXB0eSgpIHx8IHRoaXMudmFsdWUgPT0gXCJcIjtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiY29tbWVudFwiLCBbeyBuYW1lOiBcImNvbHM6bnVtYmVyXCIsIGRlZmF1bHQ6IDUwIH0sIHsgbmFtZTogXCJyb3dzOm51bWJlclwiLCBkZWZhdWx0OiA0IH0sIFxyXG4gICAge25hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCJ9XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2NvbW1lbnQudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uU2VsZWN0QmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIik7IH1cclxuICAgIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24obmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWU7fVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJkcm9wZG93blwiO1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0cnVlOyB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImRyb3Bkb3duXCIsIFt7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY09wdGlvbnNDYXB0aW9uXCJ9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwoXCJcIik7IH0sIFwic2VsZWN0YmFzZVwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlczsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9kcm9wZG93bi50cyIsImltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvciwgRXhjZWVkU2l6ZUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRmlsZU1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgcHJpdmF0ZSBzaG93UHJldmlld1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVXBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcmV2aWV3VmFsdWVMb2FkZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHB1YmxpYyBpbWFnZUhlaWdodDogc3RyaW5nO1xyXG4gICAgcHVibGljIGltYWdlV2lkdGg6IHN0cmluZztcclxuICAgIHB1YmxpYyBzdG9yZURhdGFBc1RleHQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbWF4U2l6ZTogbnVtYmVyO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJmaWxlXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNob3dQcmV2aWV3KCkgeyByZXR1cm4gdGhpcy5zaG93UHJldmlld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dQcmV2aWV3KHZhbHVlOiBib29sZWFuKSB7IHRoaXMuc2hvd1ByZXZpZXdWYWx1ZSA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgbG9hZEZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgIXRoaXMuc3VydmV5LnVwbG9hZEZpbGUodGhpcy5uYW1lLCBmaWxlLCB0aGlzLnN0b3JlRGF0YUFzVGV4dCwgZnVuY3Rpb24gKHN0YXR1czogc3RyaW5nKSB7IHNlbGYuaXNVcGxvYWRpbmcgPSBzdGF0dXMgPT0gXCJ1cGxvYWRpbmdcIjsgIH0pKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRGaWxlVmFsdWUoZmlsZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcHJldmlld1ZhbHVlOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgc2V0RmlsZVZhbHVlKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICBpZiAoIUZpbGVSZWFkZXIpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuc2hvd1ByZXZpZXcgJiYgIXRoaXMuc3RvcmVEYXRhQXNUZXh0KSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tGaWxlRm9yRXJyb3JzKGZpbGUpKSByZXR1cm47XHJcbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnNob3dQcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnByZXZpZXdWYWx1ZSA9IHNlbGYuaXNGaWxlSW1hZ2UoZmlsZSkgPyBmaWxlUmVhZGVyLnJlc3VsdCA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLnByZXZpZXdWYWx1ZUxvYWRlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdG9yZURhdGFBc1RleHQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBmaWxlUmVhZGVyLnJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xyXG4gICAgICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgICBpZiAodGhpcy5pc1VwbG9hZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBDdXN0b21FcnJvcihzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXBsb2FkaW5nRmlsZVwiKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tGaWxlRm9yRXJyb3JzKGZpbGU6IEZpbGUpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgZXJyb3JMZW5ndGggPSB0aGlzLmVycm9ycyA/IHRoaXMuZXJyb3JzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5tYXhTaXplID4gMCAmJiBmaWxlLnNpemUgPiB0aGlzLm1heFNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgRXhjZWVkU2l6ZUVycm9yKHRoaXMubWF4U2l6ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3JMZW5ndGggIT0gdGhpcy5lcnJvcnMubGVuZ3RoIHx8IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNGaWxlSW1hZ2UoZmlsZTogRmlsZSkge1xyXG4gICAgICAgIGlmICghZmlsZSB8fCAhZmlsZS50eXBlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHN0ciA9IGZpbGUudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHJldHVybiBzdHIuaW5kZXhPZihcImltYWdlXCIpID09IDA7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImZpbGVcIiwgW1wic2hvd1ByZXZpZXc6Ym9vbGVhblwiLCBcImltYWdlSGVpZ2h0XCIsIFwiaW1hZ2VXaWR0aFwiLCBcInN0b3JlRGF0YUFzVGV4dDpib29sZWFuXCIsIFwibWF4U2l6ZTpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJmaWxlXCIsIChuYW1lKSA9PiB7IHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9maWxlLnRzIiwiaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSHRtbE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25CYXNlIHtcclxuICAgIHByaXZhdGUgbG9jSHRtbFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY0h0bWxWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHRtbFwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY0h0bWwudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBodG1sKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NIdG1sLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jSHRtbFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZEh0bWwoKSB7IHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnByb2Nlc3NIdG1sKHRoaXMuaHRtbCkgOiB0aGlzLmh0bWw7IH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiaHRtbFwiLCBbe25hbWU6XCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIn1dLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25iYXNlXCIpO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImh0bWxcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2h0bWwudHMiLCJpbXBvcnQge0Jhc2V9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSAnLi9zdXJ2ZXlTdHJpbmdzJztcclxuaW1wb3J0IHtDdXN0b21FcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4RGF0YSB7XHJcbiAgICBvbk1hdHJpeFJvd0NoYW5nZWQocm93OiBNYXRyaXhSb3dNb2RlbCk7XHJcbn1cclxuZXhwb3J0IGNsYXNzIE1hdHJpeFJvd01vZGVsIGV4dGVuZHMgQmFzZSB7XHJcbiAgICBwcml2YXRlIGRhdGE6IElNYXRyaXhEYXRhO1xyXG4gICAgcHJvdGVjdGVkIHJvd1ZhbHVlOiBhbnk7IFxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBhbnksIHB1YmxpYyB0ZXh0OiBzdHJpbmcsIHB1YmxpYyBmdWxsTmFtZTogc3RyaW5nLCBkYXRhOiBJTWF0cml4RGF0YSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLnJvd1ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5yb3dWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHRoaXMuZGF0YS5vbk1hdHJpeFJvd0NoYW5nZWQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24gaW1wbGVtZW50cyBJTWF0cml4RGF0YSB7XHJcbiAgICBwcml2YXRlIGNvbHVtbnNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgcm93c1ZhbHVlOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGdlbmVyYXRlZFZpc2libGVSb3dzOiBBcnJheTxNYXRyaXhSb3dNb2RlbD47XHJcbiAgICBwdWJsaWMgaXNBbGxSb3dSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMucm93c1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtYXRyaXhcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzUm93cygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb3dzVmFsdWUubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICAgIGdldCBjb2x1bW5zKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5jb2x1bW5zVmFsdWU7IH1cclxuICAgIHNldCBjb2x1bW5zKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jb2x1bW5zVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIGdldCByb3dzKCk6IEFycmF5PGFueT4geyByZXR1cm4gdGhpcy5yb3dzVmFsdWU7IH1cclxuICAgIHNldCByb3dzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5yb3dzVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4Um93TW9kZWw+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeFJvd01vZGVsPigpO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSB2YWwgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucm93c1tpXS52YWx1ZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMucm93c1tpXS52YWx1ZSwgdGhpcy5yb3dzW2ldLnRleHQsIHRoaXMubmFtZSArICdfJyArIHRoaXMucm93c1tpXS52YWx1ZS50b1N0cmluZygpLCB2YWxbdGhpcy5yb3dzW2ldLnZhbHVlXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KG51bGwsIFwiXCIsIHRoaXMubmFtZSwgdmFsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSByZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcclxuICAgICAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3JJblJvd3MoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBDdXN0b21FcnJvcihzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRJbkFsbFJvd3NFcnJvclwiKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaGFzRXJyb3JJblJvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQWxsUm93UmVxdWlyZWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc1ZhbHVlc0luQWxsUm93cygpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XHJcbiAgICAgICAgaWYgKCFyb3dzKSByb3dzID0gdGhpcy52aXNpYmxlUm93cztcclxuICAgICAgICBpZiAoIXJvd3MpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcm93c1tpXS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KG5hbWU6IGFueSwgdGV4dDogc3RyaW5nLCBmdWxsTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogTWF0cml4Um93TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4Um93TW9kZWwobmFtZSwgdGV4dCwgZnVsbE5hbWUsIHRoaXMsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nIHx8ICEodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgfHwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1swXS52YWx1ZSA9IHZhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJvd1ZhbCA9IHZhbFtyb3cubmFtZV0gPyB2YWxbcm93Lm5hbWVdIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udmFsdWUgPSByb3dWYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lNYXRyaXhEYXRhXHJcbiAgICBvbk1hdHJpeFJvd0NoYW5nZWQocm93OiBNYXRyaXhSb3dNb2RlbCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNSb3dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWUocm93LnZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlW3Jvdy5uYW1lXSA9IHJvdy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4XCIsIFt7IG5hbWU6IFwiY29sdW1uczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNvbHVtbnMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNvbHVtbnMgPSB2YWx1ZTsgfX0sXHJcbiAgICB7IG5hbWU6IFwicm93czppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLnJvd3MpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLnJvd3MgPSB2YWx1ZTsgfSB9LFxyXG4gICAgXCJpc0FsbFJvd1JlcXVpcmVkOmJvb2xlYW5cIl0sICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwobmFtZSk7IHEucm93cyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Um93czsgcS5jb2x1bW5zID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4LnRzIiwiaW1wb3J0IHtRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxyXG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXHJcbiAgICBJTWF0cml4RHJvcGRvd25EYXRhXHJcbn0gZnJvbSBcIi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IGFueSwgcHVibGljIHRleHQ6IHN0cmluZywgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKGRhdGEsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcm93TmFtZSgpIHsgcmV0dXJuIHRoaXMubmFtZTsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGltcGxlbWVudHMgSU1hdHJpeERyb3Bkb3duRGF0YSB7XHJcbiAgICBwcml2YXRlIHJvd3NWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5yb3dzVmFsdWUgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd3MoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLnJvd3NWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCByb3dzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5yb3dzVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbD4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbD4oKTtcclxuICAgICAgICBpZiAoIXRoaXMucm93cyB8fCB0aGlzLnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSB2YWwgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucm93c1tpXS52YWx1ZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMucm93c1tpXS52YWx1ZSwgdGhpcy5yb3dzW2ldLnRleHQsIHZhbFt0aGlzLnJvd3NbaV0udmFsdWVdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KG5hbWU6IGFueSwgdGV4dDogc3RyaW5nLCB2YWx1ZTogYW55KTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blJvd01vZGVsKG5hbWUsIHRleHQsIHRoaXMsIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm1hdHJpeGRyb3Bkb3duXCIsIFt7IG5hbWU6IFwicm93czppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLnJvd3MpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLnJvd3MgPSB2YWx1ZTsgfX1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbChcIlwiKTsgfSwgXCJtYXRyaXhkcm9wZG93bmJhc2VcIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbChuYW1lKTsgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdOyBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENvbHVtczsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50cyIsImltcG9ydCB7UXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcclxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBJTWF0cml4RHJvcGRvd25EYXRhXHJcbn0gZnJvbSBcIi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7U3VydmV5RXJyb3J9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEeW5hbWljUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKGRhdGEsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcm93TmFtZSgpIHsgcmV0dXJuIFwicm93XCIgKyB0aGlzLmluZGV4OyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcclxuICAgIHN0YXRpYyBNYXhSb3dDb3VudCA9IDEwMDtcclxuICAgIHByaXZhdGUgcm93Q291bnRlciA9IDA7XHJcbiAgICBwcml2YXRlIHJvd0NvdW50VmFsdWU6IG51bWJlciA9IDI7XHJcbiAgICBwcml2YXRlIGxvY0FkZFJvd1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1JlbW92ZVJvd1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwdWJsaWMgbWluUm93Q291bnQgPSAwO1xyXG4gICAgcHVibGljIHJvd0NvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jQWRkUm93VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUmVtb3ZlUm93VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtYXRyaXhkeW5hbWljXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd0NvdW50KCkgeyByZXR1cm4gdGhpcy5yb3dDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJvd0NvdW50KHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbCA8IDAgfHwgdmFsID4gUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwuTWF4Um93Q291bnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiB2YWwpIHtcclxuICAgICAgICAgICAgdmFyIHFWYWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICBxVmFsLnNwbGljZSh2YWwpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gcVZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yb3dDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUm93KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhudWxsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm93Q291bnQrKztcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmVSb3coaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dDb3VudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzICYmIGluZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgdmFsLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuZGVsZXRlUm93VmFsdWUodmFsLCBudWxsKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudC0tO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBhZGRSb3dUZXh0KCkgeyByZXR1cm4gdGhpcy5sb2NBZGRSb3dUZXh0LnRleHQgPyB0aGlzLmxvY0FkZFJvd1RleHQudGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJhZGRSb3dcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgYWRkUm93VGV4dCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jQWRkUm93VGV4dC50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jQWRkUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jQWRkUm93VGV4dFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlbW92ZVJvd1RleHQoKSB7IHJldHVybiB0aGlzLmxvY1JlbW92ZVJvd1RleHQudGV4dCA/IHRoaXMubG9jUmVtb3ZlUm93VGV4dC50ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZVJvd1wiKTsgfVxyXG4gICAgcHVibGljIHNldCByZW1vdmVSb3dUZXh0KHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NSZW1vdmVSb3dUZXh0LnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NSZW1vdmVSb3dUZXh0KCkgeyByZXR1cm4gdGhpcy5sb2NSZW1vdmVSb3dUZXh0VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgICByZXR1cm4gZmFsc2U7ICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNhY2hlZFZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgJiYgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGggPT0gdGhpcy5yb3dDb3VudCkgcmV0dXJuIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3M7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xyXG4gICAgICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgICBpZiAodGhpcy5oYXNFcnJvckluUm93cygpKSB7XHJcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBDdXN0b21FcnJvcihzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWluUm93Q291bnRFcnJvclwiKVtcImZvcm1hdFwiXSh0aGlzLm1pblJvd0NvdW50KSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaGFzRXJyb3JJblJvd3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluUm93Q291bnQgPD0gMCB8fCAhdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcclxuICAgICAgICB2YXIgc2V0Um93Q291bnQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgcm93SW5kZXgrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tyb3dJbmRleF07XHJcbiAgICAgICAgICAgIGlmICghcm93LmlzRW1wdHkpIHNldFJvd0NvdW50Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZXRSb3dDb3VudCA8IHRoaXMubWluUm93Q291bnQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4RHluYW1pY1Jvd01vZGVsPigpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvd0NvdW50ID09PSAwKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KHZhbCwgaSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3codmFsdWU6IGFueSk6IE1hdHJpeER5bmFtaWNSb3dNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhEeW5hbWljUm93TW9kZWwodGhpcy5yb3dDb3VudGVyICsrLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmV3Um93Q291bnQgPSB2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgaWYgKG5ld1Jvd0NvdW50IDw9IHRoaXMucm93Q291bnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSBuZXdSb3dDb3VudDtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy52aXNpYmxlUm93cztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoY3VyVmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1clZhbHVlO1xyXG4gICAgICAgIGlmICghcmVzdWx0KSByZXN1bHQgPSBbXTtcclxuICAgICAgICB2YXIgciA9IFtdO1xyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gdGhpcy5yb3dDb3VudCkgcmVzdWx0LnNwbGljZSh0aGlzLnJvd0NvdW50IC0gMSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGRlbGV0ZVJvd1ZhbHVlKG5ld1ZhbHVlOiBhbnksIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBhbnkge1xyXG4gICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhuZXdWYWx1ZVtpXSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkgPyBudWxsIDogbmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb3dWYWx1ZUJ5SW5kZXgocXVlc3Rpb25WYWx1ZTogYW55LCBpbmRleDogbnVtYmVyKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPj0gMCAmJiBpbmRleCA8IHF1ZXN0aW9uVmFsdWUubGVuZ3RoID8gcXVlc3Rpb25WYWx1ZVtpbmRleF0gOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldFJvd1ZhbHVlKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHF1ZXN0aW9uVmFsdWU6IGFueSwgY3JlYXRlOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd1ZhbHVlQnlJbmRleChxdWVzdGlvblZhbHVlLCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmluZGV4T2Yocm93KSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhkeW5hbWljXCIsIFt7IG5hbWU6IFwicm93Q291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDIgfSwgeyBuYW1lOiBcIm1pblJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwIH0sXHJcbiAgICAgICAgeyBuYW1lOiBcImFkZFJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0FkZFJvd1RleHRcIiB9LCB7IG5hbWU6IFwicmVtb3ZlUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVtb3ZlUm93VGV4dFwiIH1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsKFwiXCIpOyB9LCBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiKTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChuYW1lKTsgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdOyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLmFkZERlZmF1bHRDb2x1bW5zKHEpOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJpbXBvcnQge0Jhc2V9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciwgVmFsaWRhdG9yUnVubmVyfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0Fuc3dlclJlcXVpcmVkRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTXVsdGlwbGVUZXh0RGF0YSB7XHJcbiAgICBnZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnk7XHJcbiAgICBzZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpO1xyXG4gICAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nO1xyXG4gICAgZ2V0TG9jYWxlKCk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJVmFsaWRhdG9yT3duZXIsIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICAgIHByaXZhdGUgZGF0YTogSU11bHRpcGxlVGV4dERhdGE7XHJcbiAgICBwcml2YXRlIGxvY1RpdGxlVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHB1YmxpYyBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+ID0gbmV3IEFycmF5PFN1cnZleVZhbGlkYXRvcj4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogYW55ID0gbnVsbCwgdGl0bGU6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJtdWx0aXBsZXRleHRpdGVtXCI7XHJcbiAgICB9XHJcbiAgICBzZXREYXRhKGRhdGE6IElNdWx0aXBsZVRleHREYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0ID8gdGhpcy5sb2NUaXRsZS50ZXh0IDogdGhpcy5uYW1lOyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NUaXRsZS50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKSB7IHJldHVybiB0aGlzLmxvY1RpdGxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgaWYodGhpcy5pc1JlcXVpcmVkICYmIHRoaXMuZGF0YSkgcmVzID0gdGhpcy5kYXRhLmdldElzUmVxdWlyZWRUZXh0KCkgKyAnICcgKyByZXM7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKHRoaXMubmFtZSkgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xyXG4gICAgfVxyXG4gICAgLy9JVmFsaWRhdG9yT3duZXJcclxuICAgIHB1YmxpYyBnZXRWYWxpZGF0b3JUaXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50aXRsZTsgfVxyXG4gICAgLy9JTG9jYWxpemFibGVPd25lclxyXG4gICAgcHVibGljIGdldExvY2FsZSgpIHsgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRMb2NhbGUoKSA6IFwiXCI7fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIGltcGxlbWVudHMgSU11bHRpcGxlVGV4dERhdGEge1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAxO1xyXG4gICAgY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBwdWJsaWMgaXRlbVNpemU6IG51bWJlciA9IDI1O1xyXG4gICAgcHJpdmF0ZSBpdGVtc1ZhbHVlczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiA9IG5ldyBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KCk7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtc092ZXJyaWRkZW5NZXRob2RzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIm11bHRpcGxldGV4dFwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpdGVtcygpOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+IHsgcmV0dXJuIHRoaXMuaXRlbXNWYWx1ZXM7IH1cclxuICAgIHB1YmxpYyBzZXQgaXRlbXModmFsdWU6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4pIHtcclxuICAgICAgICB0aGlzLml0ZW1zVmFsdWVzID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtc092ZXJyaWRkZW5NZXRob2RzKCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkSXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlVGV4dEl0ZW0obmFtZSwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0SXRlbXNPdmVycmlkZGVuTWV0aG9kcygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5pdGVtc1ZhbHVlcy5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLnNldERhdGEoc2VsZik7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLml0ZW1zVmFsdWVzLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBNdWx0aXBsZVRleHRJdGVtTW9kZWxbXSk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbFtdIHtcclxuICAgICAgICAgICAgaWYoIXN0YXJ0KSBzdGFydCA9IDA7XHJcbiAgICAgICAgICAgIGlmKCFkZWxldGVDb3VudCkgZGVsZXRlQ291bnQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHNlbGYuaXRlbXNWYWx1ZXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5zZXREYXRhKHNlbGYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zW2ldLnZhbHVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAxIHx8IHZhbHVlID4gNCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY29sQ291bnRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFJvd3MoKTogQXJyYXk8YW55PiB7XHJcbiAgICAgICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcclxuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXS5wdXNoKGl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHN1cGVyLm9uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1WYWx1ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVUZXh0SXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKG5hbWUsIHRpdGxlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkl0ZW1WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiAodGhpcy5pdGVtc1tpXS5uYW1lIGluIHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVmFsdWUgPSB0aGlzLnZhbHVlW3RoaXMuaXRlbXNbaV0ubmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5vblZhbHVlQ2hhbmdlZChpdGVtVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBydW5WYWxpZGF0b3JzKCk6IFN1cnZleUVycm9yIHtcclxuICAgICAgICB2YXIgZXJyb3IgPSBzdXBlci5ydW5WYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHJldHVybiBlcnJvcjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgVmFsaWRhdG9yUnVubmVyKCkucnVuKHRoaXMuaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXMgPSBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICBpZighcmVzKSByZXMgPSB0aGlzLmhhc0Vycm9ySW5JdGVtcyhmaXJlQ2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzRXJyb3JJbkl0ZW1zKGZpcmVDYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGlmKGl0ZW0uaXNSZXF1aXJlZCAmJiAhaXRlbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgQW5zd2VyUmVxdWlyZWRFcnJvcigpKTtcclxuICAgICAgICAgICAgICAgIGlmKGZpcmVDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vSU11bHRpcGxlVGV4dERhdGFcclxuICAgIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVbbmFtZV07XHJcbiAgICB9XHJcbiAgICBzZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld1ZhbHVlW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGdldElzUmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm11bHRpcGxldGV4dGl0ZW1cIiwgW1wibmFtZVwiLCBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLCB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCJ9LCBcclxuICAgIHsgbmFtZTogXCJ0aXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LCB7IG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIgfV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKFwiXCIpOyB9KTtcclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtdWx0aXBsZXRleHRcIiwgW3sgbmFtZTogXCIhaXRlbXM6dGV4dGl0ZW1zXCIsIGNsYXNzTmFtZTogXCJtdWx0aXBsZXRleHRpdGVtXCIgfSxcclxuICAgICAgICB7IG5hbWU6IFwiaXRlbVNpemU6bnVtYmVyXCIsIGRlZmF1bHQ6IDI1IH0sIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMSwgY2hvaWNlczogWzEsIDIsIDMsIDRdIH1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm11bHRpcGxldGV4dFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKG5hbWUpOyBxLmFkZEl0ZW0oXCJ0ZXh0MVwiKTsgcS5hZGRJdGVtKFwidGV4dDJcIik7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNoZWNrYm94QmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJyYWRpb2dyb3VwXCI7XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRydWU7IH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInJhZGlvZ3JvdXBcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChcIlwiKTsgfSwgXCJjaGVja2JveGJhc2VcIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwobmFtZSk7IHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlczsgcmV0dXJuIHE7fSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3JhZGlvZ3JvdXAudHMiLCJpbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UmF0ZVZhbHVlczogSXRlbVZhbHVlW10gPSBbXTtcclxuICAgIHByaXZhdGUgcmF0ZXM6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIGxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jTWF4UmF0ZURlc2NyaXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG5cclxuICAgIHJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMucmF0ZXMgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJhdGVWYWx1ZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLnJhdGVzOyB9XHJcbiAgICBzZXQgcmF0ZVZhbHVlcyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKHRoaXMucmF0ZXMsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZpc2libGVSYXRlVmFsdWVzKCk6IEl0ZW1WYWx1ZVtdIHtcclxuICAgICAgICBpZiAodGhpcy5yYXRlVmFsdWVzLmxlbmd0aCA+IDApIHJldHVybiB0aGlzLnJhdGVWYWx1ZXM7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXN0aW9uUmF0aW5nTW9kZWwuZGVmYXVsdFJhdGVWYWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcInJhdGluZ1wiO1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbWluUmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY01pblJhdGVEZXNjcmlwdGlvbi50ZXh0O31cclxuICAgIHB1YmxpYyBzZXQgbWluUmF0ZURlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb24udGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jTWluUmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb25WYWx1ZTt9O1xyXG4gICAgcHVibGljIGdldCBtYXhSYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jTWF4UmF0ZURlc2NyaXB0aW9uLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBtYXhSYXRlRGVzY3JpcHRpb24odmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvbi50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NNYXhSYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge3JldHVybiB0aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlO307XHJcbn1cclxuSXRlbVZhbHVlLnNldERhdGEoUXVlc3Rpb25SYXRpbmdNb2RlbC5kZWZhdWx0UmF0ZVZhbHVlcywgWzEsIDIsIDMsIDQsIDVdKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInJhdGluZ1wiLCBbXCJoYXNDb21tZW50OmJvb2xlYW5cIiwgeyBuYW1lOiBcInJhdGVWYWx1ZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5yYXRlVmFsdWVzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5yYXRlVmFsdWVzID0gdmFsdWU7IH19LFxyXG4gICAge25hbWU6IFwibWluUmF0ZURlc2NyaXB0aW9uXCIsIGFsdGVybmF0aXZlTmFtZTogXCJtaW5pbnVtUmF0ZURlc2NyaXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5SYXRlRGVzY3JpcHRpb25cIn0sIFxyXG4gICAge25hbWU6IFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsIGFsdGVybmF0aXZlTmFtZTogXCJtYXhpbXVtUmF0ZURlc2NyaXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhSYXRlRGVzY3JpcHRpb25cIn1dLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYXRpbmdcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ01vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fcmF0aW5nLnRzIiwiaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHB1YmxpYyBzaXplOiBudW1iZXIgPSAyNTtcclxuICAgIHB1YmxpYyBpbnB1dFR5cGU6IHN0cmluZyA9IFwidGV4dFwiO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcInRleHRcIjtcclxuICAgIH1cclxuICAgIGlzRW1wdHkoKTogYm9vbGVhbiB7ICByZXR1cm4gc3VwZXIuaXNFbXB0eSgpIHx8IHRoaXMudmFsdWUgPT0gXCJcIjsgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7cmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuY29ycmVjdFZhbHVlVHlwZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNvcnJlY3RWYWx1ZVR5cGUobmV3VmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFuZXdWYWx1ZSkgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlucHV0VHlwZSA9PSBcIm51bWJlclwiIHx8IHRoaXMuaW5wdXRUeXBlID09IFwicmFuZ2VcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc051bWJlcihuZXdWYWx1ZSkgPyBwYXJzZUZsb2F0KG5ld1ZhbHVlKSA6IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNOdW1iZXIodmFsdWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSAmJiBpc0Zpbml0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJ0ZXh0XCIsIFt7IG5hbWU6IFwiaW5wdXRUeXBlXCIsIGRlZmF1bHQ6IFwidGV4dFwiLCBjaG9pY2VzOiBbXCJjb2xvclwiLCBcImRhdGVcIiwgXCJkYXRldGltZVwiLCBcImRhdGV0aW1lLWxvY2FsXCIsIFwiZW1haWxcIiwgXCJtb250aFwiLCBcIm51bWJlclwiLCBcInBhc3N3b3JkXCIsIFwicmFuZ2VcIiwgXCJ0ZWxcIiwgXCJ0ZXh0XCIsIFwidGltZVwiLCBcInVybFwiLCBcIndlZWtcIl0gfSxcclxuICAgIHsgbmFtZTogXCJzaXplOm51bWJlclwiLCBkZWZhdWx0OiAyNSB9LCB7bmFtZTogXCJwbGFjZUhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2VIb2xkZXJcIn1dLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblxyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInRleHRcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3RleHQudHMiLCJpbXBvcnQge0Jhc2V9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4vc3VydmV5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93TW9kZWwgZXh0ZW5kcyBCYXNlICB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1cnZleUVsZW1lbnROYW1lID0gXCJ3aW5kb3dTdXJ2ZXlKU1wiO1xyXG4gICAgc3VydmV5VmFsdWU6IFN1cnZleU1vZGVsO1xyXG4gICAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBpc1Nob3dpbmdWYWx1ZTogYm9vbGVhbjtcclxuICAgIGlzRXhwYW5kZWRWYWx1ZTogYm9vbGVhbjtcclxuICAgIHRpdGxlVmFsdWU6IHN0cmluZztcclxuICAgIHRlbXBsYXRlVmFsdWU6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSB0aGlzLmNyZWF0ZVN1cnZleShqc29uT2JqKTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKSA6IHN0cmluZyB7IHJldHVybiBcIndpbmRvd1wiIH1cclxuICAgIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNTaG93aW5nKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1Nob3dpbmdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc0V4cGFuZGVkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGVWYWx1ZSA/IHRoaXMudGl0bGVWYWx1ZSA6IHRoaXMuc3VydmV5LnRpdGxlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy50aXRsZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBleHBhbmQoKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjb2xsYXBzZSgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3VydmV5TW9kZWwoanNvbk9iailcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5V2luZG93LnRzIiwiaW1wb3J0IHtCYXNlLCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xyXG4gICAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcclxuICAgIHN0YXRpYyBnZXQgb3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGlmIChUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgICAgIFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuICF2YWx1ZTsgfSxcclxuICAgICAgICAgICAgbm90ZW1wdHk6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gISghdmFsdWUpOyB9LFxyXG4gICAgICAgICAgICBlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBub3RlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtcImluZGV4T2ZcIl0gJiYgdmFsdWUuaW5kZXhPZihleHBlY3RlZFZhbHVlKSA+IC0xOyB9LFxyXG4gICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiAhdmFsdWUgfHwgIXZhbHVlW1wiaW5kZXhPZlwiXSB8fCB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID09IC0xOyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTsgfSxcclxuICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7IH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcFZhbHVlOiBzdHJpbmcgPSBcImVxdWFsXCI7XHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm9wVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFUcmlnZ2VyLm9wZXJhdG9yc1t2YWx1ZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLm9wVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjaGVjayh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKFRyaWdnZXIub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHZhbHVlLCB0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU3VjY2VzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlUcmlnZ2VyT3duZXIge1xyXG4gICAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcclxuICAgIGRvQ29tcGxldGUoKTtcclxuICAgIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBvd25lcjogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldE93bmVyKG93bmVyOiBJU3VydmV5VHJpZ2dlck93bmVyKSB7XHJcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiBmYWxzZTsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclZpc2libGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidmlzaWJsZXRyaWdnZXJcIjsgfVxyXG4gICAgcHJvdGVjdGVkIG9uU3VjY2VzcygpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1TdWNjZXNzKTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHsgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1GYWlsdXJlKTsgfVxyXG4gICAgcHJpdmF0ZSBvblRyaWdnZXIoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMub3duZXIuZ2V0T2JqZWN0cyh0aGlzLnBhZ2VzLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZ1bmMob2JqZWN0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7IGl0ZW0udmlzaWJsZSA9IHRydWU7IH1cclxuICAgIHByb3RlY3RlZCBvbkl0ZW1GYWlsdXJlKGl0ZW06IGFueSkgeyBpdGVtLnZpc2libGUgPSBmYWxzZTsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJjb21wbGV0ZXRyaWdnZXJcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkgeyBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5kb0NvbXBsZXRlKCk7IH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNldFZhbHVlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XHJcbiAgICBwdWJsaWMgc2V0VG9OYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2V0VmFsdWU6IGFueTtcclxuICAgIHB1YmxpYyBpc1ZhcmlhYmxlOiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInNldHZhbHVldHJpZ2dlclwiOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5zZXRWYWx1ZSwgdGhpcy5pc1ZhcmlhYmxlKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRyaWdnZXJcIiwgW1wib3BlcmF0b3JcIiwgXCIhdmFsdWVcIl0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5dHJpZ2dlclwiLCBbXCIhbmFtZVwiXSwgbnVsbCwgXCJ0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidmlzaWJsZXRyaWdnZXJcIiwgW1wicGFnZXNcIiwgXCJxdWVzdGlvbnNcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjb21wbGV0ZXRyaWdnZXJcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUoKTsgfSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2V0dmFsdWV0cmlnZ2VyXCIsIFtcIiFzZXRUb05hbWVcIiwgXCJzZXRWYWx1ZVwiLCBcImlzVmFyaWFibGU6Ym9vbGVhblwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyaWdnZXIudHMiLCJ2YXIgd2Via2l0UmVnRXhwID0gLyh3ZWJraXQpWyBcXC9dKFtcXHcuXSspLyxcclxuICAgIGllUmVnRXhwID0gLyhtc2llKSAoXFxkezEsMn1cXC5cXGQpLyxcclxuICAgIGllMTFSZWdFeHAgPSAvKHRyaWRlbnQpLipydjooXFxkezEsMn1cXC5cXGQpLyxcclxuICAgIG1zRWRnZSA9IC8oZWRnZSlcXC8oKFxcZCspP1tcXHdcXC5dKykvLFxyXG4gICAgbW96aWxsYVJlZ0V4cCA9IC8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspKS87XHJcbnZhciBicm93c2VyRnJvbVVBID0gZnVuY3Rpb24odWEpIHtcclxuICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTtcclxuICAgIHZhciByZXN1bHQ6IHsgbXNpZT86IGJvb2xlYW4sIGZpcmVmb3g/OiBib29sZWFuLCB2ZXJzaW9uPzogc3RyaW5nIH0gPSB7fSxcclxuICAgICAgICBtYXRjaGVzID0gaWVSZWdFeHAuZXhlYyh1YSkgfHwgaWUxMVJlZ0V4cC5leGVjKHVhKSB8fCBtc0VkZ2UuZXhlYyh1YSkgfHwgdWEuaW5kZXhPZihcImNvbXBhdGlibGVcIikgPCAwICYmIG1vemlsbGFSZWdFeHAuZXhlYyh1YSkgfHwgd2Via2l0UmVnRXhwLmV4ZWModWEpIHx8IFtdLFxyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gbWF0Y2hlc1sxXSxcclxuICAgICAgICBicm93c2VyVmVyc2lvbiA9IG1hdGNoZXNbMl07XHJcbiAgICBpZiAoYnJvd3Nlck5hbWUgPT09IFwidHJpZGVudFwiIHx8IGJyb3dzZXJOYW1lID09PSBcImVkZ2VcIikge1xyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gXCJtc2llXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChicm93c2VyTmFtZSA9PT0gXCJtb3ppbGxhXCIpIHtcclxuICAgICAgICBicm93c2VyTmFtZSA9IFwiZmlyZWZveFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgcmVzdWx0W2Jyb3dzZXJOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSBicm93c2VyVmVyc2lvblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG5cclxubGV0IGJyb3dzZXIgPSBicm93c2VyRnJvbVVBKG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGEsIGIpIHtcclxuICAgIHZhciBpLCBkaWZmO1xyXG4gICAgdmFyIHJlZ0V4U3RyaXAwID0gLyhcXC4wKykrJC87XHJcbiAgICB2YXIgc2VnbWVudHNBID0gYS5yZXBsYWNlKHJlZ0V4U3RyaXAwLCAnJykuc3BsaXQoJy4nKTtcclxuICAgIHZhciBzZWdtZW50c0IgPSBiLnJlcGxhY2UocmVnRXhTdHJpcDAsICcnKS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIGwgPSBNYXRoLm1pbihzZWdtZW50c0EubGVuZ3RoLCBzZWdtZW50c0IubGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgZGlmZiA9IHBhcnNlSW50KHNlZ21lbnRzQVtpXSwgMTApIC0gcGFyc2VJbnQoc2VnbWVudHNCW2ldLCAxMCk7XHJcbiAgICAgICAgaWYgKGRpZmYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpZmY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gICAgYnJvd3NlcixcclxuICAgIGNvbXBhcmVWZXJzaW9uc1xyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy50cyIsIi8vIG1vZGVsXHJcbmV4cG9ydCAqIGZyb20gXCIuL2NodW5rcy9tb2RlbFwiO1xyXG5cclxuLy8gbG9jYWxpemF0aW9uXHJcbmltcG9ydCAnLi9jaHVua3MvbG9jYWxpemF0aW9uJztcclxuXHJcbi8vIGhlbHBlcnNcclxuZXhwb3J0ICogZnJvbSAgJy4vY2h1bmtzL2hlbHBlcnMnO1xyXG5cclxuLy8gY3NzIHN0YW5kYXJkXHJcbmV4cG9ydCB7ZGVmYXVsdFN0YW5kYXJkQ3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xyXG4vLyBjc3MgYm9vdHN0cmFwXHJcbmV4cG9ydCB7ZGVmYXVsdEJvb3RzdHJhcENzc30gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwXCI7XHJcblxyXG4vLyByZWFjdFxyXG5leHBvcnQge1N1cnZleX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5XCI7XHJcbmV4cG9ydCB7UmVhY3RTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjsgLy8gVE9ETyBuZWVkIHRvIHJlbW92ZSBzb21lZGF5XHJcbmV4cG9ydCB7UmVhY3RTdXJ2ZXlNb2RlbCBhcyBNb2RlbH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjtcclxuZXhwb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9uQmFzZX0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcclxuZXhwb3J0IHtTdXJ2ZXlOYXZpZ2F0aW9ufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uXCI7XHJcbmV4cG9ydCB7U3VydmV5UGFnZSwgU3VydmV5Um93fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RwYWdlXCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uRXJyb3JzfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xyXG5leHBvcnQge1N1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmVsZW1lbnRcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtLCBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnR9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uY29tbWVudFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uQ2hlY2tib3gsIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmNoZWNrYm94XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25Ecm9wZG93bn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25kcm9wZG93blwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24sIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25Sb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4ZHJvcGRvd25cIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbk1hdHJpeCwgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubWF0cml4XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25IdG1sfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmh0bWxcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkZpbGV9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uZmlsZVwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dEl0ZW19IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9ubXVsdGlwbGV0ZXh0XCI7XHJcbmV4cG9ydCB7U3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbnJhZGlvZ3JvdXBcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvblRleHR9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9udGV4dFwiO1xyXG5leHBvcnQge1N1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUm93fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbm1hdHJpeGR5bmFtaWNcIjtcclxuZXhwb3J0IHtTdXJ2ZXlQcm9ncmVzc30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvblJhdGluZ30gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25yYXRpbmdcIjtcclxuZXhwb3J0IHtTdXJ2ZXlXaW5kb3d9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVdpbmRvd1wiO1xyXG5leHBvcnQge1JlYWN0UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjsgLy8gVE9ETyBuZWVkIHRvIHJlbW92ZSBzb21lZGF5XHJcbmV4cG9ydCB7UmVhY3RRdWVzdGlvbkZhY3RvcnkgYXMgUXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbmZhY3RvcnlcIjtcclxuXHJcbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXHJcbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFN1cnZleVF1ZXN0aW9uRGF0ZX0gZnJvbSBcIi4uL3BsdWdpbnMvcmVhY3QvcmVhY3RxdWVzdGlvbmRhdGVcIjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9yZWFjdC50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/0.12.8/survey.react.min.js b/0.12.8/survey.react.min.js new file mode 100644 index 00000000..b46f067a --- /dev/null +++ b/0.12.8/survey.react.min.js @@ -0,0 +1,6 @@ +/*! + * surveyjs - Survey JavaScript library v0.12.8 + * Copyright (c) 2015-2017 Devsoft Baltic OÜ - http://surveyjs.org/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define("Survey",["react"],t):"object"==typeof exports?exports.Survey=t(require("react")):e.Survey=t(e.React)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=78)}([function(e,t,n){"use strict";function r(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}n.d(t,"a",function(){return i}),t.b=r,n.d(t,"c",function(){return o});var i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return i});var r={currentLocale:"",locales:{},getString:function(e){var t=this.currentLocale?this.locales[this.currentLocale]:i;return t&&t[e]||(t=i),t[e]},getLocales:function(){var e=[];e.push("");for(var t in this.locales)e.push(t);return e.sort(),e}},i={pagePrevText:"Previous",pageNextText:"Next",completeText:"Complete",otherItemText:"Other (describe)",progressText:"Page {0} of {1}",emptySurvey:"There is no visible page or question in the survey.",completingSurvey:"Thank you for completing the survey!",loadingSurvey:"Survey is loading...",optionsCaption:"Choose...",requiredError:"Please answer the question.",requiredInAllRowsError:"Please answer questions in all rows.",numericError:"The value should be numeric.",textMinLength:"Please enter at least {0} symbols.",textMaxLength:"Please enter less than {0} symbols.",textMinMaxLength:"Please enter more than {0} and less than {1} symbols.",minRowCountError:"Please fill in at least {0} rows.",minSelectError:"Please select at least {0} variants.",maxSelectError:"Please select no more than {0} variants.",numericMinMax:"The '{0}' should be equal or more than {1} and equal or less than {2}",numericMin:"The '{0}' should be equal or more than {1}",numericMax:"The '{0}' should be equal or less than {1}",invalidEmail:"Please enter a valid e-mail address.",urlRequestError:"The request returned error '{0}'. {1}",urlGetChoicesError:"The request returned empty data or the 'path' property is incorrect",exceedMaxSize:"The file size should not exceed {0}.",otherRequiredError:"Please enter the other value.",uploadingFile:"Your file is uploading. Please wait several seconds and try again.",addRow:"Add row",removeRow:"Remove",choices_firstItem:"first item",choices_secondItem:"second item",choices_thirdItem:"third item",matrix_column:"Column",matrix_row:"Row"};r.locales.en=i,String.prototype.format||(String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,function(t,n){return void 0!==e[n]?e[n]:t})})},function(e,t,n){"use strict";var r=n(0);n.d(t,"h",function(){return i}),n.d(t,"e",function(){return o}),n.d(t,"d",function(){return s}),n.d(t,"b",function(){return a}),n.d(t,"j",function(){return u}),n.d(t,"g",function(){return l}),n.d(t,"f",function(){return c}),n.d(t,"c",function(){return h}),n.d(t,"i",function(){return p}),n.d(t,"a",function(){return d});var i=function(){function e(e){this.name=e,this.typeValue=null,this.choicesValue=null,this.choicesfunc=null,this.className=null,this.alternativeName=null,this.classNamePart=null,this.baseClassName=null,this.defaultValue=null,this.readOnly=!1,this.visible=!0,this.isLocalizable=!1,this.serializationProperty=null,this.onGetValue=null}return Object.defineProperty(e.prototype,"type",{get:function(){return this.typeValue?this.typeValue:"string"},set:function(e){this.typeValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasToUseGetValue",{get:function(){return this.onGetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.isDefaultValue=function(e){return this.defaultValue?this.defaultValue==e:!e},e.prototype.getValue=function(e){return this.onGetValue?this.onGetValue(e):this.serializationProperty?e[this.serializationProperty].getJson():e[this.name]},e.prototype.getPropertyValue=function(e){return this.isLocalizable?e[this.serializationProperty].text:this.getValue(e)},Object.defineProperty(e.prototype,"hasToUseSetValue",{get:function(){return this.onSetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.setValue=function(e,t,n){this.onSetValue?this.onSetValue(e,t,n):this.serializationProperty?e[this.serializationProperty].setJson(t):e[this.name]=t},e.prototype.getObjType=function(e){return this.classNamePart?e.replace(this.classNamePart,""):e},e.prototype.getClassName=function(e){return this.classNamePart&&e.indexOf(this.classNamePart)<0?e+this.classNamePart:e},Object.defineProperty(e.prototype,"choices",{get:function(){return null!=this.choicesValue?this.choicesValue:null!=this.choicesfunc?this.choicesfunc():null},enumerable:!0,configurable:!0}),e.prototype.setChoices=function(e,t){this.choicesValue=e,this.choicesfunc=t},e}(),o=function(){function e(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null),this.name=e,this.creator=n,this.parentName=r,this.properties=null,this.requiredProperties=null,this.properties=new Array;for(var i=0;i-1&&(r=n.substring(o+1),n=n.substring(0,o)),n=this.getPropertyName(n);var s=new i(n);if(r&&(s.type=r),"object"==typeof t){if(t.type&&(s.type=t.type),t.default&&(s.defaultValue=t.default),!1===t.visible&&(s.visible=!1),t.isRequired&&this.makePropertyRequired(s.name),t.choices){var a="function"==typeof t.choices?t.choices:null,u="function"!=typeof t.choices?t.choices:null;s.setChoices(u,a)}if(t.onGetValue&&(s.onGetValue=t.onGetValue),t.onSetValue&&(s.onSetValue=t.onSetValue),t.serializationProperty){s.serializationProperty=t.serializationProperty;s.serializationProperty&&0==s.serializationProperty.indexOf("loc")&&(s.isLocalizable=!0)}t.isLocalizable&&(s.isLocalizable=t.isLocalizable),t.className&&(s.className=t.className),t.baseClassName&&(s.baseClassName=t.baseClassName),t.classNamePart&&(s.classNamePart=t.classNamePart),t.alternativeName&&(s.alternativeName=t.alternativeName)}return s}},e.prototype.getPropertyName=function(t){return 0==t.length||t[0]!=e.requiredSymbol?t:(t=t.slice(1),this.makePropertyRequired(t),t)},e.prototype.makePropertyRequired=function(e){this.requiredProperties||(this.requiredProperties=new Array),this.requiredProperties.push(e)},e}();o.requiredSymbol="!",o.typeSymbol=":";var s=function(){function e(){this.classes={},this.childrenClasses={},this.classProperties={},this.classRequiredProperties={}}return e.prototype.addClass=function(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=null);var i=new o(e,t,n,r);if(this.classes[e]=i,r){this.childrenClasses[r]||(this.childrenClasses[r]=[]),this.childrenClasses[r].push(i)}return i},e.prototype.overrideClassCreatore=function(e,t){var n=this.findClass(e);n&&(n.creator=t)},e.prototype.getProperties=function(e){var t=this.classProperties[e];return t||(t=new Array,this.fillProperties(e,t),this.classProperties[e]=t),t},e.prototype.findProperty=function(e,t){for(var n=this.getProperties(e),r=0;r=0&&e.requiredProperties.splice(n,1))},e.prototype.emptyClassPropertiesHash=function(e){this.classProperties[e.name]=null;for(var t=this.getChildrenClasses(e.name),n=0;n0&&(r.description+=", "),r.description+=i[o].name;r.description+="."}return r}return r.b(t,e),t}(a),l=function(e){function t(t,n,r){var i=e.call(this,n,r)||this;i.baseClassName=t,i.type=n,i.message=r,i.description="The following types are available: ";for(var o=d.metaData.getChildrenClasses(t,!0),s=0;s0&&(i.description+=", "),i.description+="'"+o[s].name+"'";return i.description+=".",i}return r.b(t,e),t}(a),c=function(e){function t(t,n){var r=e.call(this,n,"missingtypeproperty","The property type is missing in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),h=function(e){function t(t,n){var r=e.call(this,n,"incorrecttypeproperty","The property type is incorrect in the object. Please take a look at property: '"+t+"'.")||this;return r.propertyName=t,r.baseClassName=n,r}return r.b(t,e),t}(l),p=function(e){function t(t,n){var r=e.call(this,"requiredproperty","The property '"+t+"' is required in class '"+n+"'.")||this;return r.propertyName=t,r.className=n,r}return r.b(t,e),t}(a),d=function(){function e(){this.errors=new Array}return Object.defineProperty(e,"metaData",{get:function(){return e.metaDataValue},enumerable:!0,configurable:!0}),e.prototype.toJsonObject=function(e){return this.toJsonObjectCore(e,null)},e.prototype.toObject=function(t,n){if(t){var r=null;if(n.getType&&(r=e.metaData.getProperties(n.getType())),r)for(var i in t)if(i!=e.typePropertyName)if(i!=e.positionPropertyName){var o=this.findProperty(r,i);o?this.valueToObj(t[i],n,i,o):this.addNewError(new u(i.toString(),n.getType()),t)}else n[i]=t[i]}},e.prototype.toJsonObjectCore=function(t,n){if(!t.getType)return t;var r={};null==n||n.className||(r[e.typePropertyName]=n.getObjType(t.getType()));for(var i=e.metaData.getProperties(t.getType()),o=0;o0?i:null}else r=this.toJsonObjectCore(r,n);n.isDefaultValue(r)||(t[n.name]=r)}},e.prototype.valueToObj=function(e,t,n,r){if(null!=e){if(null!=r&&r.hasToUseSetValue)return void r.setValue(t,e,this);if(this.isValueArray(e))return void this.valueToArray(e,t,r.name,r);var i=this.createNewObj(e,r);i.newObj&&(this.toObject(e,i.newObj),e=i.newObj),i.error||(t[r.name]=e)}},e.prototype.isValueArray=function(e){return e&&Array.isArray(e)},e.prototype.createNewObj=function(t,n){var r={newObj:null,error:null},i=t[e.typePropertyName];return!i&&null!=n&&n.className&&(i=n.className),i=n.getClassName(i),r.newObj=i?e.metaData.createClass(i):null,r.error=this.checkNewObjectOnErrors(r.newObj,t,n,i),r},e.prototype.checkNewObjectOnErrors=function(t,n,r,i){var o=null;if(t){var s=e.metaData.getRequiredProperties(i);if(s)for(var a=0;a0&&t[n].splice(0,t[n].length);for(var i=0;i0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return this.errors.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"requiredText",{get:function(){return null!=this.survey&&this.isRequired?this.survey.requiredText:""},enumerable:!0,configurable:!0}),t.prototype.addError=function(e){this.errors.push(e),this.fireCallback(this.errorsChangedCallback)},t.prototype.checkForErrors=function(e){var t=this.errors?this.errors.length:0;if(this.errors=[],this.onCheckForErrors(this.errors),0==this.errors.length&&this.value){var n=this.runValidators();n&&this.errors.push(n)}if(this.survey&&0==this.errors.length){var n=this.survey.validateQuestion(this.name);n&&this.errors.push(n)}e&&(t!=this.errors.length||t>0)&&this.fireCallback(this.errorsChangedCallback)},t.prototype.onCheckForErrors=function(e){this.hasRequiredError()&&this.errors.push(new u.a)},t.prototype.hasRequiredError=function(){return this.isRequired&&this.isEmpty()},t.prototype.runValidators=function(){return(new l.a).run(this)},t.prototype.setNewValue=function(e){this.setNewValueInData(e),this.onValueChanged()},t.prototype.setNewValueInData=function(e){this.isValueChangedInSurvey||(e=this.valueToData(e),this.setValueCore(e))},t.prototype.getValueCore=function(){return null!=this.data?this.data.getValue(this.name):this.questionValue},t.prototype.setValueCore=function(e){null!=this.data?this.data.setValue(this.name,e):this.questionValue=e},t.prototype.valueFromData=function(e){return e},t.prototype.valueToData=function(e){return e},t.prototype.onValueChanged=function(){},t.prototype.setNewComment=function(e){null!=this.data?this.data.setComment(this.name,e):this.questionComment=e},t.prototype.onSurveyValueChanged=function(e){this.isValueChangedInSurvey=!0,this.value=this.valueFromData(e),this.fireCallback(this.commentChangedCallback),this.isValueChangedInSurvey=!1},t.prototype.getValidatorTitle=function(){return null},t}(o.a);i.a.metaData.addClass("question",[{name:"title:text",serializationProperty:"locTitle"},{name:"commentText",serializationProperty:"locCommentText"},"isRequired:boolean","readOnly:boolean",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"}],null,"questionbase")},function(e,t,n){"use strict";var r=n(7);n.d(t,"a",function(){return i});var i=function(){function e(e,t){void 0===t&&(t=null),this.locTextValue=new r.a(null),t&&(this.locText.text=t),this.value=e}return e.createArray=function(t){var n=[];return e.setupArray(n,t),n},e.setupArray=function(e,t){e.push=function(e){var n=Array.prototype.push.call(this,e);return e.locOwner=t,n},e.splice=function(e,n){for(var r=[],i=2;i-1&&(this.itemValue=n.slice(0,r),this.text=n.slice(r+1))}},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasText",{get:function(){return!!this.locText.text},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.hasText?this.locText.text:this.value?this.value.toString():null},set:function(e){this.locText.text=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(t){if(void 0!==t.value){var n=null;this.isObjItemValue(t)&&(t.itemValue=t.itemValue,this.locText.setJson(t.locText.getJson()),n=e.itemValueProp),this.copyAttributes(t,n)}else this.value=t},e.prototype.isObjItemValue=function(e){return void 0!==e.getType&&"itemvalue"==e.getType()},e.prototype.copyAttributes=function(e,t){for(var n in e)"function"!=typeof e[n]&&(t&&t.indexOf(n)>-1||("text"==n?this.locText.setJson(e[n]):this[n]=e[n]))},e}();i.Separator="|",i.itemValueProp=["text","value","hasText","locOwner","locText"]},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(4);n.d(t,"b",function(){return a}),n.d(t,"a",function(){return u});var a=function(e){function t(t){var n=e.call(this,t)||this;return n.state={value:n.question.value||""},n.handleOnChange=n.handleOnChange.bind(n),n.handleOnBlur=n.handleOnBlur.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.state={value:this.question.value||""}},t.prototype.handleOnChange=function(e){this.setState({value:e.target.value})},t.prototype.handleOnBlur=function(e){this.question.value=e.target.value,this.setState({value:this.question.value||""})},t.prototype.render=function(){return this.question?this.isDisplayMode?i.createElement("div",{id:this.question.inputId,className:this.css},this.question.value):i.createElement("textarea",{id:this.question.inputId,className:this.css,type:"text",value:this.state.value,placeholder:this.question.placeHolder,onBlur:this.handleOnBlur,onChange:this.handleOnChange,cols:this.question.cols,rows:this.question.rows}):null},t}(o.b),u=function(e){function t(t){var n=e.call(this,t)||this;return n.question=t.question,n.comment=n.question.comment,n.state={value:n.comment},n.handleOnChange=n.handleOnChange.bind(n),n.handleOnBlur=n.handleOnBlur.bind(n),n}return r.b(t,e),t.prototype.handleOnChange=function(e){this.comment=e.target.value,this.setState({value:this.comment})},t.prototype.handleOnBlur=function(e){this.question.comment=this.comment},t.prototype.componentWillReceiveProps=function(e){this.question=e.question},t.prototype.render=function(){return this.question?this.isDisplayMode?i.createElement("div",{className:this.css.question.comment},this.comment):i.createElement("input",{type:"text",className:this.css.question.comment,value:this.state.value,onChange:this.handleOnChange,onBlur:this.handleOnBlur}):null},t}(o.a);s.a.Instance.registerQuestion("comment",function(e){return i.createElement(a,e)})},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(10),s=n(11),a=n(1),u=n(9),l=n(19),c=n(7);n.d(t,"b",function(){return h}),n.d(t,"a",function(){return p});var h=function(e){function t(t){var n=e.call(this,t)||this;n.visibleChoicesCache=null,n.otherItemValue=new s.a("other",a.a.getString("otherItemText")),n.choicesFromUrl=null,n.cachedValueForUrlRequestion=null,n.storeOthersAsComment=!0,n.choicesOrderValue="none",n.isSettingComment=!1,n.choicesValues=s.a.createArray(n),n.choicesByUrl=n.createRestfull(),n.locOtherTextValue=new c.a(n),n.locOtherErrorTextValue=new c.a(n);var r=n;return n.choicesByUrl.getResultCallback=function(e){r.onLoadChoicesFromUrl(e)},n}return r.b(t,e),Object.defineProperty(t.prototype,"otherItem",{get:function(){return this.otherItemValue.text=this.otherText?this.otherText:a.a.getString("otherItemText"),this.otherItemValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.getStoreOthersAsComment()?this.getHasOther(this.value):this.getHasOther(this.cachedValue)},enumerable:!0,configurable:!0}),t.prototype.getHasOther=function(e){return e==this.otherItem.value},t.prototype.createRestfull=function(){return new l.a},t.prototype.getComment=function(){return this.getStoreOthersAsComment()?e.prototype.getComment.call(this):this.commentValue},t.prototype.setComment=function(t){this.getStoreOthersAsComment()?e.prototype.setComment.call(this,t):this.isSettingComment||t==this.commentValue||(this.isSettingComment=!0,this.commentValue=t,this.isOtherSelected&&this.setNewValueInData(this.cachedValue),this.isSettingComment=!1)},t.prototype.setNewValue=function(t){t&&(this.cachedValueForUrlRequestion=t),e.prototype.setNewValue.call(this,t)},t.prototype.valueFromData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueFromData.call(this,t):(this.cachedValue=this.valueFromDataCore(t),this.cachedValue)},t.prototype.valueToData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueToData.call(this,t):(this.cachedValue=t,this.valueToDataCore(t))},t.prototype.valueFromDataCore=function(e){return this.hasUnknownValue(e)?e==this.otherItem.value?e:(this.comment=e,this.otherItem.value):e},t.prototype.valueToDataCore=function(e){return e==this.otherItem.value&&this.getComment()&&(e=this.getComment()),e},t.prototype.hasUnknownValue=function(e){if(!e)return!1;for(var t=this.activeChoices,n=0;n0||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback);var n=null;e&&e.length>0&&(n=new Array,s.a.setData(n,e)),this.choicesFromUrl=n,this.onVisibleChoicesChanged(),this.cachedValueForUrlRequestion&&(this.value=this.cachedValueForUrlRequestion)},t.prototype.onVisibleChoicesChanged=function(){this.visibleChoicesCache=null,this.fireCallback(this.choicesChangedCallback)},t.prototype.sortVisibleChoices=function(e){var t=this.choicesOrder.toLowerCase();return"asc"==t?this.sortArray(e,1):"desc"==t?this.sortArray(e,-1):"random"==t?this.randomizeArray(e):e},t.prototype.sortArray=function(e,t){return e.sort(function(e,n){return e.textn.text?1*t:0})},t.prototype.randomizeArray=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e},t.prototype.clearUnusedValues=function(){e.prototype.clearUnusedValues.call(this),this.isOtherSelected||(this.comment=null)},t}(o.a),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.colCountValue=1,n}return r.b(t,e),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<0||e>4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t}(h);i.a.metaData.addClass("selectbase",["hasComment:boolean","hasOther:boolean",{name:"choices:itemvalues",onGetValue:function(e){return s.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"otherText",serializationProperty:"locOtherText"},{name:"otherErrorText",serializationProperty:"locOtherErrorText"},{name:"storeOthersAsComment:boolean",default:!0}],null,"question"),i.a.metaData.addClass("checkboxbase",[{name:"colCount:number",default:1,choices:[0,1,2,3,4]}],null,"selectbase")},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(10)),s=n(12);n.d(t,"a",function(){return a}),n.d(t,"b",function(){return u});var a=function(e){function t(t){var n=e.call(this,t)||this;return n.setQuestion(t.question),n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.creator=e.creator,this.css=e.css,this.setQuestion(e.question)},t.prototype.setQuestion=function(e){this.questionBase=e,this.question=e instanceof o.a?e:null;var t=this.question?this.question.value:null;this.state={visible:this.questionBase.visible,value:t,error:0,renderWidth:0,visibleIndexValue:-1,isReadOnly:this.questionBase.isReadOnly}},t.prototype.componentDidMount=function(){if(this.questionBase){var e=this;this.questionBase.react=e,this.questionBase.renderWidthChangedCallback=function(){e.state.renderWidth=e.state.renderWidth+1,e.setState(e.state)},this.questionBase.visibleIndexChangedCallback=function(){e.state.visibleIndexValue=e.questionBase.visibleIndex,e.setState(e.state)},this.questionBase.readOnlyChangedCallback=function(){e.state.isReadOnly=e.questionBase.isReadOnly,e.setState(e.state)};var t=this.refs.root;t&&this.questionBase.survey&&this.questionBase.survey.afterRenderQuestion(this.questionBase,t),this.questionBase.customWidget&&(t=this.refs.widget)&&this.questionBase.customWidget.afterRender(this.questionBase,t)}},t.prototype.componentWillUnmount=function(){var e=this.refs.root;this.questionBase&&(this.questionBase.react=null,this.questionBase.renderWidthChangedCallback=null,this.questionBase.visibleIndexChangedCallback=null,this.questionBase.readOnlyChangedCallback=null),this.questionBase.customWidget&&(e=this.refs.widget)&&this.questionBase.customWidget.willUnmount(this.questionBase,e)},t.prototype.render=function(){if(!this.questionBase||!this.creator)return null;if(!this.questionBase.visible)return null;var e=this.renderQuestion(),t=this.questionBase.hasTitle?this.renderTitle():null,n="top"==this.creator.questionTitleLocation()?t:null,r="bottom"==this.creator.questionTitleLocation()?t:null,o=this.question&&this.question.hasComment?this.renderComment():null,s=this.renderErrors(),a=this.questionBase.indent>0?this.questionBase.indent*this.css.question.indent+"px":null,u=this.questionBase.rightIndent>0?this.questionBase.rightIndent*this.css.question.indent+"px":null,l={display:"inline-block",verticalAlign:"top"};return this.questionBase.renderWidth&&(l.width=this.questionBase.renderWidth),a&&(l.marginLeft=a),u&&(l.paddingRight=u),i.createElement("div",{ref:"root",id:this.questionBase.id,className:this.css.question.root,style:l},n,s,e,o,r)},t.prototype.renderQuestion=function(){var e=this.questionBase.customWidget;if(!e)return this.creator.createQuestionElement(this.questionBase);var t=null;if(e.widgetJson.isDefaultRender)return i.createElement("div",{ref:"widget"},this.creator.createQuestionElement(this.questionBase));if(e.widgetJson.render)t=e.widgetJson.render(this.questionBase);else if(e.htmlTemplate){var n={__html:e.htmlTemplate};return i.createElement("div",{ref:"widget",dangerouslySetInnerHTML:n})}return i.createElement("div",{ref:"widget"},t)},t.prototype.renderTitle=function(){var e=this.question.fullTitle;return i.createElement("h5",{className:this.css.question.title},e)},t.prototype.renderComment=function(){return i.createElement("div",null,i.createElement("div",null,this.question.commentText),i.createElement(s.a,{question:this.question,css:this.css}))},t.prototype.renderErrors=function(){return i.createElement(u,{question:this.question,css:this.css,creator:this.creator})},t}(i.Component),u=function(e){function t(t){var n=e.call(this,t)||this;return n.setQuestion(t.question),n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.setQuestion(e.question),this.creator=e.creator,this.css=e.css},t.prototype.setQuestion=function(e){if(this.question=e instanceof o.a?e:null,this.question){var t=this;this.question.errorsChangedCallback=function(){t.state.error=t.state.error+1,t.setState(t.state)}}this.state={error:0}},t.prototype.render=function(){if(!this.question||0==this.question.errors.length)return null;for(var e=[],t=0;t-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},e.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"operator",{get:function(){return this.opValue},set:function(t){t&&(t=t.toLowerCase(),e.operators[t]&&(this.opValue=t))},enumerable:!0,configurable:!0}),e.prototype.perform=function(t,n){return void 0===t&&(t=null),void 0===n&&(n=null),t||(t=this.left),n||(n=this.right),e.operators[this.operator](this.getPureValue(t),this.getPureValue(n))},e.prototype.getPureValue=function(e){if(!e||"string"!=typeof e)return e;e.length>0&&("'"==e[0]||'"'==e[0])&&(e=e.substr(1));var t=e.length;return t>0&&("'"==e[t-1]||'"'==e[t-1])&&(e=e.substr(0,t-1)),e},e}();o.operatorsValue=null;var s=function(){function e(){this.connectiveValue="and",this.children=[]}return Object.defineProperty(e.prototype,"connective",{get:function(){return this.connectiveValue},set:function(e){e&&(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e||(this.connectiveValue=e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0==this.children.length},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.children=[],this.connective="and"},e}(),a=function(){function e(e){this.root=new s,this.expression=e,this.processValue=new i.a}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,(new r.a).parse(this.expressionValue,this.root))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){return this.values=e,this.runNode(this.root)},e.prototype.runNode=function(e){for(var t="and"==e.connective,n=0;n-1?this.path.split(";"):this.path.split(","),0==e.length&&e.push(this.path),e},t.prototype.getValue=function(e){return this.valueName?e[this.valueName]:Object.keys(e).length<1?null:e[Object.keys(e)[0]]},t.prototype.getTitle=function(e){return this.titleName?e[this.titleName]:null},t}(i.b);s.a.metaData.addClass("choicesByUrl",["url","path","valueName","titleName"],function(){return new l})},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.getFirstName=function(e){if(!e)return e;for(var t="",n=0;n0;){if(!i&&"["==e[0]){if(!Array.isArray(r))return n;for(var o=1,s="";o=r.length)return n;r=r[o]}else{i||(e=e.substr(1));var a=this.getFirstName(e);if(!a)return n;if(!r[a])return n;r=r[a],e=e.substr(a.length)}i=!1}return n.value=r,n.hasValue=!0,n},e.prototype.getIntValue=function(e){return"0"==e||(0|e)>0&&e%1==0?Number(e):-1},e}()},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(10),s=n(5),a=n(11),u=n(1),l=n(13),c=n(19),h=n(6),p=n(7);n.d(t,"b",function(){return d}),n.d(t,"a",function(){return f}),n.d(t,"c",function(){return g}),n.d(t,"d",function(){return m});var d=function(e){function t(t,n){void 0===n&&(n=null);var r=e.call(this)||this;return r.name=t,r.isRequired=!1,r.hasOther=!1,r.minWidth="",r.cellType="default",r.inputType="text",r.choicesOrder="none",r.locOwner=null,r.colCountValue=-1,r.choicesValue=a.a.createArray(r),r.locTitleValue=new p.a(r),r.locOptionsCaptionValue=new p.a(r),r.locPlaceHolderValue=new p.a(r),r.choicesByUrl=new c.a,r}return r.b(t,e),t.prototype.getType=function(){return"matrixdropdowncolumn"},Object.defineProperty(t.prototype,"title",{get:function(){return this.locTitle.text?this.locTitle.text:this.name},set:function(e){this.locTitle.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.locTitleValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<-1||e>4||(this.colCountValue=e)},enumerable:!0,configurable:!0}),t.prototype.getLocale=function(){return this.locOwner?this.locOwner.getLocale():""},t}(s.b),f=function(){function e(e,t,n){this.column=e,this.row=t,this.questionValue=n.createQuestion(this.row,this.column),this.questionValue.setData(t)}return Object.defineProperty(e.prototype,"question",{get:function(){return this.questionValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.question.value},set:function(e){this.question.value=e},enumerable:!0,configurable:!0}),e}(),g=function(){function e(t,n){this.rowValues={},this.rowComments={},this.isSettingValue=!1,this.cells=[],this.data=t,this.value=n,this.idValue=e.getId(),this.buildCells()}return e.getId=function(){return"srow_"+e.idCounter++},Object.defineProperty(e.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowName",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.rowValues},set:function(e){if(this.isSettingValue=!0,this.rowValues={},null!=e)for(var t in e)this.rowValues[t]=e[t];for(var n=0;n4||(this.columnColCountValue=e,this.fireCallback(this.updateCellsCallbak))},enumerable:!0,configurable:!0}),t.prototype.getColumnTitle=function(e){var t=e.title;if(e.isRequired&&this.survey){var n=this.survey.requiredText;n&&(n+=" "),t=n+t}return t},t.prototype.getColumnWidth=function(e){return e.minWidth?e.minWidth:this.columnMinWidth},Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text?this.locOptionsCaption.text:u.a.getString("optionsCaption")},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),t.prototype.addColumn=function(e,t){void 0===t&&(t=null);var n=new d(e,t);return this.columnsValue.push(n),n},Object.defineProperty(t.prototype,"visibleRows",{get:function(){return this.generatedVisibleRows=this.generateRows(),this.generatedVisibleRows},enumerable:!0,configurable:!0}),t.prototype.generateRows=function(){return null},t.prototype.createMatrixRow=function(e,t,n){return null},t.prototype.createNewValue=function(e){return e||{}},t.prototype.getRowValue=function(e,t,n){void 0===n&&(n=!1);var r=t[e.rowName]?t[e.rowName]:null;return!r&&n&&(r={},t[e.rowName]=r),r},t.prototype.onBeforeValueChanged=function(e){},t.prototype.onValueChanged=function(){if(!this.isRowChanging&&(this.onBeforeValueChanged(this.value),this.generatedVisibleRows&&0!=this.generatedVisibleRows.length)){this.isRowChanging=!0;for(var e=this.createNewValue(this.value),t=0;t0)return n[r].question}return null},t.prototype.createQuestion=function(e,t){var n=this.createQuestionCore(e,t);return n.name=t.name,n.isRequired=t.isRequired,n.hasOther=t.hasOther,n.readOnly=this.readOnly,n.setData(this.survey),t.hasOther&&n instanceof l.b&&(n.storeOthersAsComment=!1),n},t.prototype.createQuestionCore=function(e,t){var n="default"==t.cellType?this.cellType:t.cellType,r=this.getQuestionName(e,t);return"checkbox"==n?this.createCheckbox(r,t):"radiogroup"==n?this.createRadiogroup(r,t):"text"==n?this.createText(r,t):"comment"==n?this.createComment(r,t):this.createDropdown(r,t)},t.prototype.getQuestionName=function(e,t){return e.rowName+"_"+t.name},t.prototype.getColumnChoices=function(e){return e.choices&&e.choices.length>0?e.choices:this.choices},t.prototype.getColumnOptionsCaption=function(e){return e.optionsCaption?e.optionsCaption:this.optionsCaption},t.prototype.createDropdown=function(e,t){var n=this.createCellQuestion("dropdown",e);return this.setSelectBaseProperties(n,t),n.optionsCaption=this.getColumnOptionsCaption(t),n},t.prototype.createCheckbox=function(e,t){var n=this.createCellQuestion("checkbox",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.createRadiogroup=function(e,t){var n=this.createCellQuestion("radiogroup",e);return this.setSelectBaseProperties(n,t),n.colCount=t.colCount>-1?t.colCount:this.columnColCount,n},t.prototype.setSelectBaseProperties=function(e,t){e.choicesOrder=t.choicesOrder,e.choices=this.getColumnChoices(t),e.choicesByUrl.setData(t.choicesByUrl),e.choicesByUrl.isEmpty||e.choicesByUrl.run()},t.prototype.createText=function(e,t){var n=this.createCellQuestion("text",e);return n.inputType=t.inputType,n.placeHolder=t.placeHolder,n},t.prototype.createComment=function(e,t){var n=this.createCellQuestion("comment",e);return n.placeHolder=t.placeHolder,n},t.prototype.createCellQuestion=function(e,t){return h.a.Instance.createQuestion(e,t)},t.prototype.deleteRowValue=function(e,t){return delete e[t.rowName],0==Object.keys(e).length?null:e},t.prototype.onRowChanged=function(e,t){var n=this.createNewValue(this.value),r=this.getRowValue(e,n,!0);for(var i in r)delete r[i];if(t){t=JSON.parse(JSON.stringify(t));for(var i in t)r[i]=t[i]}0==Object.keys(r).length&&(n=this.deleteRowValue(n,e)),this.isRowChanging=!0,this.setNewValue(n),this.isRowChanging=!1},t}(o.a);i.a.metaData.addClass("matrixdropdowncolumn",["name",{name:"title",serializationProperty:"locTitle"},{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"default",choices:["default","dropdown","checkbox","radiogroup","text","comment"]},{name:"colCount",default:-1,choices:[-1,0,1,2,3,4]},"isRequired:boolean","hasOther:boolean","minWidth",{name:"placeHolder",serializationProperty:"locPlaceHolder"},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]}],function(){return new d("")}),i.a.metaData.addClass("matrixdropdownbase",[{name:"columns:matrixdropdowncolumns",className:"matrixdropdowncolumn"},"horizontalScroll:boolean",{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"dropdown",choices:["dropdown","checkbox","radiogroup","text","comment"]},{name:"columnColCount",default:0,choices:[0,1,2,3,4]},"columnMinWidth"],function(){return new m("")},"question")},function(e,t,n){"use strict";var r=n(0),i=n(5),o=n(2),s=n(16);n.d(t,"a",function(){return a});var a=function(e){function t(n){var r=e.call(this)||this;return r.name=n,r.conditionRunner=null,r.visibleIf="",r.visibleValue=!0,r.startWithNewLineValue=!0,r.visibleIndexValue=-1,r.width="",r.renderWidthValue="",r.rightIndentValue=0,r.indent=0,r.idValue=t.getQuestionId(),r.onCreating(),r}return r.b(t,e),t.getQuestionId=function(){return"sq_"+t.questionCounter++},Object.defineProperty(t.prototype,"isPanel",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this.visibleValue},set:function(e){e!=this.visible&&(this.visibleValue=e,this.fireCallback(this.visibilityChangedCallback),this.fireCallback(this.rowVisibilityChangedCallback),this.survey&&this.survey.questionVisibilityChanged(this,this.visible))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isVisible",{get:function(){return this.visible||this.survey&&this.survey.isDesignMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isReadOnly",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleIndex",{get:function(){return this.visibleIndexValue},enumerable:!0,configurable:!0}),t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),!1},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasInput",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasComment",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startWithNewLine",{get:function(){return this.startWithNewLineValue},set:function(e){this.startWithNewLine!=e&&(this.startWithNewLineValue=e,this.startWithNewLineChangedCallback&&this.startWithNewLineChangedCallback())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderWidth",{get:function(){return this.renderWidthValue},set:function(e){e!=this.renderWidth&&(this.renderWidthValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rightIndent",{get:function(){return this.rightIndentValue},set:function(e){e!=this.rightIndent&&(this.rightIndentValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.focus=function(e){void 0===e&&(e=!1)},t.prototype.setData=function(e){this.data=e,e&&e.questionAdded&&(this.surveyValue=e),this.onSetData()},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),t.prototype.fireCallback=function(e){e&&e()},t.prototype.onSetData=function(){},t.prototype.onCreating=function(){},t.prototype.runCondition=function(e){this.visibleIf&&(this.conditionRunner||(this.conditionRunner=new s.a(this.visibleIf)),this.conditionRunner.expression=this.visibleIf,this.visible=this.conditionRunner.run(e))},t.prototype.onSurveyValueChanged=function(e){},t.prototype.onSurveyLoad=function(){},t.prototype.setVisibleIndex=function(e){this.visibleIndexValue!=e&&(this.visibleIndexValue=e,this.fireCallback(this.visibleIndexChangedCallback))},t.prototype.supportGoNextPageAutomatic=function(){return!1},t.prototype.clearUnusedValues=function(){},t.prototype.onLocaleChanged=function(){},t.prototype.getLocale=function(){return this.data?this.data.getLocale():""},t}(i.b);a.questionCounter=100,o.a.metaData.addClass("questionbase",["!name",{name:"visible:boolean",default:!0},"visibleIf:expression",{name:"width"},{name:"startWithNewLine:boolean",default:!0},{name:"indent:number",default:0,choices:[0,1,2,3]}])},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(5),s=n(32),a=n(24),u=n(20),l=n(31),c=n(1),h=n(9),p=n(34),d=n(7);n.d(t,"a",function(){return f});var f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;n.surveyId=null,n.surveyPostId=null,n.clientId=null,n.cookieName=null,n.sendResultOnPageNext=!1,n.commentPrefix="-Comment",n.focusFirstQuestionAutomatic=!0,n.showNavigationButtons=!0,n.showTitle=!0,n.showPageTitles=!0,n.showCompletedPage=!0,n.requiredText="*",n.questionStartIndex="",n.showProgressBar="off",n.storeOthersAsComment=!0,n.goNextPageAutomatic=!1,n.pages=new Array,n.triggers=new Array,n.clearInvisibleValues=!1,n.currentPageValue=null,n.valuesHash={},n.variablesHash={},n.showPageNumbersValue=!1,n.showQuestionNumbersValue="on",n.questionTitleLocationValue="top",n.localeValue="",n.isCompleted=!1,n.isLoading=!1,n.processedTextValues={},n.isValidatingOnServerValue=!1,n.modeValue="edit",n.isDesignModeValue=!1,n.onComplete=new o.d,n.onPartialSend=new o.d,n.onCurrentPageChanged=new o.d,n.onValueChanged=new o.d,n.onVisibleChanged=new o.d,n.onPageVisibleChanged=new o.d,n.onQuestionAdded=new o.d,n.onQuestionRemoved=new o.d,n.onPanelAdded=new o.d,n.onPanelRemoved=new o.d,n.onValidateQuestion=new o.d,n.onProcessHtml=new o.d,n.onSendResult=new o.d,n.onGetResult=new o.d,n.onUploadFile=new o.d,n.onAfterRenderSurvey=new o.d,n.onAfterRenderPage=new o.d,n.onAfterRenderQuestion=new o.d,n.onAfterRenderPanel=new o.d,n.jsonErrors=null,n.isLoadingFromJsonValue=!1,n.locTitleValue=new d.a(n),n.locCompletedHtmlValue=new d.a(n),n.locPagePrevTextValue=new d.a(n),n.locPageNextTextValue=new d.a(n),n.locCompleteTextValue=new d.a(n),n.locQuestionTitleTemplateValue=new d.a(n);var r=n;return n.textPreProcessor=new a.a,n.textPreProcessor.onHasValue=function(e){return r.hasProcessedTextValue(e)},n.textPreProcessor.onProcess=function(e){return r.getProcessedTextValue(e)},n.pages.push=function(e){return e.data=r,Array.prototype.push.call(this,e)},n.triggers.push=function(e){return e.setOwner(r),Array.prototype.push.call(this,e)},n.updateProcessedTextValues(),n.onBeforeCreating(),t&&(n.setJsonObject(t),n.surveyId&&n.loadSurveyFromService(n.surveyId)),n.onCreating(),n}return r.b(t,e),t.prototype.getType=function(){return"survey"},Object.defineProperty(t.prototype,"locale",{get:function(){return this.localeValue},set:function(e){this.localeValue=e,c.a.currentLocale=e;for(var t=0;t0&&(e[t]=this.valuesHash[t]);return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visiblePages",{get:function(){if(this.isDesignMode)return this.pages;for(var e=new Array,t=0;t0&&(this.currentPage=e[0]),this.currentPageValue},set:function(e){var t=this.visiblePages;if(!(null!=e&&t.indexOf(e)<0)&&e!=this.currentPageValue){var n=this.currentPageValue;this.currentPageValue=e,this.updateCustomWidgets(e),this.currentPageChanged(e,n)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPageNo",{get:function(){return this.visiblePages.indexOf(this.currentPage)},set:function(e){this.visiblePages;e<0||e>=this.visiblePages.length||(this.currentPage=this.visiblePages[e])},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){this.currentPageValue&&(this.currentPageValue.scrollToTop(),this.currentPageValue.focusFirstQuestion())},Object.defineProperty(t.prototype,"state",{get:function(){return this.isLoading?"loading":this.isCompleted?"completed":this.currentPage?"running":"empty"},enumerable:!0,configurable:!0}),t.prototype.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),e&&(this.data=null,this.variablesHash={}),this.isCompleted=!1,t&&this.visiblePageCount>0&&(this.currentPage=this.visiblePages[0])},t.prototype.mergeValues=function(e,t){if(t&&e)for(var n in e){var r=e[n];r&&"object"==typeof r?(t[n]||(t[n]={}),this.mergeValues(r,t[n])):t[n]=r}},t.prototype.updateCustomWidgets=function(e){if(e)for(var t=0;t-1},enumerable:!0,configurable:!0}),t.prototype.setCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT")},t.prototype.deleteCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=;")},t.prototype.nextPage=function(){return!this.isLastPage&&((!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doNextPage(),!0)))},Object.defineProperty(t.prototype,"isCurrentPageHasErrors",{get:function(){return null==this.currentPage||this.currentPage.hasErrors(!0,!0)},enumerable:!0,configurable:!0}),t.prototype.prevPage=function(){if(this.isFirstPage)return!1;var e=this.visiblePages,t=e.indexOf(this.currentPage);this.currentPage=e[t-1]},t.prototype.completeLastPage=function(){return(!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doComplete(),!0))},Object.defineProperty(t.prototype,"isFirstPage",{get:function(){return null==this.currentPage||0==this.visiblePages.indexOf(this.currentPage)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLastPage",{get:function(){if(null==this.currentPage)return!0;var e=this.visiblePages;return e.indexOf(this.currentPage)==e.length-1},enumerable:!0,configurable:!0}),t.prototype.doComplete=function(){this.clearUnusedValues(),this.setCookie(),this.setCompleted(),this.onComplete.fire(this,null),this.surveyPostId&&this.sendResult()},Object.defineProperty(t.prototype,"isValidatingOnServer",{get:function(){return this.isValidatingOnServerValue},enumerable:!0,configurable:!0}),t.prototype.setIsValidatingOnServer=function(e){e!=this.isValidatingOnServer&&(this.isValidatingOnServerValue=e,this.onIsValidatingOnServerChanged())},t.prototype.onIsValidatingOnServerChanged=function(){},t.prototype.doServerValidation=function(){if(!this.onServerValidateQuestions)return!1;for(var e=this,t={data:{},errors:{},survey:this,complete:function(){e.completeServerValidation(t)}},n=0;n"+this.getLocString("completingSurvey")+""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedLoadingHtml",{get:function(){return"

"+this.getLocString("loadingSurvey")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){if(null==this.currentPage)return"";var e=this.visiblePages,t=e.indexOf(this.currentPage)+1;return this.getLocString("progressText").format(t,e.length)},enumerable:!0,configurable:!0}),t.prototype.afterRenderSurvey=function(e){this.onAfterRenderSurvey.fire(this,{survey:this,htmlElement:e})},t.prototype.afterRenderPage=function(e){this.onAfterRenderPage.isEmpty||this.onAfterRenderPage.fire(this,{page:this.currentPage,htmlElement:e})},t.prototype.afterRenderQuestion=function(e,t){this.onAfterRenderQuestion.fire(this,{question:e,htmlElement:t})},t.prototype.afterRenderPanel=function(e,t){this.onAfterRenderPanel.fire(this,{panel:e,htmlElement:t})},t.prototype.uploadFile=function(e,t,n,r){var i=!0;return this.onUploadFile.fire(this,{name:e,file:t,accept:i}),!!i&&(!n&&this.surveyPostId&&this.uploadFileCore(e,t,r),!0)},t.prototype.uploadFileCore=function(e,t,n){var r=this;n&&n("uploading"),(new l.a).sendFile(this.surveyPostId,t,function(t,i){n&&n(t?"success":"error"),t&&r.setValue(e,i)})},t.prototype.getPage=function(e){return this.pages[e]},t.prototype.addPage=function(e){null!=e&&(this.pages.push(e),this.updateVisibleIndexes())},t.prototype.addNewPage=function(e){var t=this.createNewPage(e);return this.addPage(t),t},t.prototype.removePage=function(e){var t=this.pages.indexOf(e);t<0||(this.pages.splice(t,1),this.currentPageValue==e&&(this.currentPage=this.pages.length>0?this.pages[0]:null),this.updateVisibleIndexes())},t.prototype.getQuestionByName=function(e,t){void 0===t&&(t=!1);var n=this.getAllQuestions();t&&(e=e.toLowerCase());for(var r=0;r0&&(this.jsonErrors=t.errors),this.isLoadingFromJsonValue=!1,this.updateProcessedTextValues(),this.hasCookie&&this.doComplete(),this.doElementsOnLoad(),this.runConditions(),this.updateVisibleIndexes()}},t.prototype.onBeforeCreating=function(){},t.prototype.onCreating=function(){},t.prototype.updateProcessedTextValues=function(){this.processedTextValues={};var e=this;this.processedTextValues.pageno=function(t){return null!=e.currentPage?e.visiblePages.indexOf(e.currentPage)+1:0},this.processedTextValues.pagecount=function(t){return e.visiblePageCount};for(var t=this.getAllQuestions(),n=0;n=0;n--){var r=t[n],i=this.getName(e.substring(r.start+1,r.end));if(this.canProcessName(i)&&(!this.onHasValue||this.onHasValue(i))){var o=this.onProcess(i);null==o&&(o=""),e=e.substr(0,r.start)+o+e.substr(r.end+1)}}return e},e.prototype.getItems=function(e){for(var t=[],n=e.length,i=-1,o="",s=0;s-1){var a=new r;a.start=i,a.end=s,t.push(a)}i=-1}return t},e.prototype.getName=function(e){if(e)return e.trim()},e.prototype.canProcessName=function(e){if(!e)return!1;for(var t=0;tn.value?(n.error=new o.c(this.getErrorText(t)),n):this.maxValue&&this.maxValue0&&e.length0&&e.length>this.maxLength?new u(null,new o.c(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return this.minLength>0&&this.maxLength>0?s.a.getString("textMinMaxLength").format(this.minLength,this.maxLength):this.minLength>0?s.a.getString("textMinLength").format(this.minLength):s.a.getString("textMaxLength").format(this.maxLength)},t}(l),d=function(e){function t(t,n){void 0===t&&(t=null),void 0===n&&(n=null);var r=e.call(this)||this;return r.minCount=t,r.maxCount=n,r}return r.b(t,e),t.prototype.getType=function(){return"answercountvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),null==e||e.constructor!=Array)return null;var n=e.length;return this.minCount&&nthis.maxCount?new u(null,new o.c(this.getErrorText(s.a.getString("maxSelectError").format(this.maxCount)))):null},t.prototype.getDefaultErrorText=function(e){return e},t}(l),f=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this)||this;return n.regex=t,n}return r.b(t,e),t.prototype.getType=function(){return"regexvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),this.regex&&e?new RegExp(this.regex).test(e)?null:new u(e,new o.c(this.getErrorText(t))):null},t}(l),g=function(e){function t(){var t=e.call(this)||this;return t.re=/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,t}return r.b(t,e),t.prototype.getType=function(){return"emailvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),e?this.re.test(e)?null:new u(e,new o.c(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return s.a.getString("invalidEmail")},t}(l);a.a.metaData.addClass("surveyvalidator",["text"]),a.a.metaData.addClass("numericvalidator",["minValue:number","maxValue:number"],function(){return new h},"surveyvalidator"),a.a.metaData.addClass("textvalidator",["minLength:number","maxLength:number"],function(){return new p},"surveyvalidator"),a.a.metaData.addClass("answercountvalidator",["minCount:number","maxCount:number"],function(){return new d},"surveyvalidator"),a.a.metaData.addClass("regexvalidator",["regex"],function(){return new f},"surveyvalidator"),a.a.metaData.addClass("emailvalidator",[],function(){return new g},"surveyvalidator")},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(15)),s=n(29),a=n(27),u=n(4),l=n(17),c=n(28),h=n(5);n.d(t,"a",function(){return p});var p=function(e){function t(t){var n=e.call(this,t)||this;return n.isCurrentPageChanged=!1,n.updateSurvey(t),n}return r.b(t,e),Object.defineProperty(t,"cssType",{get:function(){return l.b.currentType},set:function(e){l.b.currentType=e},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(e){this.updateSurvey(e)},t.prototype.componentDidUpdate=function(){this.isCurrentPageChanged&&(this.isCurrentPageChanged=!1,this.survey.focusFirstQuestionAutomatic&&this.survey.focusFirstQuestion())},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.doAfterRenderSurvey(e)},t.prototype.render=function(){return"completed"==this.survey.state?this.renderCompleted():"loading"==this.survey.state?this.renderLoading():this.renderSurvey()},Object.defineProperty(t.prototype,"css",{get:function(){return l.b.getCss()},set:function(e){this.survey.mergeCss(e,this.css)},enumerable:!0,configurable:!0}),t.prototype.renderCompleted=function(){if(!this.survey.showCompletedPage)return null;var e={__html:this.survey.processedCompletedHtml};return i.createElement("div",{dangerouslySetInnerHTML:e})},t.prototype.renderLoading=function(){var e={__html:this.survey.processedLoadingHtml};return i.createElement("div",{dangerouslySetInnerHTML:e})},t.prototype.renderSurvey=function(){var e=this.survey.title&&this.survey.showTitle?this.renderTitle():null,t=this.survey.currentPage?this.renderPage():null,n="top"==this.survey.showProgressBar?this.renderProgress(!0):null,r="bottom"==this.survey.showProgressBar?this.renderProgress(!1):null,o=t&&this.survey.showNavigationButtons?this.renderNavigation():null;return t||(t=this.renderEmptySurvey()),i.createElement("div",{ref:"root",className:this.css.root},e,i.createElement("div",{id:h.e,className:this.css.body},n,t,r),o)},t.prototype.renderTitle=function(){return i.createElement("div",{className:this.css.header},i.createElement("h3",null,this.survey.processedTitle))},t.prototype.renderPage=function(){return i.createElement(s.a,{survey:this.survey,page:this.survey.currentPage,css:this.css,creator:this})},t.prototype.renderProgress=function(e){return i.createElement(c.a,{survey:this.survey,css:this.css,isTop:e})},t.prototype.renderNavigation=function(){return i.createElement(a.a,{survey:this.survey,css:this.css})},t.prototype.renderEmptySurvey=function(){return i.createElement("span",null,this.survey.emptySurveyText)},t.prototype.updateSurvey=function(e){e?e.model?this.survey=e.model:e.json&&(this.survey=new o.a(e.json)):this.survey=new o.a,e&&(e.clientId&&(this.survey.clientId=e.clientId),e.data&&(this.survey.data=e.data),e.css&&this.survey.mergeCss(e.css,this.css));this.survey.currentPage;this.state={pageIndexChange:0,isCompleted:!1,modelChanged:0},this.setSurveyEvents(e)},t.prototype.setSurveyEvents=function(e){var t=this;this.survey.renderCallback=function(){t.state.modelChanged=t.state.modelChanged+1,t.setState(t.state)},this.survey.onComplete.add(function(e){t.state.isCompleted=!0,t.setState(t.state)}),this.survey.onPartialSend.add(function(e){t.setState(t.state)}),this.survey.onCurrentPageChanged.add(function(n,r){t.isCurrentPageChanged=!0,t.state.pageIndexChange=t.state.pageIndexChange+1,t.setState(t.state),e&&e.onCurrentPageChanged&&e.onCurrentPageChanged(n,r)}),this.survey.onVisibleChanged.add(function(e,t){if(t.question&&t.question.react){var n=t.question.react.state;n.visible=t.question.visible,t.question.react.setState(n)}}),this.survey.onValueChanged.add(function(e,t){if(t.question&&t.question.react){var n=t.question.react.state;n.value=t.value,t.question.react.setState(n)}}),e&&(this.survey.onValueChanged.add(function(t,n){e.data&&(e.data[n.name]=n.value),e.onValueChanged&&e.onValueChanged(t,n)}),e.onComplete&&this.survey.onComplete.add(function(t){e.onComplete(t)}),e.onPartialSend&&this.survey.onPartialSend.add(function(t){e.onPartialSend(t)}),this.survey.onPageVisibleChanged.add(function(t,n){e.onPageVisibleChanged&&e.onPageVisibleChanged(t,n)}),e.onServerValidateQuestions&&(this.survey.onServerValidateQuestions=e.onServerValidateQuestions),e.onQuestionAdded&&this.survey.onQuestionAdded.add(function(t,n){e.onQuestionAdded(t,n)}),e.onQuestionRemoved&&this.survey.onQuestionRemoved.add(function(t,n){e.onQuestionRemoved(t,n)}),e.onValidateQuestion&&this.survey.onValidateQuestion.add(function(t,n){e.onValidateQuestion(t,n)}),e.onSendResult&&this.survey.onSendResult.add(function(t,n){e.onSendResult(t,n)}),e.onGetResult&&this.survey.onGetResult.add(function(t,n){e.onGetResult(t,n)}),e.onProcessHtml&&this.survey.onProcessHtml.add(function(t,n){e.onProcessHtml(t,n)}),e.onAfterRenderSurvey&&this.survey.onAfterRenderSurvey.add(function(t,n){e.onAfterRenderSurvey(t,n)}),e.onAfterRenderPage&&this.survey.onAfterRenderPage.add(function(t,n){e.onAfterRenderPage(t,n)}),e.onAfterRenderQuestion&&this.survey.onAfterRenderQuestion.add(function(t,n){e.onAfterRenderQuestion(t,n)}))},t.prototype.createQuestionElement=function(e){var t=this.css[e.getType()];return u.a.Instance.createQuestion(e.getType(),{question:e,css:t,rootCss:this.css,isDisplayMode:e.isReadOnly,creator:this})},t.prototype.renderError=function(e,t){return i.createElement("div",{key:e,className:this.css.error.item},t)},t.prototype.questionTitleLocation=function(){return this.survey.questionTitleLocation},t}(i.Component)},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(18));n.d(t,"a",function(){return s});var s=function(e){function t(t){var n=e.call(this,t)||this;return n.handlePrevClick=n.handlePrevClick.bind(n),n.handleNextClick=n.handleNextClick.bind(n),n.handleCompleteClick=n.handleCompleteClick.bind(n),n}return r.b(t,e),t.prototype.handlePrevClick=function(e){this.survey.prevPage()},t.prototype.handleNextClick=function(e){this.survey.nextPage()},t.prototype.handleCompleteClick=function(e){this.survey.completeLastPage()},t.prototype.render=function(){if(!this.survey||!this.survey.isNavigationButtonsShowing)return null;var e=this.survey.isFirstPage?null:this.renderButton(this.handlePrevClick,this.survey.pagePrevText,this.css.navigation.prev),t=this.survey.isLastPage?null:this.renderButton(this.handleNextClick,this.survey.pageNextText,this.css.navigation.next),n=this.survey.isLastPage&&this.survey.isEditMode?this.renderButton(this.handleCompleteClick,this.survey.completeText,this.css.navigation.complete):null;return i.createElement("div",{className:this.css.footer},e,t,n)},t.prototype.renderButton=function(e,t,n){var r={marginRight:"5px"},o=this.css.navigationButton+(n?" "+n:"");return i.createElement("input",{className:o,style:r,type:"button",onClick:e,value:t})},t}(o.a)},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(18));n.d(t,"a",function(){return s});var s=function(e){function t(t){var n=e.call(this,t)||this;return n.isTop=t.isTop,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.isTop=t.isTop},Object.defineProperty(t.prototype,"progress",{get:function(){return this.survey.getProgress()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){return this.survey.progressText},enumerable:!0,configurable:!0}),t.prototype.render=function(){var e=this.isTop?{width:"60%"}:{width:"60%",marginTop:"10px"},t={width:this.progress+"%"};return i.createElement("div",{className:this.css.progress,style:e},i.createElement("div",{style:t,className:this.css.progressBar,role:"progressbar","aria-valuemin":"0","aria-valuemax":"100"},i.createElement("span",null,this.progressText)))},t}(o.a)},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(14));n.d(t,"a",function(){return s}),n.d(t,"b",function(){return u});var s=function(e){function t(t){var n=e.call(this,t)||this;return n.page=t.page,n.survey=t.survey,n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.page=e.page,this.survey=e.survey,this.creator=e.creator,this.css=e.css},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.afterRenderPage(e)},t.prototype.render=function(){if(null==this.page||null==this.survey||null==this.creator)return null;for(var e=this.renderTitle(),t=[],n=this.page.rows,r=0;r0&&(e=this.page.num+". "+e),i.createElement("h4",{className:this.css.pageTitle},e)},t}(i.Component),a=function(e){function t(t){var n=e.call(this,t)||this;return n.panel=t.panel,n.survey=t.survey,n.creator=t.creator,n.css=t.css,n}return r.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.panel=e.panel,this.survey=e.survey,this.creator=e.creator,this.css=e.css},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.afterRenderPage(e)},t.prototype.render=function(){if(null==this.panel||null==this.survey||null==this.creator)return null;for(var e=this.renderTitle(),t=[],n=this.panel.rows,r=0;r1&&(t="("+t+")"),t},e.prototype.conditionToString=function(e){if(!e.right||!e.operator)return"";var t=e.left;t&&!this.isNumeric(t)&&(t="'"+t+"'");var n=t+" "+this.operationToString(e.operator);if(this.isNoRightOperation(e.operator))return n;var r=e.right;return r&&!this.isNumeric(r)&&(r="'"+r+"'"),n+" "+r},e.prototype.operationToString=function(e){return"equal"==e?"=":"notequal"==e?"!=":"greater"==e?">":"less"==e?"<":"greaterorequal"==e?">=":"lessorequal"==e?"<=":e},e.prototype.isNumeric=function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)},e.prototype.parseText=function(){return this.node=this.root,this.expressionNodes=[],this.expressionNodes.push(this.node),this.readConditions()&&this.at>=this.length},e.prototype.readConditions=function(){var e=this.readCondition();if(!e)return e;var t=this.readConnective();return!t||(this.addConnective(t),this.readConditions())},e.prototype.readCondition=function(){var e=this.readExpression();if(e<0)return!1;if(1==e)return!0;var t=this.readString();if(!t)return!1;var n=this.readOperator();if(!n)return!1;var i=new r.b;if(i.left=t,i.operator=n,!this.isNoRightOperation(n)){var o=this.readString();if(!o)return!1;i.right=o}return this.addCondition(i),!0},e.prototype.readExpression=function(){if(this.skip(),this.at>=this.length||"("!=this.ch)return 0;this.at++,this.pushExpression();var e=this.readConditions();return e?(this.skip(),e=")"==this.ch,this.at++,this.popExpression(),1):-1},Object.defineProperty(e.prototype,"ch",{get:function(){return this.text.charAt(this.at)},enumerable:!0,configurable:!0}),e.prototype.skip=function(){for(;this.at"==e||"<"==e||"="==e||"!"==e},e.prototype.isBrackets=function(e){return"("==e||")"==e},e.prototype.readString=function(){if(this.skip(),this.at>=this.length)return null;var e=this.at,t=this.isQuotes(this.ch);t&&this.at++;for(var n=this.isOperatorChar(this.ch);this.at1&&this.isQuotes(r[0])){var i=r.length-1;this.isQuotes(r[r.length-1])&&i--,r=r.substr(1,i)}return r},e.prototype.isNoRightOperation=function(e){return"empty"==e||"notempty"==e},e.prototype.readOperator=function(){var e=this.readString();return e?(e=e.toLowerCase(),">"==e&&(e="greater"),"<"==e&&(e="less"),">="!=e&&"=>"!=e||(e="greaterorequal"),"<="!=e&&"=<"!=e||(e="lessorequal"),"="!=e&&"=="!=e||(e="equal"),"<>"!=e&&"!="!=e||(e="notequal"),"contain"==e&&(e="contains"),"notcontain"==e&&(e="notcontains"),e):null},e.prototype.readConnective=function(){var e=this.readString();return e?(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e&&(e=null),e):null},e.prototype.pushExpression=function(){var e=new r.c;this.expressionNodes.push(e),this.node=e},e.prototype.popExpression=function(){var e=this.expressionNodes.pop();this.node=this.expressionNodes[this.expressionNodes.length-1],this.node.children.push(e)},e.prototype.addCondition=function(e){this.node.children.push(e)},e.prototype.addConnective=function(e){if(this.node.children.length<2)this.node.connective=e;else if(this.node.connective!=e){var t=this.node.connective,n=this.node.children;this.node.clear(),this.node.connective=e;var i=new r.c;i.connective=t,i.children=n,this.node.children.push(i);var o=new r.c;this.node.children.push(o),this.node=o}},e}()},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.loadSurvey=function(t,n){var r=new XMLHttpRequest;r.open("GET",e.serviceUrl+"/getSurvey?surveyId="+t),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.onload=function(){var e=JSON.parse(r.response);n(200==r.status,e,r.response)},r.send()},e.prototype.sendResult=function(t,n,r,i,o){void 0===i&&(i=null),void 0===o&&(o=!1);var s=new XMLHttpRequest;s.open("POST",e.serviceUrl+"/post/"),s.setRequestHeader("Content-Type","application/json; charset=utf-8");var a={postId:t,surveyResult:JSON.stringify(n)};i&&(a.clientId=i),o&&(a.isPartialCompleted=!0);var u=JSON.stringify(a);s.onload=s.onerror=function(){r&&r(200==s.status,s.response)},s.send(u)},e.prototype.sendFile=function(t,n,r){var i=new XMLHttpRequest;i.onload=i.onerror=function(){r&&r(200==i.status,JSON.parse(i.response))},i.open("POST",e.serviceUrl+"/upload/",!0);var o=new FormData;o.append("file",n),o.append("postId",t),i.send(o)},e.prototype.getResult=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&name="+n;i.open("GET",e.serviceUrl+"/getResult?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null,t=null;if(200==i.status){e=JSON.parse(i.response),t=[];for(var n in e.QuestionResult){var o={name:n,value:e.QuestionResult[n]};t.push(o)}}r(200==i.status,e,t,i.response)},i.send()},e.prototype.isCompleted=function(t,n,r){var i=new XMLHttpRequest,o="resultId="+t+"&clientId="+n;i.open("GET",e.serviceUrl+"/isCompleted?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null;200==i.status&&(e=JSON.parse(i.response)),r(200==i.status,e,i.response)},i.send()},e}();r.serviceUrl="https://dxsurveyapi.azurewebsites.net/api/Survey"},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(5),s=n(33);n.d(t,"a",function(){return a});var a=function(e){function t(t){void 0===t&&(t="");var n=e.call(this,t)||this;return n.name=t,n.numValue=-1,n.navigationButtonsVisibility="inherit",n}return r.b(t,e),t.prototype.getType=function(){return"page"},Object.defineProperty(t.prototype,"num",{get:function(){return this.numValue},set:function(e){this.numValue!=e&&(this.numValue=e,this.onNumChanged(e))},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){for(var e=0;e0},e}(),c=function(e){function t(n){void 0===n&&(n="");var r=e.call(this)||this;r.name=n,r.dataValue=null,r.rowValues=null,r.conditionRunner=null,r.elementsValue=new Array,r.isQuestionsReady=!1,r.questionsValue=new Array,r.parent=null,r.visibleIf="",r.visibleIndex=-1,r.visibleValue=!0,r.idValue=t.getPanelId(),r.locTitleValue=new u.a(r);var i=r;return r.elementsValue.push=function(e){return i.doOnPushElement(this,e)},r.elementsValue.splice=function(e,t){for(var n=[],r=2;r=e.length||o.push(e[s+t]);var a=(u=Array.prototype.splice).call.apply(u,[e,t,n].concat(r));this.markQuestionListDirty(),r||(r=[]);for(var s=0;s-1){n.updateVisible();break}}},t.prototype.buildRows=function(){for(var e=new Array,t=0;t=this.elements.length?this.elements.push(e):this.elements.splice(t,0,e))},t.prototype.addQuestion=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addPanel=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addNewQuestion=function(e,t){var n=a.a.Instance.createQuestion(e,t);return this.addQuestion(n),n},t.prototype.addNewPanel=function(e){var t=this.createNewPanel(e);return this.addPanel(t),t},t.prototype.createNewPanel=function(e){return new h(e)},t.prototype.removeElement=function(e){var t=this.elements.indexOf(e);if(t<0){for(var n=0;n-1&&t.splice(n,1),this.question.value=t,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.item||!this.question)return null;var e=this.question.colCount>0?100/this.question.colCount+"%":"",t=0==this.question.colCount?"5px":"0px",n={marginRight:t};e&&(n.width=e);var r=this.question.value&&this.question.value.indexOf(this.item.value)>-1||!1,i=this.item.value===this.question.otherItem.value&&r?this.renderOther():null;return this.renderCheckbox(r,n,i)},Object.defineProperty(t.prototype,"inputStyle",{get:function(){return{marginRight:"3px"}},enumerable:!0,configurable:!0}),t.prototype.renderCheckbox=function(e,t,n){var r=this.isFirst?this.question.inputId:null;return i.createElement("div",{className:this.css.item,style:t},i.createElement("label",{className:this.css.item},i.createElement("input",{type:"checkbox",id:r,style:this.inputStyle,disabled:this.isDisplayMode,checked:e,onChange:this.handleOnChange}),i.createElement("span",null,this.item.text)),n)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.css.other},i.createElement(s.a,{question:this.question,css:this.rootCss,isDisplayMode:this.isDisplayMode}))},t}(o.a);a.a.Instance.registerQuestion("checkbox",function(e){return i.createElement(u,e)})},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(12),a=n(4),u=n(77);n.d(t,"a",function(){return l});var l=function(e){function t(t){var n=e.call(this,t)||this;n.state={value:n.question.value,choicesChanged:0};var r=n;return n.question.choicesChangedCallback=function(){r.state.choicesChanged=r.state.choicesChanged+1,r.setState(r.state)},n.handleOnChange=n.handleOnChange.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.state.value=this.question.value},t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;var e=this.question.value===this.question.otherItem.value?this.renderOther():null,t=this.renderSelect();return i.createElement("div",{className:this.css.root},t,e)},t.prototype.renderSelect=function(){if(this.isDisplayMode)return i.createElement("div",{id:this.question.inputId,className:this.css.control},this.question.value);for(var e=[],t=0;t0?100/this.question.colCount+"%":"",i=0==this.question.colCount?"5px":"0px",o={marginRight:i};r&&(o.width=r);var s=this.question.value==t.value,a=s&&t.value===this.question.otherItem.value?this.renderOther():null;return this.renderRadio(e,t,s,o,a,n)},t.prototype.renderRadio=function(e,t,n,r,o,s){var a=s?this.question.inputId:null;return i.createElement("div",{key:e,className:this.css.item,style:r},i.createElement("label",{className:this.css.label},i.createElement("input",{id:a,type:"radio",name:this.question.name+"_"+this.questionBase.id,checked:n,value:t.value,disabled:this.isDisplayMode,onChange:this.handleOnChange}),i.createElement("span",{style:this.textStyle},t.text)),o)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.css.other},i.createElement(s.a,{question:this.question,css:this.rootCss,isDisplayMode:this.isDisplayMode}))},t}(o.b);a.a.Instance.registerQuestion("radiogroup",function(e){return i.createElement(u,e)})},function(e,t,n){"use strict";var r=n(0),i=n(3),o=(n.n(i),n(8)),s=n(12),a=n(4);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.handleOnChange=n.handleOnChange.bind(n),n}return r.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;for(var e=[],t=this.question.minRateDescription?this.question.minRateDescription+" ":"",n=this.question.maxRateDescription?" "+this.question.maxRateDescription:"",r=0;r=0},t.prototype.valueFromDataCore=function(e){if(!e||!Array.isArray(e))return e;for(var t=0;t0&&e.size>this.maxSize&&this.errors.push(new a.d(this.maxSize)),(t!=this.errors.length||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback),this.errors.length>0},t.prototype.isFileImage=function(e){if(e&&e.type){return 0==e.type.toLowerCase().indexOf("image")}},t}(i.a);o.a.metaData.addClass("file",["showPreview:boolean","imageHeight","imageWidth","storeDataAsText:boolean","maxSize:number"],function(){return new l("")},"question"),s.a.Instance.registerQuestion("file",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(22),o=n(2),s=n(6),a=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.locHtmlValue=new a.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"html"},Object.defineProperty(t.prototype,"html",{get:function(){return this.locHtml.text},set:function(e){this.locHtml.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locHtml",{get:function(){return this.locHtmlValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedHtml",{get:function(){return this.survey?this.survey.processHtml(this.html):this.html},enumerable:!0,configurable:!0}),t}(i.a);o.a.metaData.addClass("html",[{name:"html:html",serializationProperty:"locHtml"}],function(){return new u("")},"questionbase"),s.a.Instance.registerQuestion("html",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(5),o=n(11),s=n(10),a=n(2),u=n(1),l=n(9),c=n(6);n.d(t,"a",function(){return h}),n.d(t,"b",function(){return p});var h=function(e){function t(t,n,r,i,o){var s=e.call(this)||this;return s.name=t,s.text=n,s.fullName=r,s.data=i,s.rowValue=o,s}return r.b(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.rowValue},set:function(e){this.rowValue=e,this.data&&this.data.onMatrixRowChanged(this),this.onValueChanged()},enumerable:!0,configurable:!0}),t.prototype.onValueChanged=function(){},t}(i.b),p=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.isRowChanging=!1,n.isAllRowRequired=!1,n.columnsValue=o.a.createArray(n),n.rowsValue=o.a.createArray(n),n}return r.b(t,e),t.prototype.getType=function(){return"matrix"},Object.defineProperty(t.prototype,"hasRows",{get:function(){return this.rowsValue.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columns",{get:function(){return this.columnsValue},set:function(e){o.a.setData(this.columnsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.rowsValue},set:function(e){o.a.setData(this.rowsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRows",{get:function(){var e=new Array,t=this.value;t||(t={});for(var n=0;nt.MaxRowCount)){if(this.rowCountValue=e,this.value&&this.value.length>e){var n=this.value;n.splice(e),this.value=n}this.fireCallback(this.rowCountChangedCallback)}},enumerable:!0,configurable:!0}),t.prototype.addRow=function(){this.generatedVisibleRows&&this.generatedVisibleRows.push(this.createMatrixRow(null)),this.rowCount++},t.prototype.removeRow=function(e){if(!(e<0||e>=this.rowCount)){if(this.generatedVisibleRows&&ethis.rowCount&&t.splice(this.rowCount-1);for(var n=t.length;n0){n=!1;break}return n?null:e},t.prototype.getRowValueByIndex=function(e,t){return t>=0&&t4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getRows=function(){for(var e=this.colCount,t=this.items,n=[],r=0,i=0;i=e&&(r=0);return n},t.prototype.onValueChanged=function(){e.prototype.onValueChanged.call(this),this.onItemValueChanged()},t.prototype.createTextItem=function(e,t){return new h(e,t)},t.prototype.onItemValueChanged=function(){if(!this.isMultipleItemValueChanging)for(var e=0;e0?this.rateValues:t.defaultRateValues},enumerable:!0,configurable:!0}),t.prototype.getType=function(){return"rating"},t.prototype.supportGoNextPageAutomatic=function(){return!0},t.prototype.supportComment=function(){return!0},t.prototype.supportOther=function(){return!0},Object.defineProperty(t.prototype,"minRateDescription",{get:function(){return this.locMinRateDescription.text},set:function(e){this.locMinRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMinRateDescription",{get:function(){return this.locMinRateDescriptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxRateDescription",{get:function(){return this.locMaxRateDescription.text},set:function(e){this.locMaxRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMaxRateDescription",{get:function(){return this.locMaxRateDescriptionValue},enumerable:!0,configurable:!0}),t}(o.a);l.defaultRateValues=[],i.a.setData(l.defaultRateValues,[1,2,3,4,5]),s.a.metaData.addClass("rating",["hasComment:boolean",{name:"rateValues:itemvalues",onGetValue:function(e){return i.a.getData(e.rateValues)},onSetValue:function(e,t){e.rateValues=t}},{name:"minRateDescription",alternativeName:"mininumRateDescription",serializationProperty:"locMinRateDescription"},{name:"maxRateDescription",alternativeName:"maximumRateDescription",serializationProperty:"locMaxRateDescription"}],function(){return new l("")},"question"),a.a.Instance.registerQuestion("rating",function(e){return new l(e)})},function(e,t,n){"use strict";var r=n(0),i=n(6),o=n(2),s=n(10),a=n(7);n.d(t,"a",function(){return u});var u=function(e){function t(t){var n=e.call(this,t)||this;return n.name=t,n.size=25,n.inputType="text",n.locPlaceHolderValue=new a.a(n),n}return r.b(t,e),t.prototype.getType=function(){return"text"},t.prototype.isEmpty=function(){return e.prototype.isEmpty.call(this)||""==this.value},t.prototype.supportGoNextPageAutomatic=function(){return!0},Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),t.prototype.setNewValue=function(t){t=this.correctValueType(t),e.prototype.setNewValue.call(this,t)},t.prototype.correctValueType=function(e){return e&&("number"==this.inputType||"range"==this.inputType)?this.isNumber(e)?parseFloat(e):"":e},t.prototype.isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},t}(s.a);o.a.metaData.addClass("text",[{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]},{name:"size:number",default:25},{name:"placeHolder",serializationProperty:"locPlaceHolder"}],function(){return new u("")},"question"),i.a.Instance.registerQuestion("text",function(e){return new u(e)})},function(e,t,n){"use strict";var r=n(0),i=n(5),o=n(23);n.d(t,"a",function(){return s});var s=function(e){function t(t){var n=e.call(this)||this;return n.surveyValue=n.createSurvey(t),n.surveyValue.showTitle=!1,n.windowElement=document.createElement("div"),n}return r.b(t,e),t.prototype.getType=function(){return"window"},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isShowing",{get:function(){return this.isShowingValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpanded",{get:function(){return this.isExpandedValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{get:function(){return this.titleValue?this.titleValue:this.survey.title},set:function(e){this.titleValue=e},enumerable:!0,configurable:!0}),t.prototype.expand=function(){this.expandcollapse(!0)},t.prototype.collapse=function(){this.expandcollapse(!1)},t.prototype.createSurvey=function(e){return new o.a(e)},t.prototype.expandcollapse=function(e){this.isExpandedValue=e},t}(i.b);s.surveyElementName="windowSurveyJS"},function(e,t,n){"use strict";var r=n(0),i=n(5),o=n(2);n.d(t,"e",function(){return s}),n.d(t,"a",function(){return a}),n.d(t,"d",function(){return u}),n.d(t,"b",function(){return l}),n.d(t,"c",function(){return c});var s=function(e){function t(){var t=e.call(this)||this;return t.opValue="equal",t}return r.b(t,e),Object.defineProperty(t,"operators",{get:function(){return null!=t.operatorsValue?t.operatorsValue:(t.operatorsValue={empty:function(e,t){return!e},notempty:function(e,t){return!!e},equal:function(e,t){return e==t},notequal:function(e,t){return e!=t},contains:function(e,t){return e&&e.indexOf&&e.indexOf(t)>-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},t.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"operator",{get:function(){return this.opValue},set:function(e){e&&(e=e.toLowerCase(),t.operators[e]&&(this.opValue=e))},enumerable:!0,configurable:!0}),t.prototype.check=function(e){t.operators[this.operator](e,this.value)?this.onSuccess():this.onFailure()},t.prototype.onSuccess=function(){},t.prototype.onFailure=function(){},t}(i.b);s.operatorsValue=null;var a=function(e){function t(){var t=e.call(this)||this;return t.owner=null,t}return r.b(t,e),t.prototype.setOwner=function(e){this.owner=e},Object.defineProperty(t.prototype,"isOnNextPage",{get:function(){return!1},enumerable:!0,configurable:!0}),t}(s),u=function(e){function t(){var t=e.call(this)||this;return t.pages=[],t.questions=[],t}return r.b(t,e),t.prototype.getType=function(){return"visibletrigger"},t.prototype.onSuccess=function(){this.onTrigger(this.onItemSuccess)},t.prototype.onFailure=function(){this.onTrigger(this.onItemFailure)},t.prototype.onTrigger=function(e){if(this.owner)for(var t=this.owner.getObjects(this.pages,this.questions),n=0;n= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyLocalization; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return surveyStrings; }); +var surveyLocalization = { + currentLocale: "", + locales: {}, + getString: function (strName) { + var loc = this.currentLocale ? this.locales[this.currentLocale] : surveyStrings; + if (!loc || !loc[strName]) + loc = surveyStrings; + return loc[strName]; + }, + getLocales: function () { + var res = []; + res.push(""); + for (var key in this.locales) { + res.push(key); + } + res.sort(); + return res; + } +}; +var surveyStrings = { + pagePrevText: "Previous", + pageNextText: "Next", + completeText: "Complete", + otherItemText: "Other (describe)", + progressText: "Page {0} of {1}", + emptySurvey: "There is no visible page or question in the survey.", + completingSurvey: "Thank you for completing the survey!", + loadingSurvey: "Survey is loading...", + optionsCaption: "Choose...", + requiredError: "Please answer the question.", + requiredInAllRowsError: "Please answer questions in all rows.", + numericError: "The value should be numeric.", + textMinLength: "Please enter at least {0} symbols.", + textMaxLength: "Please enter less than {0} symbols.", + textMinMaxLength: "Please enter more than {0} and less than {1} symbols.", + minRowCountError: "Please fill in at least {0} rows.", + minSelectError: "Please select at least {0} variants.", + maxSelectError: "Please select no more than {0} variants.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "The '{0}' should be equal or more than {1}", + numericMax: "The '{0}' should be equal or less than {1}", + invalidEmail: "Please enter a valid e-mail address.", + urlRequestError: "The request returned error '{0}'. {1}", + urlGetChoicesError: "The request returned empty data or the 'path' property is incorrect", + exceedMaxSize: "The file size should not exceed {0}.", + otherRequiredError: "Please enter the other value.", + uploadingFile: "Your file is uploading. Please wait several seconds and try again.", + addRow: "Add row", + removeRow: "Remove", + choices_firstItem: "first item", + choices_secondItem: "second item", + choices_thirdItem: "third item", + matrix_column: "Column", + matrix_row: "Row" +}; +surveyLocalization.locales["en"] = surveyStrings; +if (!String.prototype["format"]) { + String.prototype["format"] = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match; + }); + }; +} + + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_2__; + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return JsonObjectProperty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return JsonMetadataClass; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return JsonMetadata; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return JsonError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return JsonUnknownPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return JsonMissingTypeErrorBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return JsonMissingTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return JsonIncorrectTypeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return JsonRequiredPropertyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return JsonObject; }); + +var JsonObjectProperty = (function () { + function JsonObjectProperty(name) { + this.name = name; + this.typeValue = null; + this.choicesValue = null; + this.choicesfunc = null; + this.className = null; + this.alternativeName = null; + this.classNamePart = null; + this.baseClassName = null; + this.defaultValue = null; + this.readOnly = false; + this.visible = true; + this.isLocalizable = false; + this.serializationProperty = null; + this.onGetValue = null; + } + Object.defineProperty(JsonObjectProperty.prototype, "type", { + get: function () { return this.typeValue ? this.typeValue : "string"; }, + set: function (value) { this.typeValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseGetValue", { + get: function () { return this.onGetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.isDefaultValue = function (value) { + return (this.defaultValue) ? (this.defaultValue == value) : !(value); + }; + JsonObjectProperty.prototype.getValue = function (obj) { + if (this.onGetValue) + return this.onGetValue(obj); + if (this.serializationProperty) + return obj[this.serializationProperty].getJson(); + return obj[this.name]; + }; + JsonObjectProperty.prototype.getPropertyValue = function (obj) { + if (this.isLocalizable) + return obj[this.serializationProperty].text; + return this.getValue(obj); + }; + Object.defineProperty(JsonObjectProperty.prototype, "hasToUseSetValue", { + get: function () { return this.onSetValue || this.serializationProperty; }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) { + if (this.onSetValue) { + this.onSetValue(obj, value, jsonConv); + } + else { + if (this.serializationProperty) + obj[this.serializationProperty].setJson(value); + else + obj[this.name] = value; + } + }; + JsonObjectProperty.prototype.getObjType = function (objType) { + if (!this.classNamePart) + return objType; + return objType.replace(this.classNamePart, ""); + }; + JsonObjectProperty.prototype.getClassName = function (className) { + return (this.classNamePart && className.indexOf(this.classNamePart) < 0) ? className + this.classNamePart : className; + }; + Object.defineProperty(JsonObjectProperty.prototype, "choices", { + get: function () { + if (this.choicesValue != null) + return this.choicesValue; + if (this.choicesfunc != null) + return this.choicesfunc(); + return null; + }, + enumerable: true, + configurable: true + }); + JsonObjectProperty.prototype.setChoices = function (value, valueFunc) { + this.choicesValue = value; + this.choicesfunc = valueFunc; + }; + return JsonObjectProperty; +}()); + +var JsonMetadataClass = (function () { + function JsonMetadataClass(name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + this.name = name; + this.creator = creator; + this.parentName = parentName; + this.properties = null; + this.requiredProperties = null; + this.properties = new Array(); + for (var i = 0; i < properties.length; i++) { + var prop = this.createProperty(properties[i]); + if (prop) { + this.properties.push(prop); + } + } + } + JsonMetadataClass.prototype.find = function (name) { + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == name) + return this.properties[i]; + } + return null; + }; + JsonMetadataClass.prototype.createProperty = function (propInfo) { + var propertyName = typeof propInfo === "string" ? propInfo : propInfo.name; + if (!propertyName) + return; + var propertyType = null; + var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol); + if (typeIndex > -1) { + propertyType = propertyName.substring(typeIndex + 1); + propertyName = propertyName.substring(0, typeIndex); + } + propertyName = this.getPropertyName(propertyName); + var prop = new JsonObjectProperty(propertyName); + if (propertyType) { + prop.type = propertyType; + } + if (typeof propInfo === "object") { + if (propInfo.type) { + prop.type = propInfo.type; + } + if (propInfo.default) { + prop.defaultValue = propInfo.default; + } + if (propInfo.visible === false) { + prop.visible = false; + } + if (propInfo.isRequired) { + this.makePropertyRequired(prop.name); + } + if (propInfo.choices) { + var choicesFunc = typeof propInfo.choices === "function" ? propInfo.choices : null; + var choicesValue = typeof propInfo.choices !== "function" ? propInfo.choices : null; + prop.setChoices(choicesValue, choicesFunc); + } + if (propInfo.onGetValue) { + prop.onGetValue = propInfo.onGetValue; + } + if (propInfo.onSetValue) { + prop.onSetValue = propInfo.onSetValue; + } + if (propInfo.serializationProperty) { + prop.serializationProperty = propInfo.serializationProperty; + var s; + if (prop.serializationProperty && prop.serializationProperty.indexOf("loc") == 0) { + prop.isLocalizable = true; + } + } + if (propInfo.isLocalizable) { + prop.isLocalizable = propInfo.isLocalizable; + } + if (propInfo.className) { + prop.className = propInfo.className; + } + if (propInfo.baseClassName) { + prop.baseClassName = propInfo.baseClassName; + } + if (propInfo.classNamePart) { + prop.classNamePart = propInfo.classNamePart; + } + if (propInfo.alternativeName) { + prop.alternativeName = propInfo.alternativeName; + } + } + return prop; + }; + JsonMetadataClass.prototype.getPropertyName = function (propertyName) { + if (propertyName.length == 0 || propertyName[0] != JsonMetadataClass.requiredSymbol) + return propertyName; + propertyName = propertyName.slice(1); + this.makePropertyRequired(propertyName); + return propertyName; + }; + JsonMetadataClass.prototype.makePropertyRequired = function (propertyName) { + if (!this.requiredProperties) { + this.requiredProperties = new Array(); + } + this.requiredProperties.push(propertyName); + }; + return JsonMetadataClass; +}()); + +JsonMetadataClass.requiredSymbol = '!'; +JsonMetadataClass.typeSymbol = ':'; +var JsonMetadata = (function () { + function JsonMetadata() { + this.classes = {}; + this.childrenClasses = {}; + this.classProperties = {}; + this.classRequiredProperties = {}; + } + JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) { + if (creator === void 0) { creator = null; } + if (parentName === void 0) { parentName = null; } + var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName); + this.classes[name] = metaDataClass; + if (parentName) { + var children = this.childrenClasses[parentName]; + if (!children) { + this.childrenClasses[parentName] = []; + } + this.childrenClasses[parentName].push(metaDataClass); + } + return metaDataClass; + }; + JsonMetadata.prototype.overrideClassCreatore = function (name, creator) { + var metaDataClass = this.findClass(name); + if (metaDataClass) { + metaDataClass.creator = creator; + } + }; + JsonMetadata.prototype.getProperties = function (className) { + var properties = this.classProperties[className]; + if (!properties) { + properties = new Array(); + this.fillProperties(className, properties); + this.classProperties[className] = properties; + } + return properties; + }; + JsonMetadata.prototype.findProperty = function (className, propertyName) { + var properties = this.getProperties(className); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == propertyName) + return properties[i]; + } + return null; + }; + JsonMetadata.prototype.createClass = function (name) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return null; + return metaDataClass.creator(); + }; + JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) { + if (canBeCreated === void 0) { canBeCreated = false; } + var result = []; + this.fillChildrenClasses(name, canBeCreated, result); + return result; + }; + JsonMetadata.prototype.getRequiredProperties = function (name) { + var properties = this.classRequiredProperties[name]; + if (!properties) { + properties = new Array(); + this.fillRequiredProperties(name, properties); + this.classRequiredProperties[name] = properties; + } + return properties; + }; + JsonMetadata.prototype.addProperty = function (className, propertyInfo) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return; + var property = metaDataClass.createProperty(propertyInfo); + if (property) { + this.addPropertyToClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.removeProperty = function (className, propertyName) { + var metaDataClass = this.findClass(className); + if (!metaDataClass) + return false; + var property = metaDataClass.find(propertyName); + if (property) { + this.removePropertyFromClass(metaDataClass, property); + this.emptyClassPropertiesHash(metaDataClass); + } + }; + JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) { + if (metaDataClass.find(property.name) != null) + return; + metaDataClass.properties.push(property); + }; + JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) { + var index = metaDataClass.properties.indexOf(property); + if (index < 0) + return; + metaDataClass.properties.splice(index, 1); + if (metaDataClass.requiredProperties) { + index = metaDataClass.requiredProperties.indexOf(property.name); + if (index >= 0) { + metaDataClass.requiredProperties.splice(index, 1); + } + } + }; + JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) { + this.classProperties[metaDataClass.name] = null; + var childClasses = this.getChildrenClasses(metaDataClass.name); + for (var i = 0; i < childClasses.length; i++) { + this.classProperties[childClasses[i].name] = null; + } + }; + JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) { + var children = this.childrenClasses[name]; + if (!children) + return; + for (var i = 0; i < children.length; i++) { + if (!canBeCreated || children[i].creator) { + result.push(children[i]); + } + this.fillChildrenClasses(children[i].name, canBeCreated, result); + } + }; + JsonMetadata.prototype.findClass = function (name) { + return this.classes[name]; + }; + JsonMetadata.prototype.fillProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.parentName) { + this.fillProperties(metaDataClass.parentName, list); + } + for (var i = 0; i < metaDataClass.properties.length; i++) { + this.addPropertyCore(metaDataClass.properties[i], list, list.length); + } + }; + JsonMetadata.prototype.addPropertyCore = function (property, list, endIndex) { + var index = -1; + for (var i = 0; i < endIndex; i++) { + if (list[i].name == property.name) { + index = i; + break; + } + } + if (index < 0) { + list.push(property); + } + else { + list[index] = property; + } + }; + JsonMetadata.prototype.fillRequiredProperties = function (name, list) { + var metaDataClass = this.findClass(name); + if (!metaDataClass) + return; + if (metaDataClass.requiredProperties) { + Array.prototype.push.apply(list, metaDataClass.requiredProperties); + } + if (metaDataClass.parentName) { + this.fillRequiredProperties(metaDataClass.parentName, list); + } + }; + return JsonMetadata; +}()); + +var JsonError = (function () { + function JsonError(type, message) { + this.type = type; + this.message = message; + this.description = ""; + this.at = -1; + } + JsonError.prototype.getFullDescription = function () { + return this.message + (this.description ? "\n" + this.description : ""); + }; + return JsonError; +}()); + +var JsonUnknownPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonUnknownPropertyError, _super); + function JsonUnknownPropertyError(propertyName, className) { + var _this = _super.call(this, "unknownproperty", "The property '" + propertyName + "' in class '" + className + "' is unknown.") || this; + _this.propertyName = propertyName; + _this.className = className; + var properties = JsonObject.metaData.getProperties(className); + if (properties) { + _this.description = "The list of available properties are: "; + for (var i = 0; i < properties.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += properties[i].name; + } + _this.description += '.'; + } + return _this; + } + return JsonUnknownPropertyError; +}(JsonError)); + +var JsonMissingTypeErrorBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeErrorBase, _super); + function JsonMissingTypeErrorBase(baseClassName, type, message) { + var _this = _super.call(this, type, message) || this; + _this.baseClassName = baseClassName; + _this.type = type; + _this.message = message; + _this.description = "The following types are available: "; + var types = JsonObject.metaData.getChildrenClasses(baseClassName, true); + for (var i = 0; i < types.length; i++) { + if (i > 0) + _this.description += ", "; + _this.description += "'" + types[i].name + "'"; + } + _this.description += "."; + return _this; + } + return JsonMissingTypeErrorBase; +}(JsonError)); + +var JsonMissingTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonMissingTypeError, _super); + function JsonMissingTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "missingtypeproperty", "The property type is missing in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonMissingTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonIncorrectTypeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonIncorrectTypeError, _super); + function JsonIncorrectTypeError(propertyName, baseClassName) { + var _this = _super.call(this, baseClassName, "incorrecttypeproperty", "The property type is incorrect in the object. Please take a look at property: '" + propertyName + "'.") || this; + _this.propertyName = propertyName; + _this.baseClassName = baseClassName; + return _this; + } + return JsonIncorrectTypeError; +}(JsonMissingTypeErrorBase)); + +var JsonRequiredPropertyError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](JsonRequiredPropertyError, _super); + function JsonRequiredPropertyError(propertyName, className) { + var _this = _super.call(this, "requiredproperty", "The property '" + propertyName + "' is required in class '" + className + "'.") || this; + _this.propertyName = propertyName; + _this.className = className; + return _this; + } + return JsonRequiredPropertyError; +}(JsonError)); + +var JsonObject = (function () { + function JsonObject() { + this.errors = new Array(); + } + Object.defineProperty(JsonObject, "metaData", { + get: function () { return JsonObject.metaDataValue; }, + enumerable: true, + configurable: true + }); + JsonObject.prototype.toJsonObject = function (obj) { + return this.toJsonObjectCore(obj, null); + }; + JsonObject.prototype.toObject = function (jsonObj, obj) { + if (!jsonObj) + return; + var properties = null; + if (obj.getType) { + properties = JsonObject.metaData.getProperties(obj.getType()); + } + if (!properties) + return; + for (var key in jsonObj) { + if (key == JsonObject.typePropertyName) + continue; + if (key == JsonObject.positionPropertyName) { + obj[key] = jsonObj[key]; + continue; + } + var property = this.findProperty(properties, key); + if (!property) { + this.addNewError(new JsonUnknownPropertyError(key.toString(), obj.getType()), jsonObj); + continue; + } + this.valueToObj(jsonObj[key], obj, key, property); + } + }; + JsonObject.prototype.toJsonObjectCore = function (obj, property) { + if (!obj.getType) + return obj; + var result = {}; + if (property != null && (!property.className)) { + result[JsonObject.typePropertyName] = property.getObjType(obj.getType()); + } + var properties = JsonObject.metaData.getProperties(obj.getType()); + for (var i = 0; i < properties.length; i++) { + this.valueToJson(obj, result, properties[i]); + } + return result; + }; + JsonObject.prototype.valueToJson = function (obj, result, property) { + var value = property.getValue(obj); + if (value === undefined || value === null) + return; + if (property.isDefaultValue(value)) + return; + if (this.isValueArray(value)) { + var arrValue = []; + for (var i = 0; i < value.length; i++) { + arrValue.push(this.toJsonObjectCore(value[i], property)); + } + value = arrValue.length > 0 ? arrValue : null; + } + else { + value = this.toJsonObjectCore(value, property); + } + if (!property.isDefaultValue(value)) { + result[property.name] = value; + } + }; + JsonObject.prototype.valueToObj = function (value, obj, key, property) { + if (value == null) + return; + if (property != null && property.hasToUseSetValue) { + property.setValue(obj, value, this); + return; + } + if (this.isValueArray(value)) { + this.valueToArray(value, obj, property.name, property); + return; + } + var newObj = this.createNewObj(value, property); + if (newObj.newObj) { + this.toObject(value, newObj.newObj); + value = newObj.newObj; + } + if (!newObj.error) { + obj[property.name] = value; + } + }; + JsonObject.prototype.isValueArray = function (value) { return value && Array.isArray(value); }; + JsonObject.prototype.createNewObj = function (value, property) { + var result = { newObj: null, error: null }; + var className = value[JsonObject.typePropertyName]; + if (!className && property != null && property.className) { + className = property.className; + } + className = property.getClassName(className); + result.newObj = (className) ? JsonObject.metaData.createClass(className) : null; + result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className); + return result; + }; + JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) { + var error = null; + if (newObj) { + var requiredProperties = JsonObject.metaData.getRequiredProperties(className); + if (requiredProperties) { + for (var i = 0; i < requiredProperties.length; i++) { + if (!value[requiredProperties[i]]) { + error = new JsonRequiredPropertyError(requiredProperties[i], className); + break; + } + } + } + } + else { + if (property.baseClassName) { + if (!className) { + error = new JsonMissingTypeError(property.name, property.baseClassName); + } + else { + error = new JsonIncorrectTypeError(property.name, property.baseClassName); + } + } + } + if (error) { + this.addNewError(error, value); + } + return error; + }; + JsonObject.prototype.addNewError = function (error, jsonObj) { + if (jsonObj && jsonObj[JsonObject.positionPropertyName]) { + error.at = jsonObj[JsonObject.positionPropertyName].start; + } + this.errors.push(error); + }; + JsonObject.prototype.valueToArray = function (value, obj, key, property) { + if (obj[key] && value.length > 0) + obj[key].splice(0, obj[key].length); + for (var i = 0; i < value.length; i++) { + var newValue = this.createNewObj(value[i], property); + if (newValue.newObj) { + obj[key].push(newValue.newObj); + this.toObject(value[i], newValue.newObj); + } + else { + if (!newValue.error) { + obj[key].push(value[i]); + } + } + } + }; + JsonObject.prototype.findProperty = function (properties, key) { + if (!properties) + return null; + for (var i = 0; i < properties.length; i++) { + var prop = properties[i]; + if (prop.name == key || prop.alternativeName == key) + return prop; + } + return null; + }; + return JsonObject; +}()); + +JsonObject.typePropertyName = "type"; +JsonObject.positionPropertyName = "pos"; +JsonObject.metaDataValue = new JsonMetadata(); + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var Vue = _interopDefault(__webpack_require__(2)); +var VueClassComponent = __webpack_require__(102); +var VueClassComponent__default = _interopDefault(VueClassComponent); +__webpack_require__(55); + +/** vue-property-decorator verson 4.0.0 MIT LICENSE copyright 2017 kaorun343 */ +/** + * decorator of an inject + * @param key key + * @return PropertyDecorator + */ +function Inject(key) { + return VueClassComponent.createDecorator(function (componentOptions, k) { + if (typeof componentOptions.inject === 'undefined') { + componentOptions.inject = {}; + } + if (!Array.isArray(componentOptions.inject)) { + componentOptions.inject[k] = key || k; + } + }); +} +/** + * decorator of model + * @param event event name + * @return PropertyDecorator + */ +function Model(event) { + return VueClassComponent.createDecorator(function (componentOptions, prop) { + componentOptions.model = { prop: prop, event: event }; + }); +} +/** + * @brief Makes a decorator for prop. + * + * @param options The options + * @param target The target + * @param key The key + * + * @return PropertyDecorator + */ +function makePropDecorator(options) { + if (options === void 0) { options = {}; } + return function (target, key) { + if (!Array.isArray(options) && typeof options.type === 'undefined') { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") { + options.type = Reflect.getMetadata('design:type', target, key); + } + else { + options.type = null; + } + } + VueClassComponent.createDecorator(function (componentOptions, k) { + (componentOptions.props || (componentOptions.props = {}))[k] = options; + })(target, key); + }; +} +function Prop(options, key) { + if (options === void 0) { options = {}; } + if (options instanceof Vue) { + return makePropDecorator()(options, key); + } + else { + return makePropDecorator(options); + } +} +/** + * decorator of a watch function + * @param path the path or the expression to observe + * @param WatchOption + * @return MethodDecorator + */ +function Watch(path, options) { + if (options === void 0) { options = {}; } + var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b; + return VueClassComponent.createDecorator(function (componentOptions, handler) { + if (typeof componentOptions.watch !== 'object') { + componentOptions.watch = Object.create(null); + } + componentOptions.watch[path] = { handler: handler, deep: deep, immediate: immediate }; + }); +} +var prop = Prop; +var watch = Watch; +var Component = VueClassComponent__default; + +exports.Inject = Inject; +exports.Model = Model; +exports.Prop = Prop; +exports.Watch = Watch; +exports.prop = prop; +exports.watch = watch; +exports.Component = Component; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +module.exports = function normalizeComponent ( + rawScriptExports, + compiledTemplate, + scopeId, + cssModules +) { + var esModule + var scriptExports = rawScriptExports = rawScriptExports || {} + + // ES6 modules interop + var type = typeof rawScriptExports.default + if (type === 'object' || type === 'function') { + esModule = rawScriptExports + scriptExports = rawScriptExports.default + } + + // Vue.extend constructor export interop + var options = typeof scriptExports === 'function' + ? scriptExports.options + : scriptExports + + // render functions + if (compiledTemplate) { + options.render = compiledTemplate.render + options.staticRenderFns = compiledTemplate.staticRenderFns + } + + // scopedId + if (scopeId) { + options._scopeId = scopeId + } + + // inject cssModules + if (cssModules) { + var computed = options.computed || (options.computed = {}) + Object.keys(cssModules).forEach(function (key) { + var module = cssModules[key] + computed[key] = function () { return module } + }) + } + + return { + esModule: esModule, + exports: scriptExports, + options: options + } +} + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Base; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyPageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Event; }); +var Base = (function () { + function Base() { + } + Base.prototype.getType = function () { + throw new Error('This method is abstract'); + }; + Base.prototype.isTwoValueEquals = function (x, y) { + if (x === y) + return true; + if (!(x instanceof Object) || !(y instanceof Object)) + return false; + for (var p in x) { + if (!x.hasOwnProperty(p)) + continue; + if (!y.hasOwnProperty(p)) + return false; + if (x[p] === y[p]) + continue; + if (typeof (x[p]) !== "object") + return false; + if (!this.isTwoValueEquals(x[p], y[p])) + return false; + } + for (p in y) { + if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) + return false; + } + return true; + }; + return Base; +}()); + +var SurveyError = (function () { + function SurveyError() { + } + SurveyError.prototype.getText = function () { + throw new Error('This method is abstract'); + }; + return SurveyError; +}()); + +var SurveyPageId; +SurveyPageId = "sq_page"; +var SurveyElement = (function () { + function SurveyElement() { + } + SurveyElement.ScrollElementToTop = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (!el || !el.scrollIntoView) + return false; + var elemTop = el.getBoundingClientRect().top; + if (elemTop < 0) + el.scrollIntoView(); + return elemTop < 0; + }; + SurveyElement.GetFirstNonTextElement = function (elements) { + if (!elements || !elements.length) + return; + for (var i = 0; i < elements.length; i++) { + if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") + return elements[i]; + } + return null; + }; + SurveyElement.FocusElement = function (elementId) { + if (!elementId) + return false; + var el = document.getElementById(elementId); + if (el) { + el.focus(); + return true; + } + return false; + }; + return SurveyElement; +}()); + +var Event = (function () { + function Event() { + } + Object.defineProperty(Event.prototype, "isEmpty", { + get: function () { return this.callbacks == null || this.callbacks.length == 0; }, + enumerable: true, + configurable: true + }); + Event.prototype.fire = function (sender, options) { + if (this.callbacks == null) + return; + for (var i = 0; i < this.callbacks.length; i++) { + var callResult = this.callbacks[i](sender, options); + } + }; + Event.prototype.add = function (func) { + if (this.callbacks == null) { + this.callbacks = new Array(); + } + this.callbacks.push(func); + }; + Event.prototype.remove = function (func) { + if (this.callbacks == null) + return; + var index = this.callbacks.indexOf(func, 0); + if (index != undefined) { + this.callbacks.splice(index, 1); + } + }; + return Event; +}()); + + + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFactory; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ElementFactory; }); + +//TODO replace completely with ElementFactory +var QuestionFactory = (function () { + function QuestionFactory() { + this.creatorHash = {}; + } + Object.defineProperty(QuestionFactory, "DefaultChoices", { + get: function () { + return ["1|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_firstItem"), "2|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_secondItem"), "3|" + __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("choices_thirdItem")]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultColums", { + get: function () { + var colName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_column") + " "; + return [colName + "1", colName + "2", colName + "3"]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionFactory, "DefaultRows", { + get: function () { + var rowName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].getString("matrix_row") + " "; + return [rowName + "1", rowName + "2"]; + }, + enumerable: true, + configurable: true + }); + QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) { + this.creatorHash[questionType] = questionCreator; + }; + QuestionFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + QuestionFactory.prototype.getAllTypes = function () { + var result = new Array(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + QuestionFactory.prototype.createQuestion = function (questionType, name) { + var creator = this.creatorHash[questionType]; + if (creator == null) + return null; + return creator(name); + }; + return QuestionFactory; +}()); + +QuestionFactory.Instance = new QuestionFactory(); +var ElementFactory = (function () { + function ElementFactory() { + this.creatorHash = {}; + } + ElementFactory.prototype.registerElement = function (elementType, elementCreator) { + this.creatorHash[elementType] = elementCreator; + }; + ElementFactory.prototype.clear = function () { + this.creatorHash = {}; + }; + ElementFactory.prototype.getAllTypes = function () { + var result = QuestionFactory.Instance.getAllTypes(); + for (var key in this.creatorHash) { + result.push(key); + } + return result.sort(); + }; + ElementFactory.prototype.createElement = function (elementType, name) { + var creator = this.creatorHash[elementType]; + if (creator == null) + return QuestionFactory.Instance.createQuestion(elementType, name); + return creator(name); + }; + return ElementFactory; +}()); + +ElementFactory.Instance = new ElementFactory(); + + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LocalizableString; }); +var LocalizableString = (function () { + function LocalizableString(owner) { + this.owner = owner; + this.values = {}; + } + Object.defineProperty(LocalizableString.prototype, "locale", { + get: function () { return this.owner ? this.owner.getLocale() : ""; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LocalizableString.prototype, "text", { + get: function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return ""; + var loc = this.locale; + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + if (!res && loc !== LocalizableString.defaultLocale) { + res = this.values[LocalizableString.defaultLocale]; + } + return res ? res : this.values[keys[0]]; + }, + set: function (value) { + this.setLocaleText(this.locale, value); + }, + enumerable: true, + configurable: true + }); + LocalizableString.prototype.getLocaleText = function (loc) { + if (!loc) + loc = LocalizableString.defaultLocale; + var res = this.values[loc]; + return res ? res : ""; + }; + LocalizableString.prototype.setLocaleText = function (loc, value) { + if (!loc) + loc = LocalizableString.defaultLocale; + if (!value) { + if (this.values[loc]) + delete this.values[loc]; + } + else { + if (typeof value === 'string') { + if (loc != LocalizableString.defaultLocale && value == this.getLocaleText(LocalizableString.defaultLocale)) { + this.setLocaleText(loc, null); + } + else { + this.values[loc] = value; + if (loc == LocalizableString.defaultLocale) { + this.deleteValuesEqualsToDefault(value); + } + } + } + } + }; + LocalizableString.prototype.getJson = function () { + var keys = Object.keys(this.values); + if (keys.length == 0) + return null; + if (keys.length == 1 && keys[0] == LocalizableString.defaultLocale) + return this.values[keys[0]]; + return this.values; + }; + LocalizableString.prototype.setJson = function (value) { + this.values = {}; + if (!value) + return; + if (typeof value === 'string') { + this.setLocaleText(null, value); + } + else { + for (var key in value) { + this.setLocaleText(key, value[key]); + } + } + }; + LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) { + var keys = Object.keys(this.values); + for (var i = 0; i < keys.length; i++) { + if (keys[i] == LocalizableString.defaultLocale) + continue; + if (this.values[keys[i]] == defaultValue) + delete this.values[keys[i]]; + } + }; + return LocalizableString; +}()); + +LocalizableString.defaultLocale = "default"; + + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); + + + +var Question = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Question, _super); + function Question() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Question; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Question.prototype, "question", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Question.prototype, "css", void 0); +Question = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Question); +/* harmony default export */ __webpack_exports__["a"] = Question; + + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return AnswerRequiredError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return RequreNumericError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ExceedSizeError; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomError; }); + + + +var AnswerRequiredError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerRequiredError, _super); + function AnswerRequiredError() { + return _super.call(this) || this; + } + AnswerRequiredError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("requiredError"); + }; + return AnswerRequiredError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var RequreNumericError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RequreNumericError, _super); + function RequreNumericError() { + return _super.call(this) || this; + } + RequreNumericError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("numericError"); + }; + return RequreNumericError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var ExceedSizeError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ExceedSizeError, _super); + function ExceedSizeError(maxSize) { + var _this = _super.call(this) || this; + _this.maxSize = maxSize; + return _this; + } + ExceedSizeError.prototype.getText = function () { + return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__["a" /* surveyLocalization */].getString("exceedMaxSize")["format"](this.getTextSize()); + }; + ExceedSizeError.prototype.getTextSize = function () { + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + var fixed = [0, 0, 2, 3, 3]; + if (this.maxSize == 0) + return '0 Byte'; + var i = Math.floor(Math.log(this.maxSize) / Math.log(1024)); + var value = this.maxSize / Math.pow(1024, i); + return value.toFixed(fixed[i]) + ' ' + sizes[i]; + }; + return ExceedSizeError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + +var CustomError = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](CustomError, _super); + function CustomError(text) { + var _this = _super.call(this) || this; + _this.text = text; + return _this; + } + CustomError.prototype.getText = function () { + return this.text; + }; + return CustomError; +}(__WEBPACK_IMPORTED_MODULE_2__base__["e" /* SurveyError */])); + + + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionbase__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__validator__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Question; }); + + + + + + + + + +var Question = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Question, _super); + function Question(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRequiredValue = false; + _this.hasCommentValue = false; + _this.hasOtherValue = false; + _this.readOnlyValue = false; + _this.errors = []; + _this.validators = new Array(); + _this.isvalueChangedCallbackFiring = false; + _this.isValueChangedInSurvey = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + _this.locCommentTextValue = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(Question.prototype, "hasTitle", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasInput", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "inputId", { + get: function () { return this.id + "i"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "title", { + get: function () { + var res = this.locTitle.text; + return res ? res : this.name; + }, + set: function (newValue) { + this.locTitle.text = newValue; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "locCommentText", { + get: function () { return this.locCommentTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "processedTitle", { + get: function () { return this.survey != null ? this.survey.processText(this.title) : this.title; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "fullTitle", { + get: function () { + if (this.survey && this.survey.questionTitleTemplate) { + if (!this.textPreProcessor) { + var self = this; + this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_7__textPreProcessor__["a" /* TextPreProcessor */](); + this.textPreProcessor.onHasValue = function (name) { return self.canProcessedTextValues(name.toLowerCase()); }; + this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + } + return this.textPreProcessor.process(this.survey.questionTitleTemplate); + } + var requireText = this.requiredText; + if (requireText) + requireText += " "; + var no = this.no; + if (no) + no += ". "; + return no + requireText + this.processedTitle; + }, + enumerable: true, + configurable: true + }); + Question.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + __WEBPACK_IMPORTED_MODULE_3__base__["c" /* SurveyElement */].ScrollElementToTop(this.id); + var id = !onError ? this.getFirstInputElementId() : this.getFirstErrorInputElementId(); + if (__WEBPACK_IMPORTED_MODULE_3__base__["c" /* SurveyElement */].FocusElement(id)) { + this.fireCallback(this.focusCallback); + } + }; + Question.prototype.getFirstInputElementId = function () { + return this.inputId; + }; + Question.prototype.getFirstErrorInputElementId = function () { + return this.getFirstInputElementId(); + }; + Question.prototype.canProcessedTextValues = function (name) { + return name == "no" || name == "title" || name == "require"; + }; + Question.prototype.getProcessedTextValue = function (name) { + if (name == "no") + return this.no; + if (name == "title") + return this.processedTitle; + if (name == "require") + return this.requiredText; + return null; + }; + Question.prototype.supportComment = function () { return false; }; + Question.prototype.supportOther = function () { return false; }; + Object.defineProperty(Question.prototype, "isRequired", { + get: function () { return this.isRequiredValue; }, + set: function (val) { + if (this.isRequired == val) + return; + this.isRequiredValue = val; + this.fireCallback(this.titleChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasComment", { + get: function () { return this.hasCommentValue; }, + set: function (val) { + if (!this.supportComment()) + return; + this.hasCommentValue = val; + if (this.hasComment) + this.hasOther = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "commentText", { + get: function () { + var res = this.locCommentText.text; + return res ? res : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + }, + set: function (value) { + this.locCommentText.text = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "hasOther", { + get: function () { return this.hasOtherValue; }, + set: function (val) { + if (!this.supportOther() || this.hasOther == val) + return; + this.hasOtherValue = val; + if (this.hasOther) + this.hasComment = false; + this.hasOtherChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.hasOtherChanged = function () { }; + Object.defineProperty(Question.prototype, "isReadOnly", { + get: function () { return this.readOnly || (this.survey && this.survey.isDisplayMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "readOnly", { + get: function () { return this.readOnlyValue; }, + set: function (value) { + if (this.readOnly == value) + return; + this.readOnlyValue = value; + this.readOnlyChanged(); + }, + enumerable: true, + configurable: true + }); + Question.prototype.readOnlyChanged = function () { + this.fireCallback(this.readOnlyChangedCallback); + }; + Object.defineProperty(Question.prototype, "no", { + get: function () { + if (this.visibleIndex < 0) + return ""; + var startIndex = 1; + var isNumeric = true; + var str = ""; + if (this.survey && this.survey.questionStartIndex) { + str = this.survey.questionStartIndex; + if (parseInt(str)) + startIndex = parseInt(str); + else if (str.length == 1) + isNumeric = false; + } + if (isNumeric) + return (this.visibleIndex + startIndex).toString(); + return String.fromCharCode(str.charCodeAt(0) + this.visibleIndex); + }, + enumerable: true, + configurable: true + }); + Question.prototype.onSetData = function () { + _super.prototype.onSetData.call(this); + this.onSurveyValueChanged(this.value); + }; + Object.defineProperty(Question.prototype, "value", { + get: function () { + return this.valueFromData(this.getValueCore()); + }, + set: function (newValue) { + this.setNewValue(newValue); + if (this.isvalueChangedCallbackFiring) + return; + this.isvalueChangedCallbackFiring = true; + this.fireCallback(this.valueChangedCallback); + this.isvalueChangedCallbackFiring = false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "comment", { + get: function () { return this.getComment(); }, + set: function (newValue) { + if (this.comment == newValue) + return; + this.setComment(newValue); + this.fireCallback(this.commentChangedCallback); + }, + enumerable: true, + configurable: true + }); + Question.prototype.getComment = function () { return this.data != null ? this.data.getComment(this.name) : this.questionComment; }; + Question.prototype.setComment = function (newValue) { + this.setNewComment(newValue); + }; + Question.prototype.isEmpty = function () { return this.value == null; }; + Question.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + this.checkForErrors(fireCallback); + return this.errors.length > 0; + }; + Object.defineProperty(Question.prototype, "currentErrorCount", { + get: function () { return this.errors.length; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Question.prototype, "requiredText", { + get: function () { return this.survey != null && this.isRequired ? this.survey.requiredText : ""; }, + enumerable: true, + configurable: true + }); + Question.prototype.addError = function (error) { + this.errors.push(error); + this.fireCallback(this.errorsChangedCallback); + }; + Question.prototype.checkForErrors = function (fireCallback) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + this.onCheckForErrors(this.errors); + if (this.errors.length == 0 && this.value) { + var error = this.runValidators(); + if (error) { + this.errors.push(error); + } + } + if (this.survey && this.errors.length == 0) { + var error = this.survey.validateQuestion(this.name); + if (error) { + this.errors.push(error); + } + } + if (fireCallback && (errorLength != this.errors.length || errorLength > 0)) { + this.fireCallback(this.errorsChangedCallback); + } + }; + Question.prototype.onCheckForErrors = function (errors) { + if (this.hasRequiredError()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["d" /* AnswerRequiredError */]()); + } + }; + Question.prototype.hasRequiredError = function () { + return this.isRequired && this.isEmpty(); + }; + Question.prototype.runValidators = function () { + return new __WEBPACK_IMPORTED_MODULE_6__validator__["h" /* ValidatorRunner */]().run(this); + }; + Question.prototype.setNewValue = function (newValue) { + this.setNewValueInData(newValue); + this.onValueChanged(); + }; + Question.prototype.setNewValueInData = function (newValue) { + if (!this.isValueChangedInSurvey) { + newValue = this.valueToData(newValue); + this.setValueCore(newValue); + } + }; + Question.prototype.getValueCore = function () { + return this.data != null ? this.data.getValue(this.name) : this.questionValue; + }; + Question.prototype.setValueCore = function (newValue) { + if (this.data != null) { + this.data.setValue(this.name, newValue); + } + else { + this.questionValue = newValue; + } + }; + Question.prototype.valueFromData = function (val) { return val; }; + Question.prototype.valueToData = function (val) { return val; }; + Question.prototype.onValueChanged = function () { }; + Question.prototype.setNewComment = function (newValue) { + if (this.data != null) { + this.data.setComment(this.name, newValue); + } + else + this.questionComment = newValue; + }; + //IQuestion + Question.prototype.onSurveyValueChanged = function (newValue) { + this.isValueChangedInSurvey = true; + this.value = this.valueFromData(newValue); + this.fireCallback(this.commentChangedCallback); + this.isValueChangedInSurvey = false; + }; + //IValidatorOwner + Question.prototype.getValidatorTitle = function () { return null; }; + return Question; +}(__WEBPACK_IMPORTED_MODULE_2__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("question", [{ name: "title:text", serializationProperty: "locTitle" }, + { name: "commentText", serializationProperty: "locCommentText" }, + "isRequired:boolean", "readOnly:boolean", { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], null, "questionbase"); + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return surveyCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return defaultStandardCss; }); +var surveyCss = { + currentType: "", + getCss: function () { + var loc = this.currentType ? this[this.currentType] : defaultStandardCss; + if (!loc) + loc = defaultStandardCss; + return loc; + }, +}; +var defaultStandardCss = { + root: "sv_main", + header: "", + body: "sv_body", + footer: "sv_nav", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "sv_progress", progressBar: "", + pageTitle: "sv_p_title", + row: "sv_row", + question: { root: "sv_q", title: "sv_q_title", comment: "", indent: 20 }, + error: { root: "sv_q_erbox", icon: "", item: "" }, + checkbox: { root: "sv_qcbc", item: "sv_q_checkbox", other: "sv_q_other" }, + comment: "", + dropdown: { root: "", control: "" }, + matrix: { root: "sv_q_matrix" }, + matrixdropdown: { root: "sv_q_matrix" }, + matrixdynamic: { root: "table", button: "" }, + multipletext: { root: "", itemTitle: "", itemValue: "" }, + radiogroup: { root: "sv_qcbc", item: "sv_q_radiogroup", label: "", other: "sv_q_other" }, + rating: { root: "sv_q_rating", item: "sv_q_rating_item" }, + text: "", + window: { + root: "sv_window", body: "sv_window_content", + header: { + root: "sv_window_title", title: "", button: "", buttonExpanded: "", buttonCollapsed: "" + } + } +}; +surveyCss["standard"] = defaultStandardCss; + + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemValue; }); + +var ItemValue = (function () { + function ItemValue(value, text) { + if (text === void 0) { text = null; } + this.locTextValue = new __WEBPACK_IMPORTED_MODULE_0__localizablestring__["a" /* LocalizableString */](null); + if (text) + this.locText.text = text; + this.value = value; + } + ItemValue.createArray = function (locOwner) { + var items = []; + ItemValue.setupArray(items, locOwner); + return items; + }; + ItemValue.setupArray = function (items, locOwner) { + items.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = locOwner; + return result; + }; + items.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = locOwner; + } + return result; + var _a; + }; + }; + ItemValue.setData = function (items, values) { + items.length = 0; + for (var i = 0; i < values.length; i++) { + var value = values[i]; + var item = new ItemValue(null); + item.setData(value); + items.push(item); + } + }; + ItemValue.getData = function (items) { + var result = new Array(); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item.hasText) { + result.push({ value: item.value, text: item.locText.getJson() }); + } + else { + result.push(item.value); + } + } + return result; + }; + ItemValue.getItemByValue = function (items, val) { + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return items[i]; + } + return null; + }; + ItemValue.prototype.getType = function () { return "itemvalue"; }; + Object.defineProperty(ItemValue.prototype, "locText", { + get: function () { return this.locTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "locOwner", { + get: function () { return this.locText.owner; }, + set: function (value) { this.locText.owner = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "value", { + get: function () { return this.itemValue; }, + set: function (newValue) { + this.itemValue = newValue; + if (!this.itemValue) + return; + var str = this.itemValue.toString(); + var index = str.indexOf(ItemValue.Separator); + if (index > -1) { + this.itemValue = str.slice(0, index); + this.text = str.slice(index + 1); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "hasText", { + get: function () { return this.locText.text ? true : false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ItemValue.prototype, "text", { + get: function () { + if (this.hasText) + return this.locText.text; + if (this.value) + return this.value.toString(); + return null; + }, + set: function (newText) { + this.locText.text = newText; + }, + enumerable: true, + configurable: true + }); + ItemValue.prototype.setData = function (value) { + if (typeof (value.value) !== 'undefined') { + var exception = null; + if (this.isObjItemValue(value)) { + value.itemValue = value.itemValue; + this.locText.setJson(value.locText.getJson()); + exception = ItemValue.itemValueProp; + } + this.copyAttributes(value, exception); + } + else { + this.value = value; + } + }; + ItemValue.prototype.isObjItemValue = function (obj) { return typeof (obj.getType) !== 'undefined' && obj.getType() == 'itemvalue'; }; + ItemValue.prototype.copyAttributes = function (src, exceptons) { + for (var key in src) { + if ((typeof src[key] == 'function')) + continue; + if (exceptons && exceptons.indexOf(key) > -1) + continue; + if (key == "text") { + this.locText.setJson(src[key]); + } + else { + this[key] = src[key]; + } + } + }; + return ItemValue; +}()); + +ItemValue.Separator = '|'; +ItemValue.itemValueProp = ["text", "value", "hasText", "locOwner", "locText"]; + + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionSelectBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxBase; }); + + + + + + + + +var QuestionSelectBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionSelectBase, _super); + function QuestionSelectBase(name) { + var _this = _super.call(this, name) || this; + _this.visibleChoicesCache = null; + _this.otherItemValue = new __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */]("other", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText")); + _this.choicesFromUrl = null; + _this.cachedValueForUrlRequestion = null; + _this.storeOthersAsComment = true; + _this.choicesOrderValue = "none"; + _this.isSettingComment = false; + _this.choicesValues = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.choicesByUrl = _this.createRestfull(); + _this.locOtherTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.locOtherErrorTextValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.choicesByUrl.getResultCallback = function (items) { self.onLoadChoicesFromUrl(items); }; + return _this; + } + Object.defineProperty(QuestionSelectBase.prototype, "otherItem", { + get: function () { + this.otherItemValue.text = this.otherText ? this.otherText : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherItemText"); + return this.otherItemValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "isOtherSelected", { + get: function () { + return this.getStoreOthersAsComment() ? this.getHasOther(this.value) : this.getHasOther(this.cachedValue); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.getHasOther = function (val) { + return val == this.otherItem.value; + }; + QuestionSelectBase.prototype.createRestfull = function () { return new __WEBPACK_IMPORTED_MODULE_6__choicesRestfull__["a" /* ChoicesRestfull */](); }; + QuestionSelectBase.prototype.getComment = function () { + if (this.getStoreOthersAsComment()) + return _super.prototype.getComment.call(this); + return this.commentValue; + }; + QuestionSelectBase.prototype.setComment = function (newValue) { + if (this.getStoreOthersAsComment()) + _super.prototype.setComment.call(this, newValue); + else { + if (!this.isSettingComment && newValue != this.commentValue) { + this.isSettingComment = true; + this.commentValue = newValue; + if (this.isOtherSelected) { + this.setNewValueInData(this.cachedValue); + } + this.isSettingComment = false; + } + } + }; + QuestionSelectBase.prototype.setNewValue = function (newValue) { + if (newValue) + this.cachedValueForUrlRequestion = newValue; + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionSelectBase.prototype.valueFromData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueFromData.call(this, val); + this.cachedValue = this.valueFromDataCore(val); + return this.cachedValue; + }; + QuestionSelectBase.prototype.valueToData = function (val) { + if (this.getStoreOthersAsComment()) + return _super.prototype.valueToData.call(this, val); + this.cachedValue = val; + return this.valueToDataCore(val); + }; + QuestionSelectBase.prototype.valueFromDataCore = function (val) { + if (!this.hasUnknownValue(val)) + return val; + if (val == this.otherItem.value) + return val; + this.comment = val; + return this.otherItem.value; + }; + QuestionSelectBase.prototype.valueToDataCore = function (val) { + if (val == this.otherItem.value && this.getComment()) { + val = this.getComment(); + } + return val; + }; + QuestionSelectBase.prototype.hasUnknownValue = function (val) { + if (!val) + return false; + var items = this.activeChoices; + for (var i = 0; i < items.length; i++) { + if (items[i].value == val) + return false; + } + return true; + }; + Object.defineProperty(QuestionSelectBase.prototype, "choices", { + get: function () { return this.choicesValues; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.choicesValues, newValue); + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.hasOtherChanged = function () { + this.onVisibleChoicesChanged(); + }; + Object.defineProperty(QuestionSelectBase.prototype, "choicesOrder", { + get: function () { return this.choicesOrderValue; }, + set: function (newValue) { + if (newValue == this.choicesOrderValue) + return; + this.choicesOrderValue = newValue; + this.onVisibleChoicesChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherText", { + get: function () { return this.locOtherText.text; }, + set: function (value) { + this.locOtherText.text = value; + this.updateOtherItem(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "otherErrorText", { + get: function () { return this.locOtherErrorText.text; }, + set: function (value) { this.locOtherErrorText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherText", { + get: function () { return this.locOtherTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "locOtherErrorText", { + get: function () { return this.locOtherErrorTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "visibleChoices", { + get: function () { + if (!this.hasOther && this.choicesOrder == "none") + return this.activeChoices; + if (!this.visibleChoicesCache) { + this.visibleChoicesCache = this.sortVisibleChoices(this.activeChoices.slice()); + if (this.hasOther) { + this.visibleChoicesCache.push(this.otherItem); + } + } + return this.visibleChoicesCache; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionSelectBase.prototype, "activeChoices", { + get: function () { return this.choicesFromUrl ? this.choicesFromUrl : this.choices; }, + enumerable: true, + configurable: true + }); + QuestionSelectBase.prototype.supportComment = function () { return true; }; + QuestionSelectBase.prototype.supportOther = function () { return true; }; + QuestionSelectBase.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (!this.isOtherSelected || this.comment) + return; + var text = this.otherErrorText; + if (!text) { + text = __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("otherRequiredError"); + } + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](text)); + }; + QuestionSelectBase.prototype.onLocaleChanged = function () { + _super.prototype.onLocaleChanged.call(this); + this.updateOtherItem(); + }; + QuestionSelectBase.prototype.updateOtherItem = function () { + var item = this.otherItem; // set the correct text + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.getStoreOthersAsComment = function () { return this.storeOthersAsComment && (this.survey != null ? this.survey.storeOthersAsComment : true); }; + QuestionSelectBase.prototype.onSurveyLoad = function () { + if (this.choicesByUrl) + this.choicesByUrl.run(); + }; + QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) { + var errorCount = this.errors.length; + this.errors = []; + if (this.choicesByUrl && this.choicesByUrl.error) { + this.errors.push(this.choicesByUrl.error); + } + if (errorCount > 0 || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + var newChoices = null; + if (array && array.length > 0) { + newChoices = new Array(); + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(newChoices, array); + } + this.choicesFromUrl = newChoices; + this.onVisibleChoicesChanged(); + if (this.cachedValueForUrlRequestion) { + this.value = this.cachedValueForUrlRequestion; + } + }; + QuestionSelectBase.prototype.onVisibleChoicesChanged = function () { + this.visibleChoicesCache = null; + this.fireCallback(this.choicesChangedCallback); + }; + QuestionSelectBase.prototype.sortVisibleChoices = function (array) { + var order = this.choicesOrder.toLowerCase(); + if (order == "asc") + return this.sortArray(array, 1); + if (order == "desc") + return this.sortArray(array, -1); + if (order == "random") + return this.randomizeArray(array); + return array; + }; + QuestionSelectBase.prototype.sortArray = function (array, mult) { + return array.sort(function (a, b) { + if (a.text < b.text) + return -1 * mult; + if (a.text > b.text) + return 1 * mult; + return 0; + }); + }; + QuestionSelectBase.prototype.randomizeArray = function (array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + return array; + }; + QuestionSelectBase.prototype.clearUnusedValues = function () { + _super.prototype.clearUnusedValues.call(this); + if (!this.isOtherSelected) { + this.comment = null; + } + }; + return QuestionSelectBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +var QuestionCheckboxBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxBase, _super); + function QuestionCheckboxBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + return _this; + } + Object.defineProperty(QuestionCheckboxBase.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + return QuestionCheckboxBase; +}(QuestionSelectBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("selectbase", ["hasComment:boolean", "hasOther:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "otherText", serializationProperty: "locOtherText" }, { name: "otherErrorText", serializationProperty: "locOtherErrorText" }, + { name: "storeOthersAsComment:boolean", default: true }], null, "question"); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkboxbase", [{ name: "colCount:number", default: 1, choices: [0, 1, 2, 3, 4] }], null, "selectbase"); + + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditionsParser__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__ = __webpack_require__(17); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Condition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ConditionNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionRunner; }); + + +var Condition = (function () { + function Condition() { + this.opValue = "equal"; + } + Object.defineProperty(Condition, "operators", { + get: function () { + if (Condition.operatorsValue != null) + return Condition.operatorsValue; + Condition.operatorsValue = { + empty: function (left, right) { return !left; }, + notempty: function (left, right) { return !(!left); }, + equal: function (left, right) { return left == right; }, + notequal: function (left, right) { return left != right; }, + contains: function (left, right) { return left && left["indexOf"] && left.indexOf(right) > -1; }, + notcontains: function (left, right) { return !left || !left["indexOf"] || left.indexOf(right) == -1; }, + greater: function (left, right) { return left > right; }, + less: function (left, right) { return left < right; }, + greaterorequal: function (left, right) { return left >= right; }, + lessorequal: function (left, right) { return left <= right; } + }; + return Condition.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Condition.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Condition.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Condition.prototype.perform = function (left, right) { + if (left === void 0) { left = null; } + if (right === void 0) { right = null; } + if (!left) + left = this.left; + if (!right) + right = this.right; + return Condition.operators[this.operator](this.getPureValue(left), this.getPureValue(right)); + }; + Condition.prototype.getPureValue = function (val) { + if (!val || (typeof val != "string")) + return val; + var str = ""; + if (val.length > 0 && (val[0] == "'" || val[0] == '"')) + val = val.substr(1); + var len = val.length; + if (len > 0 && (val[len - 1] == "'" || val[len - 1] == '"')) + val = val.substr(0, len - 1); + return val; + }; + return Condition; +}()); + +Condition.operatorsValue = null; +var ConditionNode = (function () { + function ConditionNode() { + this.connectiveValue = "and"; + this.children = []; + } + Object.defineProperty(ConditionNode.prototype, "connective", { + get: function () { return this.connectiveValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (value == "&" || value == "&&") + value = "and"; + if (value == "|" || value == "||") + value = "or"; + if (value != "and" && value != "or") + return; + this.connectiveValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConditionNode.prototype, "isEmpty", { + get: function () { return this.children.length == 0; }, + enumerable: true, + configurable: true + }); + ConditionNode.prototype.clear = function () { + this.children = []; + this.connective = "and"; + }; + return ConditionNode; +}()); + +var ConditionRunner = (function () { + function ConditionRunner(expression) { + this.root = new ConditionNode(); + this.expression = expression; + this.processValue = new __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__["a" /* ProcessValue */](); + } + Object.defineProperty(ConditionRunner.prototype, "expression", { + get: function () { return this.expressionValue; }, + set: function (value) { + if (this.expression == value) + return; + this.expressionValue = value; + new __WEBPACK_IMPORTED_MODULE_0__conditionsParser__["a" /* ConditionsParser */]().parse(this.expressionValue, this.root); + }, + enumerable: true, + configurable: true + }); + ConditionRunner.prototype.run = function (values) { + this.values = values; + return this.runNode(this.root); + }; + ConditionRunner.prototype.runNode = function (node) { + var onFirstFail = node.connective == "and"; + for (var i = 0; i < node.children.length; i++) { + var res = this.runNodeCondition(node.children[i]); + if (!res && onFirstFail) + return false; + if (res && !onFirstFail) + return true; + } + return onFirstFail; + }; + ConditionRunner.prototype.runNodeCondition = function (value) { + if (!value) + return false; + if (value["children"]) + return this.runNode(value); + if (value["left"]) + return this.runCondition(value); + return false; + }; + ConditionRunner.prototype.runCondition = function (condition) { + var left = condition.left; + var name = this.getValueName(left); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return condition.operator === "empty"; + left = this.processValue.getValue(name, this.values); + } + var right = condition.right; + name = this.getValueName(right); + if (name) { + if (!this.processValue.hasValue(name, this.values)) + return false; + right = this.processValue.getValue(name, this.values); + } + return condition.perform(left, right); + }; + ConditionRunner.prototype.getValueName = function (nodeValue) { + if (!nodeValue) + return null; + if (typeof nodeValue !== 'string') + return null; + if (nodeValue.length < 3 || nodeValue[0] != '{' || nodeValue[nodeValue.length - 1] != '}') + return null; + return nodeValue.substr(1, nodeValue.length - 2); + }; + return ConditionRunner; +}()); + + + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(10); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChoicesRestfull; }); + + + + + + +var ChoicesRestfull = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](ChoicesRestfull, _super); + function ChoicesRestfull() { + var _this = _super.call(this) || this; + _this.url = ""; + _this.path = ""; + _this.valueName = ""; + _this.titleName = ""; + _this.error = null; + return _this; + } + ChoicesRestfull.prototype.run = function () { + if (!this.url || !this.getResultCallback) + return; + this.error = null; + var xhr = new XMLHttpRequest(); + xhr.open('GET', this.url); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + if (xhr.status == 200) { + self.onLoad(JSON.parse(xhr.response)); + } + else { + self.onError(xhr.statusText, xhr.responseText); + } + }; + xhr.send(); + }; + ChoicesRestfull.prototype.getType = function () { return "choicesByUrl"; }; + Object.defineProperty(ChoicesRestfull.prototype, "isEmpty", { + get: function () { + return !this.url && !this.path && !this.valueName && !this.titleName; + }, + enumerable: true, + configurable: true + }); + ChoicesRestfull.prototype.setData = function (json) { + this.clear(); + if (json.url) + this.url = json.url; + if (json.path) + this.path = json.path; + if (json.valueName) + this.valueName = json.valueName; + if (json.titleName) + this.titleName = json.titleName; + }; + ChoicesRestfull.prototype.clear = function () { + this.url = ""; + this.path = ""; + this.valueName = ""; + this.titleName = ""; + }; + ChoicesRestfull.prototype.onLoad = function (result) { + var items = []; + result = this.getResultAfterPath(result); + if (result && result["length"]) { + for (var i = 0; i < result.length; i++) { + var itemValue = result[i]; + if (!itemValue) + continue; + var value = this.getValue(itemValue); + var title = this.getTitle(itemValue); + items.push(new __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */](value, title)); + } + } + else { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlGetChoicesError")); + } + this.getResultCallback(items); + }; + ChoicesRestfull.prototype.onError = function (status, response) { + this.error = new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("urlRequestError")["format"](status, response)); + this.getResultCallback([]); + }; + ChoicesRestfull.prototype.getResultAfterPath = function (result) { + if (!result) + return result; + if (!this.path) + return result; + var pathes = this.getPathes(); + for (var i = 0; i < pathes.length; i++) { + result = result[pathes[i]]; + if (!result) + return null; + } + return result; + }; + ChoicesRestfull.prototype.getPathes = function () { + var pathes = []; + if (this.path.indexOf(';') > -1) { + pathes = this.path.split(';'); + } + else { + pathes = this.path.split(','); + } + if (pathes.length == 0) + pathes.push(this.path); + return pathes; + }; + ChoicesRestfull.prototype.getValue = function (item) { + if (this.valueName) + return item[this.valueName]; + var len = Object.keys(item).length; + if (len < 1) + return null; + return item[Object.keys(item)[0]]; + }; + ChoicesRestfull.prototype.getTitle = function (item) { + if (!this.titleName) + return null; + return item[this.titleName]; + }; + return ChoicesRestfull; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("choicesByUrl", ["url", "path", "valueName", "titleName"], function () { return new ChoicesRestfull(); }); + + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ProcessValue; }); +var ProcessValue = (function () { + function ProcessValue() { + } + ProcessValue.prototype.getFirstName = function (text) { + if (!text) + return text; + var res = ""; + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + if (ch == '.' || ch == '[') + break; + res += ch; + } + return res; + }; + ProcessValue.prototype.hasValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.hasValue; + }; + ProcessValue.prototype.getValue = function (text, values) { + var res = this.getValueCore(text, values); + return res.value; + }; + ProcessValue.prototype.getValueCore = function (text, values) { + var res = { hasValue: false, value: null }; + var curValue = values; + if (!curValue) + return res; + var isFirst = true; + while (text && text.length > 0) { + var isArray = !isFirst && text[0] == '['; + if (!isArray) { + if (!isFirst) + text = text.substr(1); + var curName = this.getFirstName(text); + if (!curName) + return res; + if (!curValue[curName]) + return res; + curValue = curValue[curName]; + text = text.substr(curName.length); + } + else { + if (!Array.isArray(curValue)) + return res; + var index = 1; + var str = ""; + while (index < text.length && text[index] != ']') { + str += text[index]; + index++; + } + text = index < text.length ? text.substr(index + 1) : ""; + index = this.getIntValue(str); + if (index < 0 || index >= curValue.length) + return res; + curValue = curValue[index]; + } + isFirst = false; + } + res.value = curValue; + res.hasValue = true; + return res; + }; + ProcessValue.prototype.getIntValue = function (str) { + if (str == "0" || ((str | 0) > 0 && str % 1 == 0)) + return Number(str); + return -1; + }; + return ProcessValue; +}()); + + + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__itemvalue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__question_baseselect__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MatrixDropdownColumn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownCell; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return MatrixDropdownRowModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return QuestionMatrixDropdownModelBase; }); + + + + + + + + + + +var MatrixDropdownColumn = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownColumn, _super); + function MatrixDropdownColumn(name, title) { + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.hasOther = false; + _this.minWidth = ""; + _this.cellType = "default"; + _this.inputType = "text"; + _this.choicesOrder = "none"; + _this.locOwner = null; + _this.colCountValue = -1; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.choicesByUrl = new __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__["a" /* ChoicesRestfull */](); + return _this; + } + MatrixDropdownColumn.prototype.getType = function () { return "matrixdropdowncolumn"; }; + Object.defineProperty(MatrixDropdownColumn.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text; }, + set: function (value) { this.locOptionsCaption.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownColumn.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < -1 || value > 4) + return; + this.colCountValue = value; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownColumn.prototype.getLocale = function () { + return this.locOwner ? this.locOwner.getLocale() : ""; + }; + return MatrixDropdownColumn; +}(__WEBPACK_IMPORTED_MODULE_3__base__["b" /* Base */])); + +var MatrixDropdownCell = (function () { + function MatrixDropdownCell(column, row, data) { + this.column = column; + this.row = row; + this.questionValue = data.createQuestion(this.row, this.column); + this.questionValue.setData(row); + } + Object.defineProperty(MatrixDropdownCell.prototype, "question", { + get: function () { return this.questionValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownCell.prototype, "value", { + get: function () { return this.question.value; }, + set: function (value) { + this.question.value = value; + }, + enumerable: true, + configurable: true + }); + return MatrixDropdownCell; +}()); + +var MatrixDropdownRowModelBase = (function () { + function MatrixDropdownRowModelBase(data, value) { + this.rowValues = {}; + this.rowComments = {}; + this.isSettingValue = false; + this.cells = []; + this.data = data; + this.value = value; + this.idValue = MatrixDropdownRowModelBase.getId(); + this.buildCells(); + } + MatrixDropdownRowModelBase.getId = function () { return "srow_" + MatrixDropdownRowModelBase.idCounter++; }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "rowName", { + get: function () { return null; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "value", { + get: function () { return this.rowValues; }, + set: function (value) { + this.isSettingValue = true; + this.rowValues = {}; + if (value != null) { + for (var key in value) { + this.rowValues[key] = value[key]; + } + } + for (var i = 0; i < this.cells.length; i++) { + this.cells[i].question.onSurveyValueChanged(this.getValue(this.cells[i].column.name)); + } + this.isSettingValue = false; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getValue = function (name) { + return this.rowValues[name]; + }; + MatrixDropdownRowModelBase.prototype.setValue = function (name, newValue) { + if (this.isSettingValue) + return; + if (newValue === "") + newValue = null; + if (newValue != null) { + this.rowValues[name] = newValue; + } + else { + delete this.rowValues[name]; + } + this.data.onRowChanged(this, this.value); + }; + MatrixDropdownRowModelBase.prototype.getComment = function (name) { + return this.rowComments[name]; + }; + MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue) { + this.rowComments[name] = newValue; + }; + Object.defineProperty(MatrixDropdownRowModelBase.prototype, "isEmpty", { + get: function () { + var val = this.value; + if (!val) + return true; + for (var key in val) + return false; + return true; + }, + enumerable: true, + configurable: true + }); + MatrixDropdownRowModelBase.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + MatrixDropdownRowModelBase.prototype.buildCells = function () { + var columns = this.data.columns; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + this.cells.push(this.createCell(column)); + } + }; + MatrixDropdownRowModelBase.prototype.createCell = function (column) { + return new MatrixDropdownCell(column, this, this.data); + }; + return MatrixDropdownRowModelBase; +}()); + +MatrixDropdownRowModelBase.idCounter = 1; +var QuestionMatrixDropdownModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModelBase, _super); + function QuestionMatrixDropdownModelBase(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.columnsValue = []; + _this.isRowChanging = false; + _this.generatedVisibleRows = null; + _this.cellTypeValue = "dropdown"; + _this.columnColCountValue = 0; + _this.columnMinWidth = ""; + _this.horizontalScroll = false; + _this.choicesValue = __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_9__localizablestring__["a" /* LocalizableString */](_this); + _this.overrideColumnsMethods(); + return _this; + } + QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) { + var colNames = __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].DefaultColums; + for (var i = 0; i < colNames.length; i++) + matrix.addColumn(colNames[i]); + }; + QuestionMatrixDropdownModelBase.prototype.getType = function () { + return "matrixdropdownbase"; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (value) { + this.columnsValue = value; + this.overrideColumnsMethods(); + this.fireCallback(this.columnsChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.overrideColumnsMethods = function () { + var self = this; + this.columnsValue.push = function (value) { + var result = Array.prototype.push.call(this, value); + value.locOwner = self; + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + }; + this.columnsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + var result = (_a = Array.prototype.splice).call.apply(_a, [this, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].locOwner = self; + } + if (self.data != null) { + self.fireCallback(self.columnsChangedCallback); + } + return result; + var _a; + }; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "cellType", { + get: function () { return this.cellTypeValue; }, + set: function (newValue) { + if (this.cellType == newValue) + return; + this.cellTypeValue = newValue; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "columnColCount", { + get: function () { return this.columnColCountValue; }, + set: function (value) { + if (value < 0 || value > 4) + return; + this.columnColCountValue = value; + this.fireCallback(this.updateCellsCallbak); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.getColumnTitle = function (column) { + var result = column.title; + if (column.isRequired && this.survey) { + var requireText = this.survey.requiredText; + if (requireText) + requireText += " "; + result = requireText + result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) { + return column.minWidth ? column.minWidth : this.columnMinWidth; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "choices", { + get: function () { return this.choicesValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].setData(this.choicesValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) { + if (title === void 0) { title = null; } + var column = new MatrixDropdownColumn(name, title); + this.columnsValue.push(column); + return column; + }; + Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, "visibleRows", { + get: function () { + this.generatedVisibleRows = this.generateRows(); + return this.generatedVisibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModelBase.prototype.generateRows = function () { return null; }; + QuestionMatrixDropdownModelBase.prototype.createMatrixRow = function (name, text, value) { + return null; + }; + QuestionMatrixDropdownModelBase.prototype.createNewValue = function (curValue) { return !curValue ? {} : curValue; }; + QuestionMatrixDropdownModelBase.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + var result = questionValue[row.rowName] ? questionValue[row.rowName] : null; + if (!result && create) { + result = {}; + questionValue[row.rowName] = result; + } + return result; + }; + QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { + }; + QuestionMatrixDropdownModelBase.prototype.onValueChanged = function () { + if (this.isRowChanging) + return; + this.onBeforeValueChanged(this.value); + if (!(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + this.generatedVisibleRows[i].value = this.getRowValue(row, val); + } + this.isRowChanging = false; + }; + QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + if (!cells) + continue; + for (var colIndex = 0; colIndex < cells.length; colIndex++) { + var question = cells[colIndex].question; + if (question && (!question.supportGoNextPageAutomatic() || !question.value)) + return false; + } + } + return true; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var errosInColumns = this.hasErrorInColumns(fireCallback); + return _super.prototype.hasErrors.call(this, fireCallback) || errosInColumns; + }; + QuestionMatrixDropdownModelBase.prototype.hasErrorInColumns = function (fireCallback) { + if (!this.generatedVisibleRows) + return false; + var res = false; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + res = cells && cells[colIndex] && cells[colIndex].question && cells[colIndex].question.hasErrors(fireCallback) || res; + } + } + return res; + }; + QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () { + var question = this.getFirstCellQuestion(false); + return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () { + var question = this.getFirstCellQuestion(true); + return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this); + }; + QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) { + if (!this.generatedVisibleRows) + return null; + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var cells = this.generatedVisibleRows[i].cells; + for (var colIndex = 0; colIndex < this.columns.length; colIndex++) { + if (!onError) + return cells[colIndex].question; + if (cells[colIndex].question.currentErrorCount > 0) + return cells[colIndex].question; + } + } + return null; + }; + //IMatrixDropdownData + QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) { + var question = this.createQuestionCore(row, column); + question.name = column.name; + question.isRequired = column.isRequired; + question.hasOther = column.hasOther; + question.readOnly = this.readOnly; + question.setData(this.survey); + if (column.hasOther) { + if (question instanceof __WEBPACK_IMPORTED_MODULE_6__question_baseselect__["b" /* QuestionSelectBase */]) { + question.storeOthersAsComment = false; + } + } + return question; + }; + QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) { + var cellType = column.cellType == "default" ? this.cellType : column.cellType; + var name = this.getQuestionName(row, column); + if (cellType == "checkbox") + return this.createCheckbox(name, column); + if (cellType == "radiogroup") + return this.createRadiogroup(name, column); + if (cellType == "text") + return this.createText(name, column); + if (cellType == "comment") + return this.createComment(name, column); + return this.createDropdown(name, column); + }; + QuestionMatrixDropdownModelBase.prototype.getQuestionName = function (row, column) { return row.rowName + "_" + column.name; }; + QuestionMatrixDropdownModelBase.prototype.getColumnChoices = function (column) { + return column.choices && column.choices.length > 0 ? column.choices : this.choices; + }; + QuestionMatrixDropdownModelBase.prototype.getColumnOptionsCaption = function (column) { + return column.optionsCaption ? column.optionsCaption : this.optionsCaption; + }; + QuestionMatrixDropdownModelBase.prototype.createDropdown = function (name, column) { + var q = this.createCellQuestion("dropdown", name); + this.setSelectBaseProperties(q, column); + q.optionsCaption = this.getColumnOptionsCaption(column); + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCheckbox = function (name, column) { + var q = this.createCellQuestion("checkbox", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createRadiogroup = function (name, column) { + var q = this.createCellQuestion("radiogroup", name); + this.setSelectBaseProperties(q, column); + q.colCount = column.colCount > -1 ? column.colCount : this.columnColCount; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.setSelectBaseProperties = function (question, column) { + question.choicesOrder = column.choicesOrder; + question.choices = this.getColumnChoices(column); + question.choicesByUrl.setData(column.choicesByUrl); + if (!question.choicesByUrl.isEmpty) { + question.choicesByUrl.run(); + } + }; + QuestionMatrixDropdownModelBase.prototype.createText = function (name, column) { + var q = this.createCellQuestion("text", name); + q.inputType = column.inputType; + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createComment = function (name, column) { + var q = this.createCellQuestion("comment", name); + q.placeHolder = column.placeHolder; + return q; + }; + QuestionMatrixDropdownModelBase.prototype.createCellQuestion = function (questionType, name) { + return __WEBPACK_IMPORTED_MODULE_8__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + }; + QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) { + delete newValue[row.rowName]; + return Object.keys(newValue).length == 0 ? null : newValue; + }; + QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, newRowValue) { + var newValue = this.createNewValue(this.value); + var rowValue = this.getRowValue(row, newValue, true); + for (var key in rowValue) + delete rowValue[key]; + if (newRowValue) { + newRowValue = JSON.parse(JSON.stringify(newRowValue)); + for (var key in newRowValue) + rowValue[key] = newRowValue[key]; + } + if (Object.keys(rowValue).length == 0) { + newValue = this.deleteRowValue(newValue, row); + } + this.isRowChanging = true; + this.setNewValue(newValue); + this.isRowChanging = false; + }; + return QuestionMatrixDropdownModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdowncolumn", ["name", { name: "title", serializationProperty: "locTitle" }, + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, { name: "cellType", default: "default", choices: ["default", "dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "colCount", default: -1, choices: [-1, 0, 1, 2, 3, 4] }, "isRequired:boolean", "hasOther:boolean", "minWidth", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "choicesOrder", default: "none", choices: ["none", "asc", "desc", "random"] }, + { name: "choicesByUrl:restfull", className: "ChoicesRestfull", onGetValue: function (obj) { return obj.choicesByUrl.isEmpty ? null : obj.choicesByUrl; }, onSetValue: function (obj, value) { obj.choicesByUrl.setData(value); } }, + { name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }], function () { return new MatrixDropdownColumn(""); }); +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdownbase", [{ name: "columns:matrixdropdowncolumns", className: "matrixdropdowncolumn" }, + "horizontalScroll:boolean", + { name: "choices:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_4__itemvalue__["a" /* ItemValue */].getData(obj.choices); }, onSetValue: function (obj, value) { obj.choices = value; } }, + { name: "optionsCaption", serializationProperty: "locOptionsCaption" }, + { name: "cellType", default: "dropdown", choices: ["dropdown", "checkbox", "radiogroup", "text", "comment"] }, + { name: "columnColCount", default: 0, choices: [0, 1, 2, 3, 4] }, "columnMinWidth"], function () { return new QuestionMatrixDropdownModelBase(""); }, "question"); + + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionBase; }); + + + + +var QuestionBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionBase, _super); + function QuestionBase(name) { + var _this = _super.call(this) || this; + _this.name = name; + _this.conditionRunner = null; + _this.visibleIf = ""; + _this.visibleValue = true; + _this.startWithNewLineValue = true; + _this.visibleIndexValue = -1; + _this.width = ""; + _this.renderWidthValue = ""; + _this.rightIndentValue = 0; + _this.indent = 0; + _this.idValue = QuestionBase.getQuestionId(); + _this.onCreating(); + return _this; + } + QuestionBase.getQuestionId = function () { + return "sq_" + QuestionBase.questionCounter++; + }; + Object.defineProperty(QuestionBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.fireCallback(this.visibilityChangedCallback); + this.fireCallback(this.rowVisibilityChangedCallback); + if (this.survey) { + this.survey.questionVisibilityChanged(this, this.visible); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isVisible", { + get: function () { return this.visible || (this.survey && this.survey.isDesignMode); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "isReadOnly", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "visibleIndex", { + get: function () { return this.visibleIndexValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + return false; + }; + Object.defineProperty(QuestionBase.prototype, "currentErrorCount", { + get: function () { return 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasTitle", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasInput", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "hasComment", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionBase.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + this.fireCallback(this.renderWidthChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.focus = function (onError) { + if (onError === void 0) { onError = false; } + }; + QuestionBase.prototype.setData = function (newValue) { + this.data = newValue; + if (newValue && newValue["questionAdded"]) { + this.surveyValue = newValue; + } + this.onSetData(); + }; + Object.defineProperty(QuestionBase.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + QuestionBase.prototype.fireCallback = function (callback) { + if (callback) + callback(); + }; + QuestionBase.prototype.onSetData = function () { }; + QuestionBase.prototype.onCreating = function () { }; + QuestionBase.prototype.runCondition = function (values) { + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + //IQuestion + QuestionBase.prototype.onSurveyValueChanged = function (newValue) { + }; + QuestionBase.prototype.onSurveyLoad = function () { + }; + QuestionBase.prototype.setVisibleIndex = function (value) { + if (this.visibleIndexValue == value) + return; + this.visibleIndexValue = value; + this.fireCallback(this.visibleIndexChangedCallback); + }; + QuestionBase.prototype.supportGoNextPageAutomatic = function () { return false; }; + QuestionBase.prototype.clearUnusedValues = function () { }; + QuestionBase.prototype.onLocaleChanged = function () { }; + //ILocalizableOwner + QuestionBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + return QuestionBase; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +QuestionBase.questionCounter = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("questionbase", ["!name", { name: "visible:boolean", default: true }, "visibleIf:expression", + { name: "width" }, { name: "startWithNewLine:boolean", default: true }, { name: "indent:number", default: 0, choices: [0, 1, 2, 3] }]); + + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__page__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__ = __webpack_require__(29); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyModel; }); + + + + + + + + + + + +var SurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyModel, _super); + function SurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + var _this = _super.call(this) || this; + _this.surveyId = null; + _this.surveyPostId = null; + _this.clientId = null; + _this.cookieName = null; + _this.sendResultOnPageNext = false; + _this.commentPrefix = "-Comment"; + _this.focusFirstQuestionAutomatic = true; + _this.showNavigationButtons = true; + _this.showTitle = true; + _this.showPageTitles = true; + _this.showCompletedPage = true; + _this.requiredText = "*"; + _this.questionStartIndex = ""; + _this.showProgressBar = "off"; + _this.storeOthersAsComment = true; + _this.goNextPageAutomatic = false; + _this.pages = new Array(); + _this.triggers = new Array(); + _this.clearInvisibleValues = false; + _this.currentPageValue = null; + _this.valuesHash = {}; + _this.variablesHash = {}; + _this.showPageNumbersValue = false; + _this.showQuestionNumbersValue = "on"; + _this.questionTitleLocationValue = "top"; + _this.localeValue = ""; + _this.isCompleted = false; + _this.isLoading = false; + _this.processedTextValues = {}; + _this.isValidatingOnServerValue = false; + _this.modeValue = "edit"; + _this.isDesignModeValue = false; + _this.onComplete = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onPartialSend = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onCurrentPageChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onValueChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onPageVisibleChanged = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onQuestionRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onPanelRemoved = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onValidateQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onProcessHtml = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onSendResult = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onGetResult = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onUploadFile = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onAfterRenderSurvey = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onAfterRenderPage = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onAfterRenderQuestion = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.onAfterRenderPanel = new __WEBPACK_IMPORTED_MODULE_2__base__["a" /* Event */](); + _this.jsonErrors = null; + _this.isLoadingFromJsonValue = false; + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompletedHtmlValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPagePrevTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locPageNextTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locCompleteTextValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + _this.locQuestionTitleTemplateValue = new __WEBPACK_IMPORTED_MODULE_10__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_4__textPreProcessor__["a" /* TextPreProcessor */](); + _this.textPreProcessor.onHasValue = function (name) { return self.hasProcessedTextValue(name); }; + _this.textPreProcessor.onProcess = function (name) { return self.getProcessedTextValue(name); }; + _this.pages.push = function (value) { + value.data = self; + return Array.prototype.push.call(this, value); + }; + _this.triggers.push = function (value) { + value.setOwner(self); + return Array.prototype.push.call(this, value); + }; + _this.updateProcessedTextValues(); + _this.onBeforeCreating(); + if (jsonObj) { + _this.setJsonObject(jsonObj); + if (_this.surveyId) { + _this.loadSurveyFromService(_this.surveyId); + } + } + _this.onCreating(); + return _this; + } + SurveyModel.prototype.getType = function () { return "survey"; }; + Object.defineProperty(SurveyModel.prototype, "locale", { + get: function () { return this.localeValue; }, + set: function (value) { + this.localeValue = value; + __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].currentLocale = value; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onLocaleChanged(); + } + }, + enumerable: true, + configurable: true + }); + //ILocalizableOwner + SurveyModel.prototype.getLocale = function () { return this.locale; }; + SurveyModel.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getString(str); }; + Object.defineProperty(SurveyModel.prototype, "emptySurveyText", { + get: function () { return this.getLocString("emptySurvey"); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completedHtml", { + get: function () { return this.locCompletedHtml.text; }, + set: function (value) { this.locCompletedHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompletedHtml", { + get: function () { return this.locCompletedHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pagePrevText", { + get: function () { return this.locPagePrevText.text ? this.locPagePrevText.text : this.getLocString("pagePrevText"); }, + set: function (newValue) { this.locPagePrevText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPagePrevText", { + get: function () { return this.locPagePrevTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "pageNextText", { + get: function () { return this.locPageNextText.text ? this.locPageNextText.text : this.getLocString("pageNextText"); }, + set: function (newValue) { this.locPageNextText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locPageNextText", { + get: function () { return this.locPageNextTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "completeText", { + get: function () { return this.locCompleteText.text ? this.locCompleteText.text : this.getLocString("completeText"); }, + set: function (newValue) { this.locCompleteText.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locCompleteText", { + get: function () { return this.locCompleteTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplate.text; }, + set: function (value) { this.locQuestionTitleTemplate.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "locQuestionTitleTemplate", { + get: function () { return this.locQuestionTitleTemplateValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showPageNumbers", { + get: function () { return this.showPageNumbersValue; }, + set: function (value) { + if (value === this.showPageNumbers) + return; + this.showPageNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "showQuestionNumbers", { + get: function () { return this.showQuestionNumbersValue; }, + set: function (value) { + if (value === this.showQuestionNumbers) + return; + this.showQuestionNumbersValue = value; + this.updateVisibleIndexes(); + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "processedTitle", { + get: function () { return this.processText(this.title); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "questionTitleLocation", { + get: function () { return this.questionTitleLocationValue; }, + set: function (value) { + if (value === this.questionTitleLocationValue) + return; + this.questionTitleLocationValue = value; + }, + enumerable: true, + configurable: true + }); + ; + ; + Object.defineProperty(SurveyModel.prototype, "mode", { + get: function () { return this.modeValue; }, + set: function (value) { + if (value == this.mode) + return; + if (value != "edit" && value != "display") + return; + this.modeValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "data", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + result[key] = this.valuesHash[key]; + } + return result; + }, + set: function (data) { + this.valuesHash = {}; + if (data) { + for (var key in data) { + this._setDataValue(data, key); + this.checkTriggers(key, data[key], false); + if (!this.processedTextValues[key.toLowerCase()]) { + this.processedTextValues[key.toLowerCase()] = "value"; + } + } + } + this.notifyAllQuestionsOnValueChanged(); + this.runConditions(); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype._setDataValue = function (data, key) { + this.valuesHash[key] = data[key]; + }; + Object.defineProperty(SurveyModel.prototype, "comments", { + get: function () { + var result = {}; + for (var key in this.valuesHash) { + if (key.indexOf(this.commentPrefix) > 0) { + result[key] = this.valuesHash[key]; + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePages", { + get: function () { + if (this.isDesignMode) + return this.pages; + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].isVisible) { + result.push(this.pages[i]); + } + } + return result; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEmpty", { + get: function () { return this.pages.length == 0; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "PageCount", { + get: function () { + return this.pages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "visiblePageCount", { + get: function () { + return this.visiblePages.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPage", { + get: function () { + var vPages = this.visiblePages; + if (this.currentPageValue != null) { + if (vPages.indexOf(this.currentPageValue) < 0) { + this.currentPage = null; + } + } + if (this.currentPageValue == null && vPages.length > 0) { + this.currentPage = vPages[0]; + } + return this.currentPageValue; + }, + set: function (value) { + var vPages = this.visiblePages; + if (value != null && vPages.indexOf(value) < 0) + return; + if (value == this.currentPageValue) + return; + var oldValue = this.currentPageValue; + this.currentPageValue = value; + this.updateCustomWidgets(value); + this.currentPageChanged(value, oldValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "currentPageNo", { + get: function () { + return this.visiblePages.indexOf(this.currentPage); + }, + set: function (value) { + var vPages = this.visiblePages; + if (value < 0 || value >= this.visiblePages.length) + return; + this.currentPage = this.visiblePages[value]; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.focusFirstQuestion = function () { + if (this.currentPageValue) { + this.currentPageValue.scrollToTop(); + this.currentPageValue.focusFirstQuestion(); + } + }; + Object.defineProperty(SurveyModel.prototype, "state", { + get: function () { + if (this.isLoading) + return "loading"; + if (this.isCompleted) + return "completed"; + return (this.currentPage) ? "running" : "empty"; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.clear = function (clearData, gotoFirstPage) { + if (clearData === void 0) { clearData = true; } + if (gotoFirstPage === void 0) { gotoFirstPage = true; } + if (clearData) { + this.data = null; + this.variablesHash = {}; + } + this.isCompleted = false; + if (gotoFirstPage && this.visiblePageCount > 0) { + this.currentPage = this.visiblePages[0]; + } + }; + SurveyModel.prototype.mergeValues = function (src, dest) { + if (!dest || !src) + return; + for (var key in src) { + var value = src[key]; + if (value && typeof value === 'object') { + if (!dest[key]) + dest[key] = {}; + this.mergeValues(value, dest[key]); + } + else { + dest[key] = value; + } + } + }; + SurveyModel.prototype.updateCustomWidgets = function (page) { + if (!page) + return; + for (var i = 0; i < page.questions.length; i++) { + page.questions[i].customWidget = __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__["a" /* CustomWidgetCollection */].Instance.getCustomWidget(page.questions[i]); + } + }; + SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) { + this.onCurrentPageChanged.fire(this, { 'oldCurrentPage': oldValue, 'newCurrentPage': newValue }); + }; + SurveyModel.prototype.getProgress = function () { + if (this.currentPage == null) + return 0; + var index = this.visiblePages.indexOf(this.currentPage) + 1; + return Math.ceil((index * 100 / this.visiblePageCount)); + }; + Object.defineProperty(SurveyModel.prototype, "isNavigationButtonsShowing", { + get: function () { + if (this.isDesignMode) + return false; + var page = this.currentPage; + if (!page) + return false; + return page.navigationButtonsVisibility == "show" || + (page.navigationButtonsVisibility != "hide" && this.showNavigationButtons); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isEditMode", { + get: function () { return this.mode == "edit"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDisplayMode", { + get: function () { return this.mode == "display"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isDesignMode", { + get: function () { return this.isDesignModeValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setDesignMode = function (value) { + this.isDesignModeValue = value; + }; + Object.defineProperty(SurveyModel.prototype, "hasCookie", { + get: function () { + if (!this.cookieName) + return false; + var cookies = document.cookie; + return cookies && cookies.indexOf(this.cookieName + "=true") > -1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=true; expires=Fri, 31 Dec 9999 0:0:0 GMT"; + }; + SurveyModel.prototype.deleteCookie = function () { + if (!this.cookieName) + return; + document.cookie = this.cookieName + "=;"; + }; + SurveyModel.prototype.nextPage = function () { + if (this.isLastPage) + return false; + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doNextPage(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isCurrentPageHasErrors", { + get: function () { + if (this.currentPage == null) + return true; + return this.currentPage.hasErrors(true, true); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.prevPage = function () { + if (this.isFirstPage) + return false; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index - 1]; + }; + SurveyModel.prototype.completeLastPage = function () { + if (this.isEditMode && this.isCurrentPageHasErrors) + return false; + if (this.doServerValidation()) + return false; + this.doComplete(); + return true; + }; + Object.defineProperty(SurveyModel.prototype, "isFirstPage", { + get: function () { + if (this.currentPage == null) + return true; + return this.visiblePages.indexOf(this.currentPage) == 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "isLastPage", { + get: function () { + if (this.currentPage == null) + return true; + var vPages = this.visiblePages; + return vPages.indexOf(this.currentPage) == vPages.length - 1; + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.doComplete = function () { + this.clearUnusedValues(); + this.setCookie(); + this.setCompleted(); + this.onComplete.fire(this, null); + if (this.surveyPostId) { + this.sendResult(); + } + }; + Object.defineProperty(SurveyModel.prototype, "isValidatingOnServer", { + get: function () { return this.isValidatingOnServerValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setIsValidatingOnServer = function (val) { + if (val == this.isValidatingOnServer) + return; + this.isValidatingOnServerValue = val; + this.onIsValidatingOnServerChanged(); + }; + SurveyModel.prototype.onIsValidatingOnServerChanged = function () { }; + SurveyModel.prototype.doServerValidation = function () { + if (!this.onServerValidateQuestions) + return false; + var self = this; + var options = { data: {}, errors: {}, survey: this, complete: function () { self.completeServerValidation(options); } }; + for (var i = 0; i < this.currentPage.questions.length; i++) { + var question = this.currentPage.questions[i]; + if (!question.visible) + continue; + var value = this.getValue(question.name); + if (value) + options.data[question.name] = value; + } + this.setIsValidatingOnServer(true); + this.onServerValidateQuestions(this, options); + return true; + }; + SurveyModel.prototype.completeServerValidation = function (options) { + this.setIsValidatingOnServer(false); + if (!options && !options.survey) + return; + var self = options.survey; + var hasErrors = false; + if (options.errors) { + for (var name in options.errors) { + var question = self.getQuestionByName(name); + if (question && question["errors"]) { + hasErrors = true; + question["addError"](new __WEBPACK_IMPORTED_MODULE_8__error__["a" /* CustomError */](options.errors[name])); + } + } + } + if (!hasErrors) { + if (self.isLastPage) + self.doComplete(); + else + self.doNextPage(); + } + }; + SurveyModel.prototype.doNextPage = function () { + this.checkOnPageTriggers(); + if (this.sendResultOnPageNext) { + this.sendResult(this.surveyPostId, this.clientId, true); + } + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage); + this.currentPage = vPages[index + 1]; + }; + SurveyModel.prototype.setCompleted = function () { + this.isCompleted = true; + }; + Object.defineProperty(SurveyModel.prototype, "processedCompletedHtml", { + get: function () { + if (this.completedHtml) { + return this.processHtml(this.completedHtml); + } + return "

" + this.getLocString("completingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "processedLoadingHtml", { + get: function () { + return "

" + this.getLocString("loadingSurvey") + "

"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyModel.prototype, "progressText", { + get: function () { + if (this.currentPage == null) + return ""; + var vPages = this.visiblePages; + var index = vPages.indexOf(this.currentPage) + 1; + return this.getLocString("progressText")["format"](index, vPages.length); + }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.afterRenderSurvey = function (htmlElement) { + this.onAfterRenderSurvey.fire(this, { survey: this, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPage = function (htmlElement) { + if (this.onAfterRenderPage.isEmpty) + return; + this.onAfterRenderPage.fire(this, { page: this.currentPage, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) { + this.onAfterRenderQuestion.fire(this, { question: question, htmlElement: htmlElement }); + }; + SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) { + this.onAfterRenderPanel.fire(this, { panel: panel, htmlElement: htmlElement }); + }; + SurveyModel.prototype.uploadFile = function (name, file, storeDataAsText, uploadingCallback) { + var accept = true; + this.onUploadFile.fire(this, { name: name, file: file, accept: accept }); + if (!accept) + return false; + if (!storeDataAsText && this.surveyPostId) { + this.uploadFileCore(name, file, uploadingCallback); + } + return true; + }; + SurveyModel.prototype.uploadFileCore = function (name, file, uploadingCallback) { + var self = this; + if (uploadingCallback) + uploadingCallback("uploading"); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendFile(this.surveyPostId, file, function (success, response) { + if (uploadingCallback) + uploadingCallback(success ? "success" : "error"); + if (success) { + self.setValue(name, response); + } + }); + }; + SurveyModel.prototype.getPage = function (index) { + return this.pages[index]; + }; + SurveyModel.prototype.addPage = function (page) { + if (page == null) + return; + this.pages.push(page); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.addNewPage = function (name) { + var page = this.createNewPage(name); + this.addPage(page); + return page; + }; + SurveyModel.prototype.removePage = function (page) { + var index = this.pages.indexOf(page); + if (index < 0) + return; + this.pages.splice(index, 1); + if (this.currentPageValue == page) { + this.currentPage = this.pages.length > 0 ? this.pages[0] : null; + } + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var questions = this.getAllQuestions(); + if (caseInsensitive) + name = name.toLowerCase(); + for (var i = 0; i < questions.length; i++) { + var questionName = questions[i].name; + if (caseInsensitive) + questionName = questionName.toLowerCase(); + if (questionName == name) + return questions[i]; + } + return null; + }; + SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) { + if (caseInsensitive === void 0) { caseInsensitive = false; } + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var question = this.getQuestionByName(names[i], caseInsensitive); + if (question) + result.push(question); + } + return result; + }; + SurveyModel.prototype.getPageByElement = function (element) { + for (var i = 0; i < this.pages.length; i++) { + var page = this.pages[i]; + if (page.containsElement(element)) + return page; + } + return null; + }; + SurveyModel.prototype.getPageByQuestion = function (question) { + return this.getPageByElement(question); + }; + SurveyModel.prototype.getPageByName = function (name) { + for (var i = 0; i < this.pages.length; i++) { + if (this.pages[i].name == name) + return this.pages[i]; + } + return null; + }; + SurveyModel.prototype.getPagesByNames = function (names) { + var result = []; + if (!names) + return result; + for (var i = 0; i < names.length; i++) { + if (!names[i]) + continue; + var page = this.getPageByName(names[i]); + if (page) + result.push(page); + } + return result; + }; + SurveyModel.prototype.getAllQuestions = function (visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + var result = new Array(); + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].addQuestionsToList(result, visibleOnly); + } + return result; + }; + SurveyModel.prototype.createNewPage = function (name) { return new __WEBPACK_IMPORTED_MODULE_3__page__["a" /* PageModel */](name); }; + SurveyModel.prototype.notifyQuestionOnValueChanged = function (name, newValue) { + var questions = this.getAllQuestions(); + var question = null; + for (var i = 0; i < questions.length; i++) { + if (questions[i].name != name) + continue; + question = questions[i]; + this.doSurveyValueChanged(question, newValue); + } + this.onValueChanged.fire(this, { 'name': name, 'question': question, 'value': newValue }); + }; + SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.doSurveyValueChanged(questions[i], this.getValue(questions[i].name)); + } + }; + SurveyModel.prototype.doSurveyValueChanged = function (question, newValue) { + question.onSurveyValueChanged(newValue); + }; + SurveyModel.prototype.checkOnPageTriggers = function () { + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + var question = questions[i]; + var value = this.getValue(question.name); + this.checkTriggers(question.name, value, true); + } + }; + SurveyModel.prototype.getCurrentPageQuestions = function () { + var result = []; + var page = this.currentPage; + if (!page) + return result; + for (var i = 0; i < page.questions.length; i++) { + var question = page.questions[i]; + if (!question.visible || !question.name) + continue; + result.push(question); + } + return result; + }; + SurveyModel.prototype.checkTriggers = function (name, newValue, isOnNextPage) { + for (var i = 0; i < this.triggers.length; i++) { + var trigger = this.triggers[i]; + if (trigger.name == name && trigger.isOnNextPage == isOnNextPage) { + trigger.check(newValue); + } + } + }; + SurveyModel.prototype.doElementsOnLoad = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].onSurveyLoad(); + } + }; + SurveyModel.prototype.runConditions = function () { + var pages = this.pages; + for (var i = 0; i < pages.length; i++) { + pages[i].runCondition(this.valuesHash); + } + }; + SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) { + if (postId === void 0) { postId = null; } + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + if (!this.isEditMode) + return; + if (isPartialCompleted && this.onPartialSend) { + this.onPartialSend.fire(this, null); + } + if (!postId && this.surveyPostId) { + postId = this.surveyPostId; + } + if (!postId) + return; + if (clientId) { + this.clientId = clientId; + } + if (isPartialCompleted && !this.clientId) + return; + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().sendResult(postId, this.data, function (success, response) { + self.onSendResult.fire(self, { success: success, response: response }); + }, this.clientId, isPartialCompleted); + }; + SurveyModel.prototype.getResult = function (resultId, name) { + var self = this; + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().getResult(resultId, name, function (success, data, dataList, response) { + self.onGetResult.fire(self, { success: success, data: data, dataList: dataList, response: response }); + }); + }; + SurveyModel.prototype.loadSurveyFromService = function (surveyId) { + if (surveyId === void 0) { surveyId = null; } + if (surveyId) { + this.surveyId = surveyId; + } + var self = this; + this.isLoading = true; + this.onLoadingSurveyFromService(); + new __WEBPACK_IMPORTED_MODULE_6__dxSurveyService__["a" /* dxSurveyService */]().loadSurvey(this.surveyId, function (success, result, response) { + self.isLoading = false; + if (success && result) { + self.setJsonObject(result); + self.notifyAllQuestionsOnValueChanged(); + self.onLoadSurveyFromService(); + } + }); + }; + SurveyModel.prototype.onLoadingSurveyFromService = function () { + }; + SurveyModel.prototype.onLoadSurveyFromService = function () { + }; + SurveyModel.prototype.checkPageVisibility = function (question, oldQuestionVisible) { + var page = this.getPageByQuestion(question); + if (!page) + return; + var newValue = page.isVisible; + if (newValue != page.getIsPageVisible(question) || oldQuestionVisible) { + this.pageVisibilityChanged(page, newValue); + } + }; + SurveyModel.prototype.updateVisibleIndexes = function () { + this.updatePageVisibleIndexes(this.showPageNumbers); + if (this.showQuestionNumbers == "onPage") { + var visPages = this.visiblePages; + for (var i = 0; i < visPages.length; i++) { + this.updateQuestionVisibleIndexes(visPages[i].questions, true); + } + } + else { + this.updateQuestionVisibleIndexes(this.getAllQuestions(false), this.showQuestionNumbers == "on"); + } + }; + SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) { + var index = 0; + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].visibleIndex = this.pages[i].visible ? (index++) : -1; + this.pages[i].num = showIndex && this.pages[i].visible ? this.pages[i].visibleIndex + 1 : -1; + } + }; + SurveyModel.prototype.updateQuestionVisibleIndexes = function (questions, showIndex) { + var index = 0; + for (var i = 0; i < questions.length; i++) { + questions[i].setVisibleIndex(showIndex && questions[i].visible && questions[i].hasTitle ? (index++) : -1); + } + }; + Object.defineProperty(SurveyModel.prototype, "isLoadingFromJson", { + get: function () { return this.isLoadingFromJsonValue; }, + enumerable: true, + configurable: true + }); + SurveyModel.prototype.setJsonObject = function (jsonObj) { + if (!jsonObj) + return; + this.jsonErrors = null; + this.isLoadingFromJsonValue = true; + var jsonConverter = new __WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */](); + jsonConverter.toObject(jsonObj, this); + if (jsonConverter.errors.length > 0) { + this.jsonErrors = jsonConverter.errors; + } + this.isLoadingFromJsonValue = false; + this.updateProcessedTextValues(); + if (this.hasCookie) { + this.doComplete(); + } + this.doElementsOnLoad(); + this.runConditions(); + this.updateVisibleIndexes(); + }; + SurveyModel.prototype.onBeforeCreating = function () { }; + SurveyModel.prototype.onCreating = function () { }; + SurveyModel.prototype.updateProcessedTextValues = function () { + this.processedTextValues = {}; + var self = this; + this.processedTextValues["pageno"] = function (name) { return self.currentPage != null ? self.visiblePages.indexOf(self.currentPage) + 1 : 0; }; + this.processedTextValues["pagecount"] = function (name) { return self.visiblePageCount; }; + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + this.addQuestionToProcessedTextValues(questions[i]); + } + }; + SurveyModel.prototype.addQuestionToProcessedTextValues = function (question) { + this.processedTextValues[question.name.toLowerCase()] = "question"; + }; + SurveyModel.prototype.hasProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + return this.processedTextValues[firstName.toLowerCase()]; + }; + SurveyModel.prototype.getProcessedTextValue = function (name) { + var firstName = new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getFirstName(name); + var val = this.processedTextValues[firstName.toLowerCase()]; + if (!val) + return null; + if (val == "variable") { + return this.getVariable(name.toLowerCase()); + } + if (val == "question") { + var question = this.getQuestionByName(firstName, true); + if (!question) + return null; + name = question.name + name.substr(firstName.length); + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + if (val == "value") { + return new __WEBPACK_IMPORTED_MODULE_5__conditionProcessValue__["a" /* ProcessValue */]().getValue(name, this.valuesHash); + } + return val(name); + }; + SurveyModel.prototype.clearUnusedValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + questions[i].clearUnusedValues(); + } + if (this.clearInvisibleValues) { + this.clearInvisibleQuestionValues(); + } + }; + SurveyModel.prototype.clearInvisibleQuestionValues = function () { + var questions = this.getAllQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].visible) + continue; + this.clearValue(questions[i].name); + } + }; + SurveyModel.prototype.getVariable = function (name) { + if (!name) + return null; + return this.variablesHash[name]; + }; + SurveyModel.prototype.setVariable = function (name, newValue) { + if (!name) + return; + this.variablesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "variable"; + }; + //ISurvey data + SurveyModel.prototype.getUnbindValue = function (value) { + if (value && value instanceof Object) { + //do not return the same object instance!!! + return JSON.parse(JSON.stringify(value)); + } + return value; + }; + SurveyModel.prototype.getValue = function (name) { + if (!name || name.length == 0) + return null; + var value = this.valuesHash[name]; + return this.getUnbindValue(value); + }; + SurveyModel.prototype.setValue = function (name, newValue) { + if (this.isValueEqual(name, newValue)) + return; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + newValue = this.getUnbindValue(newValue); + this.valuesHash[name] = newValue; + this.processedTextValues[name.toLowerCase()] = "value"; + } + this.notifyQuestionOnValueChanged(name, newValue); + this.checkTriggers(name, newValue, false); + this.runConditions(); + this.tryGoNextPageAutomatic(name); + }; + SurveyModel.prototype.isValueEqual = function (name, newValue) { + if (newValue == "") + newValue = null; + var oldValue = this.getValue(name); + if (newValue === null || oldValue === null) + return newValue === oldValue; + return this.isTwoValueEquals(newValue, oldValue); + }; + SurveyModel.prototype.tryGoNextPageAutomatic = function (name) { + if (!this.goNextPageAutomatic || !this.currentPage) + return; + var question = this.getQuestionByName(name); + if (question && (!question.visible || !question.supportGoNextPageAutomatic())) + return; + var questions = this.getCurrentPageQuestions(); + for (var i = 0; i < questions.length; i++) { + if (questions[i].hasInput && !this.getValue(questions[i].name)) + return; + } + if (!this.currentPage.hasErrors(true, false)) { + if (!this.isLastPage) { + this.nextPage(); + } + else { + this.doComplete(); + } + } + }; + SurveyModel.prototype.getComment = function (name) { + var result = this.data[name + this.commentPrefix]; + if (result == null) + result = ""; + return result; + }; + SurveyModel.prototype.setComment = function (name, newValue) { + name = name + this.commentPrefix; + if (newValue === "" || newValue === null) { + delete this.valuesHash[name]; + } + else { + this.valuesHash[name] = newValue; + this.tryGoNextPageAutomatic(name); + } + }; + SurveyModel.prototype.clearValue = function (name) { + this.setValue(name, null); + this.setComment(name, null); + }; + SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) { + this.updateVisibleIndexes(); + this.onVisibleChanged.fire(this, { 'question': question, 'name': question.name, 'visible': newValue }); + this.checkPageVisibility(question, !newValue); + }; + SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) { + this.updateVisibleIndexes(); + this.onPageVisibleChanged.fire(this, { 'page': page, 'visible': newValue }); + }; + SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.addQuestionToProcessedTextValues(question); + this.onQuestionAdded.fire(this, { 'question': question, 'name': question.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.questionRemoved = function (question) { + this.updateVisibleIndexes(); + this.onQuestionRemoved.fire(this, { 'question': question, 'name': question.name }); + }; + SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) { + this.updateVisibleIndexes(); + this.onPanelAdded.fire(this, { 'panel': panel, 'name': panel.name, 'index': index, 'parentPanel': parentPanel, 'rootPanel': rootPanel }); + }; + SurveyModel.prototype.panelRemoved = function (panel) { + this.updateVisibleIndexes(); + this.onPanelRemoved.fire(this, { 'panel': panel, 'name': panel.name }); + }; + SurveyModel.prototype.validateQuestion = function (name) { + if (this.onValidateQuestion.isEmpty) + return null; + var options = { name: name, value: this.getValue(name), error: null }; + this.onValidateQuestion.fire(this, options); + return options.error ? new __WEBPACK_IMPORTED_MODULE_8__error__["a" /* CustomError */](options.error) : null; + }; + SurveyModel.prototype.processHtml = function (html) { + var options = { html: html }; + this.onProcessHtml.fire(this, options); + return this.processText(options.html); + }; + SurveyModel.prototype.processText = function (text) { + return this.textPreProcessor.process(text); + }; + //ISurveyTriggerOwner + SurveyModel.prototype.getObjects = function (pages, questions) { + var result = []; + Array.prototype.push.apply(result, this.getPagesByNames(pages)); + Array.prototype.push.apply(result, this.getQuestionsByNames(questions)); + return result; + }; + SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) { + if (!name) + return; + if (isVariable) { + this.setVariable(name, value); + } + else { + this.setValue(name, value); + } + }; + return SurveyModel; +}(__WEBPACK_IMPORTED_MODULE_2__base__["b" /* Base */])); + +//Make localizable: completedHtml, pagePrevText, pageNextText, completeText +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("survey", [{ name: "locale", choices: function () { return __WEBPACK_IMPORTED_MODULE_7__surveyStrings__["a" /* surveyLocalization */].getLocales(); } }, + { name: "title", serializationProperty: "locTitle" }, { name: "focusFirstQuestionAutomatic:boolean", default: true }, + { name: "completedHtml:html", serializationProperty: "locCompletedHtml" }, { name: "pages", className: "page", visible: false }, + { name: "questions", baseClassName: "question", visible: false, onGetValue: function (obj) { return null; }, onSetValue: function (obj, value, jsonConverter) { var page = obj.addNewPage(""); jsonConverter.toObject({ questions: value }, page); } }, + { name: "triggers:triggers", baseClassName: "surveytrigger", classNamePart: "trigger" }, + "surveyId", "surveyPostId", "cookieName", "sendResultOnPageNext:boolean", + { name: "showNavigationButtons:boolean", default: true }, { name: "showTitle:boolean", default: true }, + { name: "showPageTitles:boolean", default: true }, { name: "showCompletedPage:boolean", default: true }, + "showPageNumbers:boolean", { name: "showQuestionNumbers", default: "on", choices: ["on", "onPage", "off"] }, + { name: "questionTitleLocation", default: "top", choices: ["top", "bottom"] }, + { name: "showProgressBar", default: "off", choices: ["off", "top", "bottom"] }, + { name: "mode", default: "edit", choices: ["edit", "display"] }, + { name: "storeOthersAsComment:boolean", default: true }, "goNextPageAutomatic:boolean", "clearInvisibleValues:boolean", + { name: "pagePrevText", serializationProperty: "locPagePrevText" }, + { name: "pageNextText", serializationProperty: "locPageNextText" }, + { name: "completeText", serializationProperty: "locCompleteText" }, + { name: "requiredText", default: "*" }, "questionStartIndex", { name: "questionTitleTemplate", serializationProperty: "locQuestionTitleTemplate" }]); + + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TextPreProcessorItem */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TextPreProcessor; }); +var TextPreProcessorItem = (function () { + function TextPreProcessorItem() { + } + return TextPreProcessorItem; +}()); + +var TextPreProcessor = (function () { + function TextPreProcessor() { + } + TextPreProcessor.prototype.process = function (text) { + if (!text) + return text; + if (!this.onProcess) + return text; + var items = this.getItems(text); + for (var i = items.length - 1; i >= 0; i--) { + var item = items[i]; + var name = this.getName(text.substring(item.start + 1, item.end)); + if (!this.canProcessName(name)) + continue; + if (this.onHasValue && !this.onHasValue(name)) + continue; + var value = this.onProcess(name); + if (value == null) + value = ""; + text = text.substr(0, item.start) + value + text.substr(item.end + 1); + } + return text; + }; + TextPreProcessor.prototype.getItems = function (text) { + var items = []; + var length = text.length; + var start = -1; + var ch = ''; + for (var i = 0; i < length; i++) { + ch = text[i]; + if (ch == '{') + start = i; + if (ch == '}') { + if (start > -1) { + var item = new TextPreProcessorItem(); + item.start = start; + item.end = i; + items.push(item); + } + start = -1; + } + } + return items; + }; + TextPreProcessor.prototype.getName = function (name) { + if (!name) + return; + return name.trim(); + }; + TextPreProcessor.prototype.canProcessName = function (name) { + if (!name) + return false; + for (var i = 0; i < name.length; i++) { + var ch = name[i]; + //TODO + if (ch == ' ' || ch == '-' || ch == '&') + return false; + } + return true; + }; + return TextPreProcessor; +}()); + + + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return ValidatorResult; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return ValidatorRunner; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return NumericValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return TextValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AnswerCountValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return RegexValidator; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return EmailValidator; }); + + + + + +var ValidatorResult = (function () { + function ValidatorResult(value, error) { + if (error === void 0) { error = null; } + this.value = value; + this.error = error; + } + return ValidatorResult; +}()); + +var SurveyValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyValidator, _super); + function SurveyValidator() { + var _this = _super.call(this) || this; + _this.text = ""; + return _this; + } + SurveyValidator.prototype.getErrorText = function (name) { + if (this.text) + return this.text; + return this.getDefaultErrorText(name); + }; + SurveyValidator.prototype.getDefaultErrorText = function (name) { + return ""; + }; + SurveyValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + return null; + }; + return SurveyValidator; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var ValidatorRunner = (function () { + function ValidatorRunner() { + } + ValidatorRunner.prototype.run = function (owner) { + for (var i = 0; i < owner.validators.length; i++) { + var validatorResult = owner.validators[i].validate(owner.value, owner.getValidatorTitle()); + if (validatorResult != null) { + if (validatorResult.error) + return validatorResult.error; + if (validatorResult.value) { + owner.value = validatorResult.value; + } + } + } + return null; + }; + return ValidatorRunner; +}()); + +var NumericValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](NumericValidator, _super); + function NumericValidator(minValue, maxValue) { + if (minValue === void 0) { minValue = null; } + if (maxValue === void 0) { maxValue = null; } + var _this = _super.call(this) || this; + _this.minValue = minValue; + _this.maxValue = maxValue; + return _this; + } + NumericValidator.prototype.getType = function () { return "numericvalidator"; }; + NumericValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value || !this.isNumber(value)) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["c" /* RequreNumericError */]()); + } + var result = new ValidatorResult(parseFloat(value)); + if (this.minValue && this.minValue > result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name)); + return result; + } + if (this.maxValue && this.maxValue < result.value) { + result.error = new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name)); + return result; + } + return (typeof value === 'number') ? null : result; + }; + NumericValidator.prototype.getDefaultErrorText = function (name) { + var vName = name ? name : "value"; + if (this.minValue && this.maxValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMinMax")["format"](vName, this.minValue, this.maxValue); + } + else { + if (this.minValue) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMin")["format"](vName, this.minValue); + } + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("numericMax")["format"](vName, this.maxValue); + } + }; + NumericValidator.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return NumericValidator; +}(SurveyValidator)); + +var TextValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](TextValidator, _super); + function TextValidator(minLength, maxLength) { + if (minLength === void 0) { minLength = 0; } + if (maxLength === void 0) { maxLength = 0; } + var _this = _super.call(this) || this; + _this.minLength = minLength; + _this.maxLength = maxLength; + return _this; + } + TextValidator.prototype.getType = function () { return "textvalidator"; }; + TextValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (this.minLength > 0 && value.length < this.minLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + } + if (this.maxLength > 0 && value.length > this.maxLength) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + } + return null; + }; + TextValidator.prototype.getDefaultErrorText = function (name) { + if (this.minLength > 0 && this.maxLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinMaxLength")["format"](this.minLength, this.maxLength); + if (this.minLength > 0) + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMinLength")["format"](this.minLength); + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("textMaxLength")["format"](this.maxLength); + }; + return TextValidator; +}(SurveyValidator)); + +var AnswerCountValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](AnswerCountValidator, _super); + function AnswerCountValidator(minCount, maxCount) { + if (minCount === void 0) { minCount = null; } + if (maxCount === void 0) { maxCount = null; } + var _this = _super.call(this) || this; + _this.minCount = minCount; + _this.maxCount = maxCount; + return _this; + } + AnswerCountValidator.prototype.getType = function () { return "answercountvalidator"; }; + AnswerCountValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (value == null || value.constructor != Array) + return null; + var count = value.length; + if (this.minCount && count < this.minCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("minSelectError")["format"](this.minCount)))); + } + if (this.maxCount && count > this.maxCount) { + return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("maxSelectError")["format"](this.maxCount)))); + } + return null; + }; + AnswerCountValidator.prototype.getDefaultErrorText = function (name) { + return name; + }; + return AnswerCountValidator; +}(SurveyValidator)); + +var RegexValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](RegexValidator, _super); + function RegexValidator(regex) { + if (regex === void 0) { regex = null; } + var _this = _super.call(this) || this; + _this.regex = regex; + return _this; + } + RegexValidator.prototype.getType = function () { return "regexvalidator"; }; + RegexValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!this.regex || !value) + return null; + var re = new RegExp(this.regex); + if (re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + }; + return RegexValidator; +}(SurveyValidator)); + +var EmailValidator = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](EmailValidator, _super); + function EmailValidator() { + var _this = _super.call(this) || this; + _this.re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; + return _this; + } + EmailValidator.prototype.getType = function () { return "emailvalidator"; }; + EmailValidator.prototype.validate = function (value, name) { + if (name === void 0) { name = null; } + if (!value) + return null; + if (this.re.test(value)) + return null; + return new ValidatorResult(value, new __WEBPACK_IMPORTED_MODULE_2__error__["a" /* CustomError */](this.getErrorText(name))); + }; + EmailValidator.prototype.getDefaultErrorText = function (name) { + return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__["a" /* surveyLocalization */].getString("invalidEmail"); + }; + return EmailValidator; +}(SurveyValidator)); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("surveyvalidator", ["text"]); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("numericvalidator", ["minValue:number", "maxValue:number"], function () { return new NumericValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("textvalidator", ["minLength:number", "maxLength:number"], function () { return new TextValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("answercountvalidator", ["minCount:number", "maxCount:number"], function () { return new AnswerCountValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("regexvalidator", ["regex"], function () { return new RegexValidator(); }, "surveyvalidator"); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("emailvalidator", [], function () { return new EmailValidator(); }, "surveyvalidator"); + + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return helpers; }); +var helpers = { + methods: { + getIndentSize: function (question, indent) { + if (indent < 1) + return ""; + if (!question["data"]) + return ""; + var css = question["data"]["css"]; + if (!css) + return ""; + return indent * css.question.indent + "px"; + } + } +}; + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conditions__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ConditionsParser; }); + +var ConditionsParser = (function () { + function ConditionsParser() { + } + ConditionsParser.prototype.parse = function (text, root) { + this.text = text; + this.root = root; + this.root.clear(); + this.at = 0; + this.length = this.text.length; + var res = this.parseText(); + return res; + }; + ConditionsParser.prototype.toString = function (root) { + this.root = root; + return this.nodeToString(root); + }; + ConditionsParser.prototype.toStringCore = function (value) { + if (!value) + return ""; + if (value["children"]) + return this.nodeToString(value); + if (value["left"]) + return this.conditionToString(value); + return ""; + }; + ConditionsParser.prototype.nodeToString = function (node) { + if (node.isEmpty) + return ""; + var res = ""; + for (var i = 0; i < node.children.length; i++) { + var nodeText = this.toStringCore(node.children[i]); + if (nodeText) { + if (res) + res += ' ' + node.connective + ' '; + res += nodeText; + } + } + if (node != this.root && node.children.length > 1) { + res = '(' + res + ')'; + } + return res; + }; + ConditionsParser.prototype.conditionToString = function (condition) { + if (!condition.right || !condition.operator) + return ""; + var left = condition.left; + if (left && !this.isNumeric(left)) + left = "'" + left + "'"; + var res = left + ' ' + this.operationToString(condition.operator); + if (this.isNoRightOperation(condition.operator)) + return res; + var right = condition.right; + if (right && !this.isNumeric(right)) + right = "'" + right + "'"; + return res + ' ' + right; + }; + ConditionsParser.prototype.operationToString = function (op) { + if (op == "equal") + return "="; + if (op == "notequal") + return "!="; + if (op == "greater") + return ">"; + if (op == "less") + return "<"; + if (op == "greaterorequal") + return ">="; + if (op == "lessorequal") + return "<="; + return op; + }; + ConditionsParser.prototype.isNumeric = function (value) { + var val = parseFloat(value); + if (isNaN(val)) + return false; + return isFinite(val); + }; + ConditionsParser.prototype.parseText = function () { + this.node = this.root; + this.expressionNodes = []; + this.expressionNodes.push(this.node); + var res = this.readConditions(); + return res && this.at >= this.length; + }; + ConditionsParser.prototype.readConditions = function () { + var res = this.readCondition(); + if (!res) + return res; + var connective = this.readConnective(); + if (connective) { + this.addConnective(connective); + return this.readConditions(); + } + return true; + }; + ConditionsParser.prototype.readCondition = function () { + var expRes = this.readExpression(); + if (expRes < 0) + return false; + if (expRes == 1) + return true; + var left = this.readString(); + if (!left) + return false; + var op = this.readOperator(); + if (!op) + return false; + var c = new __WEBPACK_IMPORTED_MODULE_0__conditions__["b" /* Condition */](); + c.left = left; + c.operator = op; + if (!this.isNoRightOperation(op)) { + var right = this.readString(); + if (!right) + return false; + c.right = right; + } + this.addCondition(c); + return true; + }; + ConditionsParser.prototype.readExpression = function () { + this.skip(); + if (this.at >= this.length || this.ch != '(') + return 0; + this.at++; + this.pushExpression(); + var res = this.readConditions(); + if (res) { + this.skip(); + res = this.ch == ')'; + this.at++; + this.popExpression(); + return 1; + } + return -1; + }; + Object.defineProperty(ConditionsParser.prototype, "ch", { + get: function () { return this.text.charAt(this.at); }, + enumerable: true, + configurable: true + }); + ConditionsParser.prototype.skip = function () { + while (this.at < this.length && this.isSpace(this.ch)) + this.at++; + }; + ConditionsParser.prototype.isSpace = function (c) { + return c == ' ' || c == '\n' || c == '\t' || c == '\r'; + }; + ConditionsParser.prototype.isQuotes = function (c) { + return c == "'" || c == '"'; + }; + ConditionsParser.prototype.isOperatorChar = function (c) { + return c == '>' || c == '<' || c == '=' || c == '!'; + }; + ConditionsParser.prototype.isBrackets = function (c) { + return c == '(' || c == ')'; + }; + ConditionsParser.prototype.readString = function () { + this.skip(); + if (this.at >= this.length) + return null; + var start = this.at; + var hasQuotes = this.isQuotes(this.ch); + if (hasQuotes) + this.at++; + var isFirstOpCh = this.isOperatorChar(this.ch); + while (this.at < this.length) { + if (!hasQuotes && this.isSpace(this.ch)) + break; + if (this.isQuotes(this.ch)) { + if (hasQuotes) + this.at++; + break; + } + if (!hasQuotes) { + if (isFirstOpCh != this.isOperatorChar(this.ch)) + break; + if (this.isBrackets(this.ch)) + break; + } + this.at++; + } + if (this.at <= start) + return null; + var res = this.text.substr(start, this.at - start); + if (res) { + if (res.length > 1 && this.isQuotes(res[0])) { + var len = res.length - 1; + if (this.isQuotes(res[res.length - 1])) + len--; + res = res.substr(1, len); + } + } + return res; + }; + ConditionsParser.prototype.isNoRightOperation = function (op) { + return op == "empty" || op == "notempty"; + }; + ConditionsParser.prototype.readOperator = function () { + var op = this.readString(); + if (!op) + return null; + op = op.toLowerCase(); + if (op == '>') + op = "greater"; + if (op == '<') + op = "less"; + if (op == '>=' || op == '=>') + op = "greaterorequal"; + if (op == '<=' || op == '=<') + op = "lessorequal"; + if (op == '=' || op == '==') + op = "equal"; + if (op == '<>' || op == '!=') + op = "notequal"; + if (op == 'contain') + op = "contains"; + if (op == 'notcontain') + op = "notcontains"; + return op; + }; + ConditionsParser.prototype.readConnective = function () { + var con = this.readString(); + if (!con) + return null; + con = con.toLowerCase(); + if (con == "&" || con == "&&") + con = "and"; + if (con == "|" || con == "||") + con = "or"; + if (con != "and" && con != "or") + con = null; + return con; + }; + ConditionsParser.prototype.pushExpression = function () { + var node = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.expressionNodes.push(node); + this.node = node; + }; + ConditionsParser.prototype.popExpression = function () { + var node = this.expressionNodes.pop(); + this.node = this.expressionNodes[this.expressionNodes.length - 1]; + this.node.children.push(node); + }; + ConditionsParser.prototype.addCondition = function (c) { + this.node.children.push(c); + }; + ConditionsParser.prototype.addConnective = function (con) { + if (this.node.children.length < 2) { + this.node.connective = con; + } + else { + if (this.node.connective != con) { + var oldCon = this.node.connective; + var oldChildren = this.node.children; + this.node.clear(); + this.node.connective = con; + var oldNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + oldNode.connective = oldCon; + oldNode.children = oldChildren; + this.node.children.push(oldNode); + var newNode = new __WEBPACK_IMPORTED_MODULE_0__conditions__["c" /* ConditionNode */](); + this.node.children.push(newNode); + this.node = newNode; + } + } + }; + return ConditionsParser; +}()); + + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return dxSurveyService; }); +var dxSurveyService = (function () { + //public static serviceUrl: string = "http://localhost:50488/api/Survey"; + function dxSurveyService() { + } + dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', dxSurveyService.serviceUrl + '/getSurvey?surveyId=' + surveyId); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.onload = function () { + var result = JSON.parse(xhr.response); + onLoad(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) { + if (clientId === void 0) { clientId = null; } + if (isPartialCompleted === void 0) { isPartialCompleted = false; } + var xhr = new XMLHttpRequest(); + xhr.open('POST', dxSurveyService.serviceUrl + '/post/'); + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + var data = { postId: postId, surveyResult: JSON.stringify(result) }; + if (clientId) + data['clientId'] = clientId; + if (isPartialCompleted) + data['isPartialCompleted'] = true; + var dataStringify = JSON.stringify(data); + var self = this; + xhr.onload = xhr.onerror = function () { + if (!onSendResult) + return; + onSendResult(xhr.status == 200, xhr.response); + }; + xhr.send(dataStringify); + }; + dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) { + var xhr = new XMLHttpRequest(); + xhr.onload = xhr.onerror = function () { + if (!onSendFile) + return; + onSendFile(xhr.status == 200, JSON.parse(xhr.response)); + }; + xhr.open("POST", dxSurveyService.serviceUrl + '/upload/', true); + var formData = new FormData(); + formData.append("file", file); + formData.append("postId", postId); + xhr.send(formData); + }; + dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&name=' + name; + xhr.open('GET', dxSurveyService.serviceUrl + '/getResult?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + var list = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + list = []; + for (var key in result.QuestionResult) { + var el = { name: key, value: result.QuestionResult[key] }; + list.push(el); + } + } + onGetResult(xhr.status == 200, result, list, xhr.response); + }; + xhr.send(); + }; + dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) { + var xhr = new XMLHttpRequest(); + var data = 'resultId=' + resultId + '&clientId=' + clientId; + xhr.open('GET', dxSurveyService.serviceUrl + '/isCompleted?' + data); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + var self = this; + xhr.onload = function () { + var result = null; + if (xhr.status == 200) { + result = JSON.parse(xhr.response); + } + onIsCompleted(xhr.status == 200, result, xhr.response); + }; + xhr.send(); + }; + return dxSurveyService; +}()); + +dxSurveyService.serviceUrl = "https://dxsurveyapi.azurewebsites.net/api/Survey"; + + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(28); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PageModel; }); + + + + +var PageModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PageModel, _super); + function PageModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.numValue = -1; + _this.navigationButtonsVisibility = "inherit"; + return _this; + } + PageModel.prototype.getType = function () { return "page"; }; + Object.defineProperty(PageModel.prototype, "num", { + get: function () { return this.numValue; }, + set: function (value) { + if (this.numValue == value) + return; + this.numValue = value; + this.onNumChanged(value); + }, + enumerable: true, + configurable: true + }); + PageModel.prototype.focusFirstQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + var question = this.questions[i]; + if (!question.visible || !question.hasInput) + continue; + this.questions[i].focus(); + break; + } + }; + PageModel.prototype.focusFirstErrorQuestion = function () { + for (var i = 0; i < this.questions.length; i++) { + if (!this.questions[i].visible || this.questions[i].currentErrorCount == 0) + continue; + this.questions[i].focus(true); + break; + } + }; + PageModel.prototype.scrollToTop = function () { + __WEBPACK_IMPORTED_MODULE_2__base__["c" /* SurveyElement */].ScrollElementToTop(__WEBPACK_IMPORTED_MODULE_2__base__["d" /* SurveyPageId */]); + }; + PageModel.prototype.onNumChanged = function (value) { + }; + PageModel.prototype.onVisibleChanged = function () { + _super.prototype.onVisibleChanged.call(this); + if (this.data != null) { + this.data.pageVisibilityChanged(this, this.visible); + } + }; + return PageModel; +}(__WEBPACK_IMPORTED_MODULE_3__panel__["a" /* PanelModelBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("page", [{ name: "navigationButtonsVisibility", default: "inherit", choices: ["iherit", "show", "hide"] }], function () { return new PageModel(); }, "panel"); + + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return QuestionRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanelModelBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PanelModel; }); + + + + + + +var QuestionRowModel = (function () { + function QuestionRowModel(panel) { + this.panel = panel; + this.elements = []; + this.visibleValue = panel.data && panel.data.isDesignMode; + } + Object.defineProperty(QuestionRowModel.prototype, "questions", { + //TODO remove after updating react and vue + get: function () { return this.elements; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRowModel.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (val) { + if (val == this.visible) + return; + this.visibleValue = val; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + QuestionRowModel.prototype.updateVisible = function () { + this.visible = this.calcVisible(); + this.setWidth(); + }; + QuestionRowModel.prototype.addElement = function (q) { + this.elements.push(q); + this.updateVisible(); + }; + QuestionRowModel.prototype.onVisibleChanged = function () { + if (this.visibilityChangedCallback) + this.visibilityChangedCallback(); + }; + QuestionRowModel.prototype.setWidth = function () { + var visCount = this.getVisibleCount(); + if (visCount == 0) + return; + var counter = 0; + for (var i = 0; i < this.elements.length; i++) + if (this.elements[i].isVisible) { + var q = this.elements[i]; + q.renderWidth = q.width ? q.width : Math.floor(100 / visCount) + '%'; + q.rightIndent = counter < visCount - 1 ? 1 : 0; + counter++; + } + }; + QuestionRowModel.prototype.getVisibleCount = function () { + var res = 0; + for (var i = 0; i < this.elements.length; i++) { + if (this.elements[i].isVisible) + res++; + } + return res; + }; + QuestionRowModel.prototype.calcVisible = function () { return this.getVisibleCount() > 0; }; + return QuestionRowModel; +}()); + +var PanelModelBase = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModelBase, _super); + function PanelModelBase(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this) || this; + _this.name = name; + _this.dataValue = null; + _this.rowValues = null; + _this.conditionRunner = null; + _this.elementsValue = new Array(); + _this.isQuestionsReady = false; + _this.questionsValue = new Array(); + _this.parent = null; + _this.visibleIf = ""; + _this.visibleIndex = -1; + _this.visibleValue = true; + _this.idValue = PanelModelBase.getPanelId(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + var self = _this; + _this.elementsValue.push = function (value) { return self.doOnPushElement(this, value); }; + _this.elementsValue.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + return self.doSpliceElements.apply(self, [this, start, deleteCount].concat(items)); + }; + return _this; + } + PanelModelBase.getPanelId = function () { + return "sp_" + PanelModelBase.panelCounter++; + }; + Object.defineProperty(PanelModelBase.prototype, "data", { + get: function () { return this.dataValue; }, + set: function (value) { + if (this.dataValue === value) + return; + this.dataValue = value; + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].setData(value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "title", { + get: function () { return this.locTitle.text; }, + set: function (newValue) { + this.locTitle.text = newValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getLocale = function () { + return this.data ? this.data.getLocale() : ""; + }; + Object.defineProperty(PanelModelBase.prototype, "id", { + get: function () { return this.idValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isPanel", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "questions", { + get: function () { + if (!this.isQuestionsReady) { + this.questionsValue = []; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel) { + var qs = el.questions; + for (var j = 0; j < qs.length; j++) { + this.questionsValue.push(qs[j]); + } + } + else { + this.questionsValue.push(el); + } + } + this.isQuestionsReady = true; + } + return this.questionsValue; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.markQuestionListDirty = function () { + this.isQuestionsReady = false; + if (this.parent) + this.parent.markQuestionListDirty(); + }; + Object.defineProperty(PanelModelBase.prototype, "elements", { + get: function () { return this.elementsValue; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.containsElement = function (element) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el == element) + return true; + if (el.isPanel) { + if (el.containsElement(element)) + return true; + } + } + return false; + }; + PanelModelBase.prototype.hasErrors = function (fireCallback, focuseOnFirstError) { + if (fireCallback === void 0) { fireCallback = true; } + if (focuseOnFirstError === void 0) { focuseOnFirstError = false; } + var result = false; + var firstErrorQuestion = null; + var visibleQuestions = []; + this.addQuestionsToList(visibleQuestions, true); + for (var i = 0; i < visibleQuestions.length; i++) { + var question = visibleQuestions[i]; + if (question.isReadOnly) + continue; + if (question.hasErrors(fireCallback)) { + if (focuseOnFirstError && firstErrorQuestion == null) { + firstErrorQuestion = question; + } + result = true; + } + } + if (firstErrorQuestion) + firstErrorQuestion.focus(true); + return result; + }; + PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly) { + if (visibleOnly === void 0) { visibleOnly = false; } + if (visibleOnly && !this.visible) + return; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (visibleOnly && !el.visible) + continue; + if (el.isPanel) { + el.addQuestionsToList(list, visibleOnly); + } + else { + list.push(el); + } + } + }; + Object.defineProperty(PanelModelBase.prototype, "rows", { + get: function () { + if (!this.rowValues) { + this.rowValues = this.buildRows(); + } + return this.rowValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "isActive", { + get: function () { return (!this.data) || this.data.currentPage == this.root; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "root", { + get: function () { + var res = this; + while (res.parent) + res = res.parent; + return res; + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.createRow = function () { return new QuestionRowModel(this); }; + PanelModelBase.prototype.onSurveyLoad = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onSurveyLoad(); + } + if (this.rowsChangedCallback) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isLoadingFromJson", { + get: function () { return this.data && this.data.isLoadingFromJson; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onRowsChanged = function () { + this.rowValues = null; + if (this.rowsChangedCallback && !this.isLoadingFromJson) + this.rowsChangedCallback(); + }; + Object.defineProperty(PanelModelBase.prototype, "isDesignMode", { + get: function () { return this.data && this.data.isDesignMode; }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.doOnPushElement = function (list, value) { + var result = Array.prototype.push.call(list, value); + this.markQuestionListDirty(); + this.onAddElement(value, list.length); + this.onRowsChanged(); + return result; + }; + PanelModelBase.prototype.doSpliceElements = function (list, start, deleteCount) { + var items = []; + for (var _i = 3; _i < arguments.length; _i++) { + items[_i - 3] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var deletedQuestions = []; + for (var i = 0; i < deleteCount; i++) { + if (i + start >= list.length) + continue; + deletedQuestions.push(list[i + start]); + } + var result = (_a = Array.prototype.splice).call.apply(_a, [list, start, deleteCount].concat(items)); + this.markQuestionListDirty(); + if (!items) + items = []; + for (var i = 0; i < deletedQuestions.length; i++) { + this.onRemoveElement(deletedQuestions[i]); + } + for (var i = 0; i < items.length; i++) { + this.onAddElement(items[i], start + i); + } + this.onRowsChanged(); + return result; + var _a; + }; + PanelModelBase.prototype.onAddElement = function (element, index) { + if (element.isPanel) { + var p = element; + p.data = this.data; + p.parent = this; + if (this.data) { + this.data.panelAdded(p, index, this, this.root); + } + } + else { + if (this.data) { + var q = element; + q.setData(this.data); + this.data.questionAdded(q, index, this, this.root); + } + } + var self = this; + element.rowVisibilityChangedCallback = function () { self.onElementVisibilityChanged(element); }; + element.startWithNewLineChangedCallback = function () { self.onElementStartWithNewLineChanged(element); }; + }; + PanelModelBase.prototype.onRemoveElement = function (element) { + if (!element.isPanel) { + if (this.data) + this.data.questionRemoved(element); + } + else { + if (this.data) + this.data.panelRemoved(element); + } + }; + PanelModelBase.prototype.onElementVisibilityChanged = function (element) { + if (this.rowValues) { + this.updateRowsVisibility(element); + } + if (this.parent) { + this.parent.onElementVisibilityChanged(this); + } + }; + PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) { + this.onRowsChanged(); + }; + PanelModelBase.prototype.updateRowsVisibility = function (element) { + for (var i = 0; i < this.rowValues.length; i++) { + var row = this.rowValues[i]; + if (row.elements.indexOf(element) > -1) { + row.updateVisible(); + break; + } + } + }; + PanelModelBase.prototype.buildRows = function () { + var result = new Array(); + var lastRowVisibleIndex = -1; + var self = this; + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + var isNewRow = i == 0 || el.startWithNewLine; + var row = isNewRow ? this.createRow() : result[result.length - 1]; + if (isNewRow) + result.push(row); + row.addElement(el); + } + for (var i = 0; i < result.length; i++) { + result[i].updateVisible(); + } + return result; + }; + Object.defineProperty(PanelModelBase.prototype, "processedTitle", { + get: function () { + var str = this.title; + if (!str && this.isPanel && this.isDesignMode) + return "[" + this.name + "]"; + return this.data != null ? this.data.processText(str) : str; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModelBase.prototype, "visible", { + get: function () { return this.visibleValue; }, + set: function (value) { + if (value === this.visible) + return; + this.visibleValue = value; + this.onVisibleChanged(); + }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.onVisibleChanged = function () { + }; + Object.defineProperty(PanelModelBase.prototype, "isVisible", { + get: function () { return (this.data && this.data.isDesignMode) || this.getIsPageVisible(null); }, + enumerable: true, + configurable: true + }); + PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) { + if (!this.visible) + return false; + for (var i = 0; i < this.questions.length; i++) { + if (this.questions[i] == exceptionQuestion) + continue; + if (this.questions[i].visible) + return true; + } + return false; + }; + PanelModelBase.prototype.addElement = function (element, index) { + if (index === void 0) { index = -1; } + if (element == null) + return; + if (index < 0 || index >= this.elements.length) { + this.elements.push(element); + } + else { + this.elements.splice(index, 0, element); + } + }; + PanelModelBase.prototype.addQuestion = function (question, index) { + if (index === void 0) { index = -1; } + this.addElement(question, index); + }; + PanelModelBase.prototype.addPanel = function (panel, index) { + if (index === void 0) { index = -1; } + this.addElement(panel, index); + }; + PanelModelBase.prototype.addNewQuestion = function (questionType, name) { + var question = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.createQuestion(questionType, name); + this.addQuestion(question); + return question; + }; + PanelModelBase.prototype.addNewPanel = function (name) { + var panel = this.createNewPanel(name); + this.addPanel(panel); + return panel; + }; + PanelModelBase.prototype.createNewPanel = function (name) { + return new PanelModel(name); + }; + PanelModelBase.prototype.removeElement = function (element) { + var index = this.elements.indexOf(element); + if (index < 0) { + for (var i = 0; i < this.elements.length; i++) { + var el = this.elements[i]; + if (el.isPanel && el.removeElement(element)) + return true; + } + return false; + } + this.elements.splice(index, 1); + return true; + }; + PanelModelBase.prototype.removeQuestion = function (question) { + this.removeElement(question); + }; + PanelModelBase.prototype.runCondition = function (values) { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].runCondition(values); + } + if (!this.visibleIf) + return; + if (!this.conditionRunner) + this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__["a" /* ConditionRunner */](this.visibleIf); + this.conditionRunner.expression = this.visibleIf; + this.visible = this.conditionRunner.run(values); + }; + PanelModelBase.prototype.onLocaleChanged = function () { + for (var i = 0; i < this.elements.length; i++) { + this.elements[i].onLocaleChanged(); + } + }; + return PanelModelBase; +}(__WEBPACK_IMPORTED_MODULE_2__base__["b" /* Base */])); + +PanelModelBase.panelCounter = 100; +//export class +var PanelModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](PanelModel, _super); + function PanelModel(name) { + if (name === void 0) { name = ""; } + var _this = _super.call(this, name) || this; + _this.name = name; + _this.innerIndentValue = 0; + _this.startWithNewLineValue = true; + return _this; + } + PanelModel.prototype.getType = function () { return "panel"; }; + PanelModel.prototype.setData = function (newValue) { + this.data = newValue; + }; + Object.defineProperty(PanelModel.prototype, "isPanel", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "innerIndent", { + get: function () { return this.innerIndentValue; }, + set: function (val) { + if (val == this.innerIndentValue) + return; + this.innerIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "renderWidth", { + get: function () { return this.renderWidthValue; }, + set: function (val) { + if (val == this.renderWidth) + return; + this.renderWidthValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "startWithNewLine", { + get: function () { return this.startWithNewLineValue; }, + set: function (value) { + if (this.startWithNewLine == value) + return; + this.startWithNewLineValue = value; + if (this.startWithNewLineChangedCallback) + this.startWithNewLineChangedCallback(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PanelModel.prototype, "rightIndent", { + get: function () { return this.rightIndentValue; }, + set: function (val) { + if (val == this.rightIndent) + return; + this.rightIndentValue = val; + if (this.renderWidthChangedCallback) + this.renderWidthChangedCallback(); + }, + enumerable: true, + configurable: true + }); + PanelModel.prototype.onVisibleChanged = function () { + if (this.rowVisibilityChangedCallback) + this.rowVisibilityChangedCallback(); + }; + return PanelModel; +}(PanelModelBase)); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("panel", ["name", { name: "elements", alternativeName: "questions", baseClassName: "question", visible: false }, + { name: "visible:boolean", default: true }, "visibleIf:expression", { name: "title:text", serializationProperty: "locTitle" }, + { name: "innerIndent:number", default: 0, choices: [0, 1, 2, 3] }], function () { return new PanelModel(); }); + + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionCustomWidget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CustomWidgetCollection; }); + +var QuestionCustomWidget = (function () { + function QuestionCustomWidget(name, widgetJson) { + this.name = name; + this.widgetJson = widgetJson; + this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : ""; + } + QuestionCustomWidget.prototype.afterRender = function (question, el) { + if (this.widgetJson.afterRender) + this.widgetJson.afterRender(question, el); + }; + QuestionCustomWidget.prototype.willUnmount = function (question, el) { + if (this.widgetJson.willUnmount) + this.widgetJson.willUnmount(question, el); + }; + QuestionCustomWidget.prototype.isFit = function (question) { + if (this.widgetJson.isFit) + return this.widgetJson.isFit(question); + return false; + }; + return QuestionCustomWidget; +}()); + +var CustomWidgetCollection = (function () { + function CustomWidgetCollection() { + this.widgetsValues = []; + this.onCustomWidgetAdded = new __WEBPACK_IMPORTED_MODULE_0__base__["a" /* Event */](); + } + Object.defineProperty(CustomWidgetCollection.prototype, "widgets", { + get: function () { return this.widgetsValues; }, + enumerable: true, + configurable: true + }); + CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson) { + var name = widgetJson.name; + if (!name) { + name = "widget_" + this.widgets.length + 1; + } + var customWidget = new QuestionCustomWidget(name, widgetJson); + this.widgetsValues.push(customWidget); + this.onCustomWidgetAdded.fire(customWidget, null); + }; + CustomWidgetCollection.prototype.clear = function () { this.widgetsValues = []; }; + CustomWidgetCollection.prototype.getCustomWidget = function (question) { + for (var i = 0; i < this.widgetsValues.length; i++) { + if (this.widgetsValues[i].isFit(question)) + return this.widgetsValues[i]; + } + return null; + }; + return CustomWidgetCollection; +}()); + +CustomWidgetCollection.Instance = new CustomWidgetCollection(); + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return defaultBootstrapCss; }); + +var defaultBootstrapCss = { + root: "", + header: "panel-heading", + body: "panel-body", + footer: "panel-footer", + navigationButton: "", navigation: { complete: "", prev: "", next: "" }, + progress: "progress center-block", progressBar: "progress-bar", + pageTitle: "", + row: "", + question: { root: "", title: "", comment: "form-control", indent: 20 }, + error: { root: "alert alert-danger", icon: "glyphicon glyphicon-exclamation-sign", item: "" }, + checkbox: { root: "form-inline", item: "checkbox", other: "" }, + comment: "form-control", + dropdown: { root: "", control: "form-control" }, + matrix: { root: "table" }, + matrixdropdown: { root: "table" }, + matrixdynamic: { root: "table", button: "button" }, + multipletext: { root: "table", itemTitle: "", itemValue: "form-control" }, + radiogroup: { root: "form-inline", item: "radio", label: "", other: "" }, + rating: { root: "btn-group", item: "btn btn-default" }, + text: "form-control", + window: { + root: "modal-content", body: "modal-body", + header: { + root: "modal-header panel-title", title: "pull-left", button: "glyphicon pull-right", + buttonExpanded: "glyphicon pull-right glyphicon-chevron-up", buttonCollapsed: "glyphicon pull-right glyphicon-chevron-down" + } + } +}; +__WEBPACK_IMPORTED_MODULE_0__cssstandard__["a" /* surveyCss */]["bootstrap"] = defaultBootstrapCss; + + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_czech__ = __webpack_require__(76); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localization_danish__ = __webpack_require__(77); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localization_dutch__ = __webpack_require__(78); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__localization_finnish__ = __webpack_require__(79); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_french__ = __webpack_require__(80); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localization_german__ = __webpack_require__(81); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localization_greek__ = __webpack_require__(82); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localization_polish__ = __webpack_require__(83); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localization_romanian__ = __webpack_require__(84); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localization_russian__ = __webpack_require__(85); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localization_swedish__ = __webpack_require__(86); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localization_turkish__ = __webpack_require__(87); + + + + + + + + + + + + + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(54); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__validator__ = __webpack_require__(22); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_1__validator__["h"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(6); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_2__base__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(8); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__ = __webpack_require__(16); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_5__choicesRestfull__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditions__ = __webpack_require__(15); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_6__conditions__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__conditionsParser__ = __webpack_require__(25); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_7__conditionsParser__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__ = __webpack_require__(17); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_8__conditionProcessValue__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__error__ = __webpack_require__(10); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_9__error__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__jsonobject__ = __webpack_require__(3); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["e"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["f"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["g"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["h"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["i"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_10__jsonobject__["j"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__ = __webpack_require__(18); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_11__question_matrixdropdownbase__["d"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__ = __webpack_require__(94); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_12__question_matrixdropdown__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__ = __webpack_require__(95); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_13__question_matrixdynamic__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__question_matrix__ = __webpack_require__(93); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_14__question_matrix__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__question_multipletext__ = __webpack_require__(96); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_15__question_multipletext__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__panel__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_16__panel__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__page__ = __webpack_require__(27); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_17__page__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__question__ = __webpack_require__(11); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_18__question__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__questionbase__ = __webpack_require__(19); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_19__questionbase__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__question_baseselect__ = __webpack_require__(14); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_20__question_baseselect__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__question_checkbox__ = __webpack_require__(88); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_21__question_checkbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__question_comment__ = __webpack_require__(89); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_22__question_comment__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__question_dropdown__ = __webpack_require__(90); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_23__question_dropdown__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__questionfactory__ = __webpack_require__(7); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_24__questionfactory__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__question_file__ = __webpack_require__(91); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_25__question_file__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__question_html__ = __webpack_require__(92); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_26__question_html__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__ = __webpack_require__(97); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_27__question_radiogroup__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__question_rating__ = __webpack_require__(98); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return __WEBPACK_IMPORTED_MODULE_28__question_rating__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__question_text__ = __webpack_require__(99); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return __WEBPACK_IMPORTED_MODULE_29__question_text__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__survey__ = __webpack_require__(20); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return __WEBPACK_IMPORTED_MODULE_30__survey__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__trigger__ = __webpack_require__(101); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return __WEBPACK_IMPORTED_MODULE_31__trigger__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__surveyWindow__ = __webpack_require__(100); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__ = __webpack_require__(21); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return __WEBPACK_IMPORTED_MODULE_33__textPreProcessor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return __WEBPACK_IMPORTED_MODULE_34__dxSurveyService__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__surveyStrings__ = __webpack_require__(1); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return __WEBPACK_IMPORTED_MODULE_35__surveyStrings__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__ = __webpack_require__(29); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_23", function() { return __WEBPACK_IMPORTED_MODULE_36__questionCustomWidgets__["a"]; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Version; }); +// styles + +var Version; +Version = "" + "0.12.8"; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//Uncomment to include the "date" question type. +//export {default as QuestionDateModel} from "../../plugins/question_date"; + + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(12); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return VueSurveyModel; }); + + + + +var VueSurveyModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](VueSurveyModel, _super); + function VueSurveyModel(jsonObj) { + if (jsonObj === void 0) { jsonObj = null; } + var _this = _super.call(this, jsonObj) || this; + _this.vueValuesHash = {}; + _this.getAllQuestions().forEach(function (question) { return _this.vueValuesHash[question.name] = undefined; }); + return _this; + } + VueSurveyModel.prototype.render = function () { + if (this.renderCallback) { + this.renderCallback(); + } + }; + VueSurveyModel.prototype.onLoadSurveyFromService = function () { + var _this = this; + this.getAllQuestions().forEach(function (question) { return __WEBPACK_IMPORTED_MODULE_1_vue___default.a.set(_this.vueValuesHash, question.name, undefined); }); + this.render(); + }; + VueSurveyModel.prototype.onLoadingSurveyFromService = function () { + this.render(); + }; + Object.defineProperty(VueSurveyModel.prototype, "css", { + get: function () { + return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a" /* surveyCss */].getCss(); + }, + set: function (value) { + this.mergeValues(value, this.css); + }, + enumerable: true, + configurable: true + }); + VueSurveyModel.prototype._setDataValue = function (data, key) { + _super.prototype._setDataValue.call(this, data, key); + this.vueValuesHash[key] = data[key]; + }; + VueSurveyModel.prototype.getValue = function (name) { + if (!name || name.length === 0) + return null; + var value = this.vueValuesHash ? this.vueValuesHash[name] : null; + return _super.prototype.getUnbindValue.call(this, value); + }; + VueSurveyModel.prototype.setValue = function (name, newValue) { + _super.prototype.setValue.call(this, name, newValue); + this.vueValuesHash[name] = newValue; + this.tryGoNextPageAutomatic(name); + }; + return VueSurveyModel; +}(__WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */])); + + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(56), + /* template */ + __webpack_require__(103), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\checkbox.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] checkbox.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-060dbce0", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-060dbce0", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(57), + /* template */ + __webpack_require__(104), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\comment.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] comment.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-0776fbbc", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-0776fbbc", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(58), + /* template */ + __webpack_require__(114), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\dropdown.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] dropdown.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-64d71a44", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-64d71a44", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(59), + /* template */ + __webpack_require__(117), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\errors.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] errors.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-7f5f0a78", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-7f5f0a78", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(60), + /* template */ + __webpack_require__(111), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\file.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] file.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-47c5cd6e", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-47c5cd6e", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(61), + /* template */ + __webpack_require__(106), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\html.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] html.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-18490810", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-18490810", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(62), + /* template */ + __webpack_require__(118), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\matrix.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] matrix.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-af01d064", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-af01d064", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(63), + /* template */ + __webpack_require__(116), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\matrixdropdown.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] matrixdropdown.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-74a6555f", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-74a6555f", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(64), + /* template */ + __webpack_require__(109), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\matrixdynamic.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] matrixdynamic.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-434f4d61", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-434f4d61", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(65), + /* template */ + __webpack_require__(107), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\multipletext.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] multipletext.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-3687b98a", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-3687b98a", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(66), + /* template */ + __webpack_require__(110), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\otherChoice.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] otherChoice.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-4380fa14", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-4380fa14", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(67), + /* template */ + __webpack_require__(108), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\page.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] page.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-3b2ec4dc", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-3b2ec4dc", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(68), + /* template */ + __webpack_require__(119), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\panel.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] panel.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-bf831bf2", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-bf831bf2", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(69), + /* template */ + __webpack_require__(122), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\progress.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] progress.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-eb74fa0c", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-eb74fa0c", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(70), + /* template */ + __webpack_require__(112), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\radiogroup.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] radiogroup.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-5a061b71", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-5a061b71", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(71), + /* template */ + __webpack_require__(120), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\rating.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] rating.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-cd2238ac", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-cd2238ac", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(72), + /* template */ + __webpack_require__(113), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\row.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] row.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-6295b4c6", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-6295b4c6", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(73), + /* template */ + __webpack_require__(105), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\survey.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] survey.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-16bc9a32", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-16bc9a32", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(74), + /* template */ + __webpack_require__(115), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\text.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] text.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-67bbaf0c", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-67bbaf0c", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(5)( + /* script */ + __webpack_require__(75), + /* template */ + __webpack_require__(121), + /* scopeId */ + null, + /* cssModules */ + null +) +Component.options.__file = "D:\\projects\\surveyjs\\src\\vue\\window.vue" +if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")} +if (Component.options.functional) {console.error("[vue-loader] window.vue: functional components are not supported with templates, they should use render functions.")} + +/* hot reload */ +if (false) {(function () { + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + module.hot.accept() + if (!module.hot.data) { + hotAPI.createRecord("data-v-e85ca706", Component.options) + } else { + if (module.hot.data.cssModules && JSON.stringify(module.hot.data.cssModules) !== JSON.stringify(cssModules)) { + delete Component.options._Ctor + } + hotAPI.reload("data-v-e85ca706", Component.options) + } + module.hot.dispose(function (data) { + data.cssModules = cssModules + }) +})()} + +exports.__esModule = true; +exports["default"] = Component.exports + + +/***/ }), +/* 54 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process, global) {/*! ***************************************************************************** +Copyright (C) Microsoft. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +var Reflect; +(function (Reflect) { + "use strict"; + var hasOwn = Object.prototype.hasOwnProperty; + // feature test for Symbol support + var supportsSymbol = typeof Symbol === "function"; + var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== "undefined" ? Symbol.toPrimitive : "@@toPrimitive"; + var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== "undefined" ? Symbol.iterator : "@@iterator"; + var HashMap; + (function (HashMap) { + var supportsCreate = typeof Object.create === "function"; // feature test for Object.create support + var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support + var downLevel = !supportsCreate && !supportsProto; + // create an object in dictionary mode (a.k.a. "slow" mode in v8) + HashMap.create = supportsCreate + ? function () { return MakeDictionary(Object.create(null)); } + : supportsProto + ? function () { return MakeDictionary({ __proto__: null }); } + : function () { return MakeDictionary({}); }; + HashMap.has = downLevel + ? function (map, key) { return hasOwn.call(map, key); } + : function (map, key) { return key in map; }; + HashMap.get = downLevel + ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; } + : function (map, key) { return map[key]; }; + })(HashMap || (HashMap = {})); + // Load global or shim versions of Map, Set, and WeakMap + var functionPrototype = Object.getPrototypeOf(Function); + var usePolyfill = typeof process === "object" && process.env && process.env["REFLECT_METADATA_USE_MAP_POLYFILL"] === "true"; + var _Map = !usePolyfill && typeof Map === "function" && typeof Map.prototype.entries === "function" ? Map : CreateMapPolyfill(); + var _Set = !usePolyfill && typeof Set === "function" && typeof Set.prototype.entries === "function" ? Set : CreateSetPolyfill(); + var _WeakMap = !usePolyfill && typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill(); + // [[Metadata]] internal slot + // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots + var Metadata = new _WeakMap(); + /** + * Applies a set of decorators to a property of a target object. + * @param decorators An array of decorators. + * @param target The target object. + * @param propertyKey (Optional) The property key to decorate. + * @param attributes (Optional) The property descriptor for the target key. + * @remarks Decorators are applied in reverse order. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * Example = Reflect.decorate(decoratorsArray, Example); + * + * // property (on constructor) + * Reflect.decorate(decoratorsArray, Example, "staticProperty"); + * + * // property (on prototype) + * Reflect.decorate(decoratorsArray, Example.prototype, "property"); + * + * // method (on constructor) + * Object.defineProperty(Example, "staticMethod", + * Reflect.decorate(decoratorsArray, Example, "staticMethod", + * Object.getOwnPropertyDescriptor(Example, "staticMethod"))); + * + * // method (on prototype) + * Object.defineProperty(Example.prototype, "method", + * Reflect.decorate(decoratorsArray, Example.prototype, "method", + * Object.getOwnPropertyDescriptor(Example.prototype, "method"))); + * + */ + function decorate(decorators, target, propertyKey, attributes) { + if (!IsUndefined(propertyKey)) { + if (!IsArray(decorators)) + throw new TypeError(); + if (!IsObject(target)) + throw new TypeError(); + if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes)) + throw new TypeError(); + if (IsNull(attributes)) + attributes = undefined; + propertyKey = ToPropertyKey(propertyKey); + return DecorateProperty(decorators, target, propertyKey, attributes); + } + else { + if (!IsArray(decorators)) + throw new TypeError(); + if (!IsConstructor(target)) + throw new TypeError(); + return DecorateConstructor(decorators, target); + } + } + Reflect.decorate = decorate; + // 4.1.2 Reflect.metadata(metadataKey, metadataValue) + // https://rbuckton.github.io/reflect-metadata/#reflect.metadata + /** + * A default metadata decorator factory that can be used on a class, class member, or parameter. + * @param metadataKey The key for the metadata entry. + * @param metadataValue The value for the metadata entry. + * @returns A decorator function. + * @remarks + * If `metadataKey` is already defined for the target and target key, the + * metadataValue for that key will be overwritten. + * @example + * + * // constructor + * @Reflect.metadata(key, value) + * class Example { + * } + * + * // property (on constructor, TypeScript only) + * class Example { + * @Reflect.metadata(key, value) + * static staticProperty; + * } + * + * // property (on prototype, TypeScript only) + * class Example { + * @Reflect.metadata(key, value) + * property; + * } + * + * // method (on constructor) + * class Example { + * @Reflect.metadata(key, value) + * static staticMethod() { } + * } + * + * // method (on prototype) + * class Example { + * @Reflect.metadata(key, value) + * method() { } + * } + * + */ + function metadata(metadataKey, metadataValue) { + function decorator(target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey)) + throw new TypeError(); + OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey); + } + return decorator; + } + Reflect.metadata = metadata; + /** + * Define a unique metadata entry on the target. + * @param metadataKey A key used to store and retrieve metadata. + * @param metadataValue A value that contains attached metadata. + * @param target The target object on which to define metadata. + * @param propertyKey (Optional) The property key for the target. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * Reflect.defineMetadata("custom:annotation", options, Example); + * + * // property (on constructor) + * Reflect.defineMetadata("custom:annotation", options, Example, "staticProperty"); + * + * // property (on prototype) + * Reflect.defineMetadata("custom:annotation", options, Example.prototype, "property"); + * + * // method (on constructor) + * Reflect.defineMetadata("custom:annotation", options, Example, "staticMethod"); + * + * // method (on prototype) + * Reflect.defineMetadata("custom:annotation", options, Example.prototype, "method"); + * + * // decorator factory as metadata-producing annotation. + * function MyAnnotation(options): Decorator { + * return (target, key?) => Reflect.defineMetadata("custom:annotation", options, target, key); + * } + * + */ + function defineMetadata(metadataKey, metadataValue, target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey); + } + Reflect.defineMetadata = defineMetadata; + /** + * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined. + * @param metadataKey A key used to store and retrieve metadata. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.hasMetadata("custom:annotation", Example); + * + * // property (on constructor) + * result = Reflect.hasMetadata("custom:annotation", Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.hasMetadata("custom:annotation", Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.hasMetadata("custom:annotation", Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.hasMetadata("custom:annotation", Example.prototype, "method"); + * + */ + function hasMetadata(metadataKey, target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryHasMetadata(metadataKey, target, propertyKey); + } + Reflect.hasMetadata = hasMetadata; + /** + * Gets a value indicating whether the target object has the provided metadata key defined. + * @param metadataKey A key used to store and retrieve metadata. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns `true` if the metadata key was defined on the target object; otherwise, `false`. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.hasOwnMetadata("custom:annotation", Example); + * + * // property (on constructor) + * result = Reflect.hasOwnMetadata("custom:annotation", Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.hasOwnMetadata("custom:annotation", Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.hasOwnMetadata("custom:annotation", Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.hasOwnMetadata("custom:annotation", Example.prototype, "method"); + * + */ + function hasOwnMetadata(metadataKey, target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey); + } + Reflect.hasOwnMetadata = hasOwnMetadata; + /** + * Gets the metadata value for the provided metadata key on the target object or its prototype chain. + * @param metadataKey A key used to store and retrieve metadata. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns The metadata value for the metadata key if found; otherwise, `undefined`. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.getMetadata("custom:annotation", Example); + * + * // property (on constructor) + * result = Reflect.getMetadata("custom:annotation", Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.getMetadata("custom:annotation", Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.getMetadata("custom:annotation", Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.getMetadata("custom:annotation", Example.prototype, "method"); + * + */ + function getMetadata(metadataKey, target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryGetMetadata(metadataKey, target, propertyKey); + } + Reflect.getMetadata = getMetadata; + /** + * Gets the metadata value for the provided metadata key on the target object. + * @param metadataKey A key used to store and retrieve metadata. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns The metadata value for the metadata key if found; otherwise, `undefined`. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.getOwnMetadata("custom:annotation", Example); + * + * // property (on constructor) + * result = Reflect.getOwnMetadata("custom:annotation", Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.getOwnMetadata("custom:annotation", Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.getOwnMetadata("custom:annotation", Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.getOwnMetadata("custom:annotation", Example.prototype, "method"); + * + */ + function getOwnMetadata(metadataKey, target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey); + } + Reflect.getOwnMetadata = getOwnMetadata; + /** + * Gets the metadata keys defined on the target object or its prototype chain. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns An array of unique metadata keys. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.getMetadataKeys(Example); + * + * // property (on constructor) + * result = Reflect.getMetadataKeys(Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.getMetadataKeys(Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.getMetadataKeys(Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.getMetadataKeys(Example.prototype, "method"); + * + */ + function getMetadataKeys(target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryMetadataKeys(target, propertyKey); + } + Reflect.getMetadataKeys = getMetadataKeys; + /** + * Gets the unique metadata keys defined on the target object. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns An array of unique metadata keys. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.getOwnMetadataKeys(Example); + * + * // property (on constructor) + * result = Reflect.getOwnMetadataKeys(Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.getOwnMetadataKeys(Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.getOwnMetadataKeys(Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.getOwnMetadataKeys(Example.prototype, "method"); + * + */ + function getOwnMetadataKeys(target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + return OrdinaryOwnMetadataKeys(target, propertyKey); + } + Reflect.getOwnMetadataKeys = getOwnMetadataKeys; + /** + * Deletes the metadata entry from the target object with the provided key. + * @param metadataKey A key used to store and retrieve metadata. + * @param target The target object on which the metadata is defined. + * @param propertyKey (Optional) The property key for the target. + * @returns `true` if the metadata entry was found and deleted; otherwise, false. + * @example + * + * class Example { + * // property declarations are not part of ES6, though they are valid in TypeScript: + * // static staticProperty; + * // property; + * + * constructor(p) { } + * static staticMethod(p) { } + * method(p) { } + * } + * + * // constructor + * result = Reflect.deleteMetadata("custom:annotation", Example); + * + * // property (on constructor) + * result = Reflect.deleteMetadata("custom:annotation", Example, "staticProperty"); + * + * // property (on prototype) + * result = Reflect.deleteMetadata("custom:annotation", Example.prototype, "property"); + * + * // method (on constructor) + * result = Reflect.deleteMetadata("custom:annotation", Example, "staticMethod"); + * + * // method (on prototype) + * result = Reflect.deleteMetadata("custom:annotation", Example.prototype, "method"); + * + */ + function deleteMetadata(metadataKey, target, propertyKey) { + if (!IsObject(target)) + throw new TypeError(); + if (!IsUndefined(propertyKey)) + propertyKey = ToPropertyKey(propertyKey); + var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false); + if (IsUndefined(metadataMap)) + return false; + if (!metadataMap.delete(metadataKey)) + return false; + if (metadataMap.size > 0) + return true; + var targetMetadata = Metadata.get(target); + targetMetadata.delete(propertyKey); + if (targetMetadata.size > 0) + return true; + Metadata.delete(target); + return true; + } + Reflect.deleteMetadata = deleteMetadata; + function DecorateConstructor(decorators, target) { + for (var i = decorators.length - 1; i >= 0; --i) { + var decorator = decorators[i]; + var decorated = decorator(target); + if (!IsUndefined(decorated) && !IsNull(decorated)) { + if (!IsConstructor(decorated)) + throw new TypeError(); + target = decorated; + } + } + return target; + } + function DecorateProperty(decorators, target, propertyKey, descriptor) { + for (var i = decorators.length - 1; i >= 0; --i) { + var decorator = decorators[i]; + var decorated = decorator(target, propertyKey, descriptor); + if (!IsUndefined(decorated) && !IsNull(decorated)) { + if (!IsObject(decorated)) + throw new TypeError(); + descriptor = decorated; + } + } + return descriptor; + } + function GetOrCreateMetadataMap(O, P, Create) { + var targetMetadata = Metadata.get(O); + if (IsUndefined(targetMetadata)) { + if (!Create) + return undefined; + targetMetadata = new _Map(); + Metadata.set(O, targetMetadata); + } + var metadataMap = targetMetadata.get(P); + if (IsUndefined(metadataMap)) { + if (!Create) + return undefined; + metadataMap = new _Map(); + targetMetadata.set(P, metadataMap); + } + return metadataMap; + } + // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata + function OrdinaryHasMetadata(MetadataKey, O, P) { + var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P); + if (hasOwn) + return true; + var parent = OrdinaryGetPrototypeOf(O); + if (!IsNull(parent)) + return OrdinaryHasMetadata(MetadataKey, parent, P); + return false; + } + // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata + function OrdinaryHasOwnMetadata(MetadataKey, O, P) { + var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false); + if (IsUndefined(metadataMap)) + return false; + return ToBoolean(metadataMap.has(MetadataKey)); + } + // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata + function OrdinaryGetMetadata(MetadataKey, O, P) { + var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P); + if (hasOwn) + return OrdinaryGetOwnMetadata(MetadataKey, O, P); + var parent = OrdinaryGetPrototypeOf(O); + if (!IsNull(parent)) + return OrdinaryGetMetadata(MetadataKey, parent, P); + return undefined; + } + // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata + function OrdinaryGetOwnMetadata(MetadataKey, O, P) { + var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false); + if (IsUndefined(metadataMap)) + return undefined; + return metadataMap.get(MetadataKey); + } + // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata + function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) { + var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true); + metadataMap.set(MetadataKey, MetadataValue); + } + // 3.1.6.1 OrdinaryMetadataKeys(O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys + function OrdinaryMetadataKeys(O, P) { + var ownKeys = OrdinaryOwnMetadataKeys(O, P); + var parent = OrdinaryGetPrototypeOf(O); + if (parent === null) + return ownKeys; + var parentKeys = OrdinaryMetadataKeys(parent, P); + if (parentKeys.length <= 0) + return ownKeys; + if (ownKeys.length <= 0) + return parentKeys; + var set = new _Set(); + var keys = []; + for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) { + var key = ownKeys_1[_i]; + var hasKey = set.has(key); + if (!hasKey) { + set.add(key); + keys.push(key); + } + } + for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) { + var key = parentKeys_1[_a]; + var hasKey = set.has(key); + if (!hasKey) { + set.add(key); + keys.push(key); + } + } + return keys; + } + // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P) + // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys + function OrdinaryOwnMetadataKeys(O, P) { + var keys = []; + var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false); + if (IsUndefined(metadataMap)) + return keys; + var keysObj = metadataMap.keys(); + var iterator = GetIterator(keysObj); + var k = 0; + while (true) { + var next = IteratorStep(iterator); + if (!next) { + keys.length = k; + return keys; + } + var nextValue = IteratorValue(next); + try { + keys[k] = nextValue; + } + catch (e) { + try { + IteratorClose(iterator); + } + finally { + throw e; + } + } + k++; + } + } + // 6 ECMAScript Data Typ0es and Values + // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values + function Type(x) { + if (x === null) + return 1 /* Null */; + switch (typeof x) { + case "undefined": return 0 /* Undefined */; + case "boolean": return 2 /* Boolean */; + case "string": return 3 /* String */; + case "symbol": return 4 /* Symbol */; + case "number": return 5 /* Number */; + case "object": return x === null ? 1 /* Null */ : 6 /* Object */; + default: return 6 /* Object */; + } + } + // 6.1.1 The Undefined Type + // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type + function IsUndefined(x) { + return x === undefined; + } + // 6.1.2 The Null Type + // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type + function IsNull(x) { + return x === null; + } + // 6.1.5 The Symbol Type + // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type + function IsSymbol(x) { + return typeof x === "symbol"; + } + // 6.1.7 The Object Type + // https://tc39.github.io/ecma262/#sec-object-type + function IsObject(x) { + return typeof x === "object" ? x !== null : typeof x === "function"; + } + // 7.1 Type Conversion + // https://tc39.github.io/ecma262/#sec-type-conversion + // 7.1.1 ToPrimitive(input [, PreferredType]) + // https://tc39.github.io/ecma262/#sec-toprimitive + function ToPrimitive(input, PreferredType) { + switch (Type(input)) { + case 0 /* Undefined */: return input; + case 1 /* Null */: return input; + case 2 /* Boolean */: return input; + case 3 /* String */: return input; + case 4 /* Symbol */: return input; + case 5 /* Number */: return input; + } + var hint = PreferredType === 3 /* String */ ? "string" : PreferredType === 5 /* Number */ ? "number" : "default"; + var exoticToPrim = GetMethod(input, toPrimitiveSymbol); + if (exoticToPrim !== undefined) { + var result = exoticToPrim.call(input, hint); + if (IsObject(result)) + throw new TypeError(); + return result; + } + return OrdinaryToPrimitive(input, hint === "default" ? "number" : hint); + } + // 7.1.1.1 OrdinaryToPrimitive(O, hint) + // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive + function OrdinaryToPrimitive(O, hint) { + if (hint === "string") { + var toString_1 = O.toString; + if (IsCallable(toString_1)) { + var result = toString_1.call(O); + if (!IsObject(result)) + return result; + } + var valueOf = O.valueOf; + if (IsCallable(valueOf)) { + var result = valueOf.call(O); + if (!IsObject(result)) + return result; + } + } + else { + var valueOf = O.valueOf; + if (IsCallable(valueOf)) { + var result = valueOf.call(O); + if (!IsObject(result)) + return result; + } + var toString_2 = O.toString; + if (IsCallable(toString_2)) { + var result = toString_2.call(O); + if (!IsObject(result)) + return result; + } + } + throw new TypeError(); + } + // 7.1.2 ToBoolean(argument) + // https://tc39.github.io/ecma262/2016/#sec-toboolean + function ToBoolean(argument) { + return !!argument; + } + // 7.1.12 ToString(argument) + // https://tc39.github.io/ecma262/#sec-tostring + function ToString(argument) { + return "" + argument; + } + // 7.1.14 ToPropertyKey(argument) + // https://tc39.github.io/ecma262/#sec-topropertykey + function ToPropertyKey(argument) { + var key = ToPrimitive(argument, 3 /* String */); + if (IsSymbol(key)) + return key; + return ToString(key); + } + // 7.2 Testing and Comparison Operations + // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations + // 7.2.2 IsArray(argument) + // https://tc39.github.io/ecma262/#sec-isarray + function IsArray(argument) { + return Array.isArray + ? Array.isArray(argument) + : argument instanceof Object + ? argument instanceof Array + : Object.prototype.toString.call(argument) === "[object Array]"; + } + // 7.2.3 IsCallable(argument) + // https://tc39.github.io/ecma262/#sec-iscallable + function IsCallable(argument) { + // NOTE: This is an approximation as we cannot check for [[Call]] internal method. + return typeof argument === "function"; + } + // 7.2.4 IsConstructor(argument) + // https://tc39.github.io/ecma262/#sec-isconstructor + function IsConstructor(argument) { + // NOTE: This is an approximation as we cannot check for [[Construct]] internal method. + return typeof argument === "function"; + } + // 7.2.7 IsPropertyKey(argument) + // https://tc39.github.io/ecma262/#sec-ispropertykey + function IsPropertyKey(argument) { + switch (Type(argument)) { + case 3 /* String */: return true; + case 4 /* Symbol */: return true; + default: return false; + } + } + // 7.3 Operations on Objects + // https://tc39.github.io/ecma262/#sec-operations-on-objects + // 7.3.9 GetMethod(V, P) + // https://tc39.github.io/ecma262/#sec-getmethod + function GetMethod(V, P) { + var func = V[P]; + if (func === undefined || func === null) + return undefined; + if (!IsCallable(func)) + throw new TypeError(); + return func; + } + // 7.4 Operations on Iterator Objects + // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects + function GetIterator(obj) { + var method = GetMethod(obj, iteratorSymbol); + if (!IsCallable(method)) + throw new TypeError(); // from Call + var iterator = method.call(obj); + if (!IsObject(iterator)) + throw new TypeError(); + return iterator; + } + // 7.4.4 IteratorValue(iterResult) + // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue + function IteratorValue(iterResult) { + return iterResult.value; + } + // 7.4.5 IteratorStep(iterator) + // https://tc39.github.io/ecma262/#sec-iteratorstep + function IteratorStep(iterator) { + var result = iterator.next(); + return result.done ? false : result; + } + // 7.4.6 IteratorClose(iterator, completion) + // https://tc39.github.io/ecma262/#sec-iteratorclose + function IteratorClose(iterator) { + var f = iterator["return"]; + if (f) + f.call(iterator); + } + // 9.1 Ordinary Object Internal Methods and Internal Slots + // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots + // 9.1.1.1 OrdinaryGetPrototypeOf(O) + // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof + function OrdinaryGetPrototypeOf(O) { + var proto = Object.getPrototypeOf(O); + if (typeof O !== "function" || O === functionPrototype) + return proto; + // TypeScript doesn't set __proto__ in ES5, as it's non-standard. + // Try to determine the superclass constructor. Compatible implementations + // must either set __proto__ on a subclass constructor to the superclass constructor, + // or ensure each class has a valid `constructor` property on its prototype that + // points back to the constructor. + // If this is not the same as Function.[[Prototype]], then this is definately inherited. + // This is the case when in ES6 or when using __proto__ in a compatible browser. + if (proto !== functionPrototype) + return proto; + // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage. + var prototype = O.prototype; + var prototypeProto = prototype && Object.getPrototypeOf(prototype); + if (prototypeProto == null || prototypeProto === Object.prototype) + return proto; + // If the constructor was not a function, then we cannot determine the heritage. + var constructor = prototypeProto.constructor; + if (typeof constructor !== "function") + return proto; + // If we have some kind of self-reference, then we cannot determine the heritage. + if (constructor === O) + return proto; + // we have a pretty good guess at the heritage. + return constructor; + } + // naive Map shim + function CreateMapPolyfill() { + var cacheSentinel = {}; + var arraySentinel = []; + var MapIterator = (function () { + function MapIterator(keys, values, selector) { + this._index = 0; + this._keys = keys; + this._values = values; + this._selector = selector; + } + MapIterator.prototype["@@iterator"] = function () { return this; }; + MapIterator.prototype[iteratorSymbol] = function () { return this; }; + MapIterator.prototype.next = function () { + var index = this._index; + if (index >= 0 && index < this._keys.length) { + var result = this._selector(this._keys[index], this._values[index]); + if (index + 1 >= this._keys.length) { + this._index = -1; + this._keys = arraySentinel; + this._values = arraySentinel; + } + else { + this._index++; + } + return { value: result, done: false }; + } + return { value: undefined, done: true }; + }; + MapIterator.prototype.throw = function (error) { + if (this._index >= 0) { + this._index = -1; + this._keys = arraySentinel; + this._values = arraySentinel; + } + throw error; + }; + MapIterator.prototype.return = function (value) { + if (this._index >= 0) { + this._index = -1; + this._keys = arraySentinel; + this._values = arraySentinel; + } + return { value: value, done: true }; + }; + return MapIterator; + }()); + return (function () { + function Map() { + this._keys = []; + this._values = []; + this._cacheKey = cacheSentinel; + this._cacheIndex = -2; + } + Object.defineProperty(Map.prototype, "size", { + get: function () { return this._keys.length; }, + enumerable: true, + configurable: true + }); + Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; }; + Map.prototype.get = function (key) { + var index = this._find(key, /*insert*/ false); + return index >= 0 ? this._values[index] : undefined; + }; + Map.prototype.set = function (key, value) { + var index = this._find(key, /*insert*/ true); + this._values[index] = value; + return this; + }; + Map.prototype.delete = function (key) { + var index = this._find(key, /*insert*/ false); + if (index >= 0) { + var size = this._keys.length; + for (var i = index + 1; i < size; i++) { + this._keys[i - 1] = this._keys[i]; + this._values[i - 1] = this._values[i]; + } + this._keys.length--; + this._values.length--; + if (key === this._cacheKey) { + this._cacheKey = cacheSentinel; + this._cacheIndex = -2; + } + return true; + } + return false; + }; + Map.prototype.clear = function () { + this._keys.length = 0; + this._values.length = 0; + this._cacheKey = cacheSentinel; + this._cacheIndex = -2; + }; + Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); }; + Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); }; + Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); }; + Map.prototype["@@iterator"] = function () { return this.entries(); }; + Map.prototype[iteratorSymbol] = function () { return this.entries(); }; + Map.prototype._find = function (key, insert) { + if (this._cacheKey !== key) { + this._cacheIndex = this._keys.indexOf(this._cacheKey = key); + } + if (this._cacheIndex < 0 && insert) { + this._cacheIndex = this._keys.length; + this._keys.push(key); + this._values.push(undefined); + } + return this._cacheIndex; + }; + return Map; + }()); + function getKey(key, _) { + return key; + } + function getValue(_, value) { + return value; + } + function getEntry(key, value) { + return [key, value]; + } + } + // naive Set shim + function CreateSetPolyfill() { + return (function () { + function Set() { + this._map = new _Map(); + } + Object.defineProperty(Set.prototype, "size", { + get: function () { return this._map.size; }, + enumerable: true, + configurable: true + }); + Set.prototype.has = function (value) { return this._map.has(value); }; + Set.prototype.add = function (value) { return this._map.set(value, value), this; }; + Set.prototype.delete = function (value) { return this._map.delete(value); }; + Set.prototype.clear = function () { this._map.clear(); }; + Set.prototype.keys = function () { return this._map.keys(); }; + Set.prototype.values = function () { return this._map.values(); }; + Set.prototype.entries = function () { return this._map.entries(); }; + Set.prototype["@@iterator"] = function () { return this.keys(); }; + Set.prototype[iteratorSymbol] = function () { return this.keys(); }; + return Set; + }()); + } + // naive WeakMap shim + function CreateWeakMapPolyfill() { + var UUID_SIZE = 16; + var keys = HashMap.create(); + var rootKey = CreateUniqueKey(); + return (function () { + function WeakMap() { + this._key = CreateUniqueKey(); + } + WeakMap.prototype.has = function (target) { + var table = GetOrCreateWeakMapTable(target, /*create*/ false); + return table !== undefined ? HashMap.has(table, this._key) : false; + }; + WeakMap.prototype.get = function (target) { + var table = GetOrCreateWeakMapTable(target, /*create*/ false); + return table !== undefined ? HashMap.get(table, this._key) : undefined; + }; + WeakMap.prototype.set = function (target, value) { + var table = GetOrCreateWeakMapTable(target, /*create*/ true); + table[this._key] = value; + return this; + }; + WeakMap.prototype.delete = function (target) { + var table = GetOrCreateWeakMapTable(target, /*create*/ false); + return table !== undefined ? delete table[this._key] : false; + }; + WeakMap.prototype.clear = function () { + // NOTE: not a real clear, just makes the previous data unreachable + this._key = CreateUniqueKey(); + }; + return WeakMap; + }()); + function CreateUniqueKey() { + var key; + do + key = "@@WeakMap@@" + CreateUUID(); + while (HashMap.has(keys, key)); + keys[key] = true; + return key; + } + function GetOrCreateWeakMapTable(target, create) { + if (!hasOwn.call(target, rootKey)) { + if (!create) + return undefined; + Object.defineProperty(target, rootKey, { value: HashMap.create() }); + } + return target[rootKey]; + } + function FillRandomBytes(buffer, size) { + for (var i = 0; i < size; ++i) + buffer[i] = Math.random() * 0xff | 0; + return buffer; + } + function GenRandomBytes(size) { + if (typeof Uint8Array === "function") { + if (typeof crypto !== "undefined") + return crypto.getRandomValues(new Uint8Array(size)); + if (typeof msCrypto !== "undefined") + return msCrypto.getRandomValues(new Uint8Array(size)); + return FillRandomBytes(new Uint8Array(size), size); + } + return FillRandomBytes(new Array(size), size); + } + function CreateUUID() { + var data = GenRandomBytes(UUID_SIZE); + // mark as random - RFC 4122 § 4.4 + data[6] = data[6] & 0x4f | 0x40; + data[8] = data[8] & 0xbf | 0x80; + var result = ""; + for (var offset = 0; offset < UUID_SIZE; ++offset) { + var byte = data[offset]; + if (offset === 4 || offset === 6 || offset === 8) + result += "-"; + if (byte < 16) + result += "0"; + result += byte.toString(16).toLowerCase(); + } + return result; + } + } + // uses a heuristic used by v8 and chakra to force an object into dictionary mode. + function MakeDictionary(obj) { + obj.__ = undefined; + delete obj.__; + return obj; + } + // patch global Reflect + (function (__global) { + if (typeof __global.Reflect !== "undefined") { + if (__global.Reflect !== Reflect) { + for (var p in Reflect) { + if (hasOwn.call(Reflect, p)) { + __global.Reflect[p] = Reflect[p]; + } + } + } + } + else { + __global.Reflect = Reflect; + } + })(typeof global !== "undefined" ? global : + typeof self !== "undefined" ? self : + Function("return this;")()); +})(Reflect || (Reflect = {})); +//# sourceMappingURL=Reflect.js.map +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24), __webpack_require__(123))) + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Checkbox = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Checkbox, _super); + function Checkbox() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(Checkbox.prototype, "value", { + get: function () { + return this.question.value || []; + }, + set: function (newVal) { + this.question.value = newVal; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Checkbox.prototype, "colWidth", { + get: function () { + var colCount = this.question.colCount; + return colCount > 0 ? (100 / colCount) + '%' : ""; + }, + enumerable: true, + configurable: true + }); + return Checkbox; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Checkbox = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Checkbox); +/* harmony default export */ __webpack_exports__["default"] = Checkbox; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-checkbox", Checkbox); + + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Comment = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Comment, _super); + function Comment() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Comment; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Comment = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Comment); +/* harmony default export */ __webpack_exports__["default"] = Comment; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-comment", Comment); + + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Dropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Dropdown, _super); + function Dropdown() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Dropdown; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Dropdown = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Dropdown); +/* harmony default export */ __webpack_exports__["default"] = Dropdown; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-dropdown", Dropdown); + + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); + + + +var Errors = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Errors, _super); + function Errors() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Errors; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Errors.prototype, "question", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Errors.prototype, "css", void 0); +Errors = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Errors); +/* harmony default export */ __webpack_exports__["default"] = Errors; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-errors", Errors); + + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var File = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](File, _super); + function File() { + return _super !== null && _super.apply(this, arguments) || this; + } + File.prototype.doChange = function (e) { + var src = e.target || e.srcElement; + if (!window["FileReader"]) + return; + if (!src || !src.files || src.files.length < 1) + return; + this.question.loadFile(src.files[0]); + }; + return File; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +File = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], File); +/* harmony default export */ __webpack_exports__["default"] = File; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-file", File); + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); + + + +var Html = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Html, _super); + function Html() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Html; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Html.prototype, "question", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Html.prototype, "css", void 0); +Html = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Html); +/* harmony default export */ __webpack_exports__["default"] = Html; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-html", Html); + + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Matrix = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Matrix, _super); + function Matrix() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Matrix; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Matrix = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Matrix); +/* harmony default export */ __webpack_exports__["default"] = Matrix; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-matrix", Matrix); + + +/***/ }), +/* 63 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var MatrixDropdown = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdown, _super); + function MatrixDropdown() { + return _super !== null && _super.apply(this, arguments) || this; + } + return MatrixDropdown; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +MatrixDropdown = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], MatrixDropdown); +/* harmony default export */ __webpack_exports__["default"] = MatrixDropdown; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-matrixdropdown", MatrixDropdown); + + +/***/ }), +/* 64 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var MatrixDynamic = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDynamic, _super); + function MatrixDynamic() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(MatrixDynamic.prototype, "rows", { + get: function () { + return this.question.visibleRows; + }, + enumerable: true, + configurable: true + }); + MatrixDynamic.prototype.removeRowClick = function (row) { + var rows = this.question.cachedVisibleRows; + var index = rows.indexOf(row); + if (index > -1) { + this.question.removeRow(index); + } + }; + MatrixDynamic.prototype.addRowClick = function () { + this.question.addRow(); + }; + return MatrixDynamic; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +MatrixDynamic = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], MatrixDynamic); +/* harmony default export */ __webpack_exports__["default"] = MatrixDynamic; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-matrixdynamic", MatrixDynamic); + + +/***/ }), +/* 65 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var MultipleText = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleText, _super); + function MultipleText() { + return _super !== null && _super.apply(this, arguments) || this; + } + return MultipleText; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +MultipleText = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], MultipleText); +/* harmony default export */ __webpack_exports__["default"] = MultipleText; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-multipletext", MultipleText); + + +/***/ }), +/* 66 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); + + + +var OtherChoice = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](OtherChoice, _super); + function OtherChoice() { + return _super !== null && _super.apply(this, arguments) || this; + } + return OtherChoice; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], OtherChoice.prototype, "question", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], OtherChoice.prototype, "css", void 0); +OtherChoice = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], OtherChoice); +/* harmony default export */ __webpack_exports__["default"] = OtherChoice; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-other-choice", OtherChoice); + + +/***/ }), +/* 67 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers__ = __webpack_require__(23); + + + + +var Page = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Page, _super); + function Page() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(Page.prototype, "hasTitle", { + get: function () { + return !!this.page.title && this.survey.showPageTitles; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Page.prototype, "num", { + get: function () { + return this.page.num > 0 ? this.page.num + ". " : ""; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Page.prototype, "rows", { + get: function () { + return this.page.rows; + }, + enumerable: true, + configurable: true + }); + return Page; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Page.prototype, "survey", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Page.prototype, "page", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Page.prototype, "css", void 0); +Page = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"])({ + mixins: [__WEBPACK_IMPORTED_MODULE_3__helpers__["a" /* helpers */]] + }) +], Page); +/* harmony default export */ __webpack_exports__["default"] = Page; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-page", Page); + + +/***/ }), +/* 68 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers__ = __webpack_require__(23); + + + + +var Panel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Panel, _super); + function Panel() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(Panel.prototype, "rows", { + get: function () { + return this.question.rows; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Panel.prototype, "hasTitle", { + get: function () { + return this.question.title.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Panel.prototype, "survey", { + get: function () { + return this.question.data; + }, + enumerable: true, + configurable: true + }); + return Panel; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Panel.prototype, "question", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Panel.prototype, "isEditMode", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Panel.prototype, "css", void 0); +Panel = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"])({ + mixins: [__WEBPACK_IMPORTED_MODULE_3__helpers__["a" /* helpers */]] + }) +], Panel); +/* harmony default export */ __webpack_exports__["default"] = Panel; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-panel", Panel); + + +/***/ }), +/* 69 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); + + + +var Progress = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Progress, _super); + function Progress() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(Progress.prototype, "progress", { + get: function () { + return this.survey.getProgress() + '%'; + }, + enumerable: true, + configurable: true + }); + return Progress; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Progress.prototype, "survey", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Progress.prototype, "css", void 0); +Progress = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Progress); +/* harmony default export */ __webpack_exports__["default"] = Progress; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-progress", Progress); + + +/***/ }), +/* 70 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Radiogroup = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Radiogroup, _super); + function Radiogroup() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(Radiogroup.prototype, "colWidth", { + // TODO may be need to move to the model + get: function () { + var colCount = this.question.colCount; + return colCount > 0 ? (100 / colCount) + '%' : ""; + }, + enumerable: true, + configurable: true + }); + return Radiogroup; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Radiogroup = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Radiogroup); +/* harmony default export */ __webpack_exports__["default"] = Radiogroup; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-radiogroup", Radiogroup); + + +/***/ }), +/* 71 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Rating = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Rating, _super); + function Rating() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.selection = ''; + return _this; + } + Rating.prototype.getCss = function (item) { + var css = this.css.rating.item; + if (this.selection == item.value || this.question.value == item.value) { + css = css + " active"; + } + return css; + }; + Rating.prototype.change = function (e) { + this.selection = this.question.value = e.target.value; + }; + return Rating; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Rating = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Rating); +/* harmony default export */ __webpack_exports__["default"] = Rating; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-rating", Rating); + + +/***/ }), +/* 72 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers__ = __webpack_require__(23); + + + + +var Row = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Row, _super); + function Row() { + return _super !== null && _super.apply(this, arguments) || this; + } + Row.prototype.getWidgetComponentName = function (element) { + if (element.customWidget) { + return element.customWidget.name; + } + return 'survey-' + element.getType(); + }; + return Row; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Row.prototype, "row", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Row.prototype, "css", void 0); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Row.prototype, "survey", void 0); +Row = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"])({ + mixins: [__WEBPACK_IMPORTED_MODULE_3__helpers__["a" /* helpers */]] + }) +], Row); +/* harmony default export */ __webpack_exports__["default"] = Row; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-row", Row); + + +/***/ }), +/* 73 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(12); + + + + +var Survey = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Survey, _super); + function Survey() { + return _super.call(this) || this; + } + Survey.prototype.forceUpdate = function () { + this.$forceUpdate(); + }; + Survey.prototype.mounted = function () { + this.survey.renderCallback = this.forceUpdate; + }; + Survey.prototype.beforeDestroy = function () { + this.survey.renderCallback = undefined; + }; + Object.defineProperty(Survey.prototype, "hasTitle", { + get: function () { + return !!this.survey.title && this.survey.showTitle; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Survey.prototype, "hasCompletedPage", { + get: function () { + return this.survey.showCompletedPage && this.survey.state === 'completed'; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Survey.prototype, "css", { + get: function () { + return this.survey.css; + }, + enumerable: true, + configurable: true + }); + Survey.prototype.getNavBtnClasses = function (btnType) { + var btnClass = this.css.navigation[btnType]; + return this.css.navigationButton + ' ' + btnClass; + }; + Survey.prototype.prevPage = function () { + this.survey.prevPage(); + }; + Survey.prototype.nextPage = function () { + this.survey.nextPage(); + }; + Survey.prototype.completeLastPage = function () { + this.survey.completeLastPage(); + }; + return Survey; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Survey.prototype, "survey", void 0); +Survey = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Survey); +/* harmony default export */ __webpack_exports__["default"] = Survey; +// TODO: make this functionality available via surveyCss in all examples +Object.defineProperty(Survey, 'cssType', { + get: function () { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a" /* surveyCss */].currentType; }, + set: function (newType) { __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a" /* surveyCss */].currentType = newType; }, + enumerable: true, + configurable: false +}); +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey", Survey); + + +/***/ }), +/* 74 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(9); + + + + +var Text = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Text, _super); + function Text() { + return _super !== null && _super.apply(this, arguments) || this; + } + Text.prototype.change = function (event) { + this.question.value = event.target.value; + }; + return Text; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* default */])); +Text = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Text); +/* harmony default export */ __webpack_exports__["default"] = Text; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-text", Text); + + +/***/ }), +/* 75 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(12); + + + + +var Window = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Window, _super); + function Window() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.expanded = false; + return _this; + } + Object.defineProperty(Window.prototype, "css", { + get: function () { + return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a" /* surveyCss */].getCss(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Window.prototype, "expandedCss", { + get: function () { + return this.expanded ? this.css.window.header.buttonCollapsed : this.css.window.header.buttonExpanded; + }, + enumerable: true, + configurable: true + }); + Window.prototype.doExpand = function () { + this.expanded = !this.expanded; + }; + return Window; +}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a)); +__WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Prop"] +], Window.prototype, "survey", void 0); +Window = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __decorate */]([ + __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__["Component"] +], Window); +/* harmony default export */ __webpack_exports__["default"] = Window; +__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component("survey-window", Window); + + +/***/ }), +/* 76 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export czechSurveyStrings */ + +var czechSurveyStrings = { + pagePrevText: "Předchozí", + pageNextText: "Další", + completeText: "Hotovo", + otherItemText: "Jiná odpověď (napište)", + progressText: "Strana {0} z {1}", + emptySurvey: "Průzkumu neobsahuje žádné otázky.", + completingSurvey: "Děkujeme za vyplnění průzkumu!", + loadingSurvey: "Probíhá načítání průzkumu...", + optionsCaption: "Vyber...", + requiredError: "Odpovězte prosím na otázku.", + requiredInAllRowsError: "Odpovězte prosím na všechny otázky.", + numericError: "V tomto poli lze zadat pouze čísla.", + textMinLength: "Zadejte prosím alespoň {0} znaků.", + textMaxLength: "Zadejte prosím méně než {0} znaků.", + textMinMaxLength: "Zadejte prosím více než {0} a méně než {1} znaků.", + minRowCountError: "Vyplňte prosím alespoň {0} řádků.", + minSelectError: "Vyberte prosím alespoň {0} varianty.", + maxSelectError: "Nevybírejte prosím více než {0} variant.", + numericMinMax: "Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}", + numericMin: "Odpověď '{0}' by mělo být větší nebo rovno {1}", + numericMax: "Odpověď '{0}' by mělo být menší nebo rovno {1}", + invalidEmail: "Zadejte prosím platnou e-mailovou adresu.", + urlRequestError: "Požadavek vrátil chybu '{0}'. {1}", + urlGetChoicesError: "Požadavek nevrátil data nebo cesta je neplatná", + exceedMaxSize: "Velikost souboru by neměla být větší než {0}.", + otherRequiredError: "Zadejte prosím jinou hodnotu.", + uploadingFile: "Váš soubor se nahrává. Zkuste to prosím za několik sekund.", + addRow: "Přidat řádek", + removeRow: "Odstranit" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["cz"] = czechSurveyStrings; + + +/***/ }), +/* 77 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export danishSurveyStrings */ + +var danishSurveyStrings = { + pagePrevText: "Tilbage", + pageNextText: "Videre", + completeText: "Færdig", + progressText: "Side {0} af {1}", + emptySurvey: "Der er ingen synlige spørgsmål.", + completingSurvey: "Mange tak for din besvarelse!", + loadingSurvey: "Spørgeskemaet hentes fra serveren...", + otherItemText: "Valgfrit svar...", + optionsCaption: "Vælg...", + requiredError: "Besvar venligst spørgsmålet.", + numericError: "Angiv et tal.", + textMinLength: "Angiv mindst {0} tegn.", + minSelectError: "Vælg venligst mindst {0} svarmulighed(er).", + maxSelectError: "Vælg venligst færre {0} svarmuligheder(er).", + numericMinMax: "'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}", + numericMin: "'{0}' skal være lig med eller større end {1}", + numericMax: "'{0}' skal være lig med eller mindre end {1}", + invalidEmail: "Angiv venligst en gyldig e-mail adresse.", + exceedMaxSize: "Filstørrelsen må ikke overstige {0}.", + otherRequiredError: "Angiv en værdi for dit valgfrie svar." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["da"] = danishSurveyStrings; + + +/***/ }), +/* 78 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export dutchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var dutchSurveyStrings = { + pagePrevText: "Vorige", + pageNextText: "Volgende", + completeText: "Afsluiten", + otherItemText: "Andere", + progressText: "Pagina {0} van {1}", + emptySurvey: "Er is geen zichtbare pagina of vraag in deze vragenlijst", + completingSurvey: "Bedankt om deze vragenlijst in te vullen", + loadingSurvey: "De vragenlijst is aan het laden...", + optionsCaption: "Kies...", + requiredError: "Gelieve een antwoord in te vullen", + numericError: "Het antwoord moet een getal zijn", + textMinLength: "Gelieve minsten {0} karakters in te vullen.", + minSelectError: "Gelieve minimum {0} antwoorden te selecteren.", + maxSelectError: "Gelieve niet meer dan {0} antwoorden te selecteren.", + numericMinMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}", + numericMin: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + numericMax: "Uw antwoord '{0}' moet groter of gelijk zijn aan {1}", + invalidEmail: "Gelieve een geldig e-mailadres in te vullen.", + exceedMaxSize: "De grootte van het bestand mag niet groter zijn dan {0}.", + otherRequiredError: "Gelieve het veld 'Andere' in te vullen" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["nl"] = dutchSurveyStrings; + + +/***/ }), +/* 79 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export finnishSurveyStrings */ + +var finnishSurveyStrings = { + pagePrevText: "Edellinen", + pageNextText: "Seuraava", + completeText: "Valmis", + otherItemText: "Muu (kuvaile)", + progressText: "Sivu {0}/{1}", + emptySurvey: "Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.", + completingSurvey: "Kiitos kyselyyn vastaamisesta!", + loadingSurvey: "Kyselyä ladataan palvelimelta...", + optionsCaption: "Valitse...", + requiredError: "Vastaa kysymykseen, kiitos.", + numericError: "Arvon tulee olla numeerinen.", + textMinLength: "Ole hyvä ja syötä vähintään {0} merkkiä.", + minSelectError: "Ole hyvä ja valitse vähintään {0} vaihtoehtoa.", + maxSelectError: "Ole hyvä ja valitse enintään {0} vaihtoehtoa.", + numericMinMax: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}", + numericMin: "'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}", + numericMax: "'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}", + invalidEmail: "Syötä validi sähköpostiosoite.", + otherRequiredError: "Ole hyvä ja syötä \"Muu (kuvaile)\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fi"] = finnishSurveyStrings; + + +/***/ }), +/* 80 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export frenchSurveyStrings */ +//Created on behalf https://github.com/Frank13 + +var frenchSurveyStrings = { + pagePrevText: "Pr\u00e9c\u00e9dent", + pageNextText: "Suivant", + completeText: "Terminer", + otherItemText: "Autre (pr\u00e9ciser)", + progressText: "Page {0} sur {1}", + emptySurvey: "Il n'y a ni page visible ni question visible dans ce questionnaire", + completingSurvey: "Merci d'avoir r\u00e9pondu au questionnaire!", + loadingSurvey: "Le questionnaire est en cours de chargement...", + optionsCaption: "Choisissez...", + requiredError: "La r\u00e9ponse \u00e0 cette question est obligatoire.", + requiredInAllRowsError: "Toutes les lignes sont obligatoires", + numericError: "La r\u00e9ponse doit \u00eatre un nombre.", + textMinLength: "Merci d'entrer au moins {0} symboles.", + minSelectError: "Merci de s\u00e9lectionner au moins {0}r\u00e9ponses.", + maxSelectError: "Merci de s\u00e9lectionner au plus {0}r\u00e9ponses.", + numericMinMax: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1} et inf\u00e9rieure ou\u00e9gale \u00e0 {2}", + numericMin: "Votre r\u00e9ponse '{0}' doit \u00eatresup\u00e9rieure ou \u00e9gale \u00e0 {1}", + numericMax: "Votre r\u00e9ponse '{0}' doit \u00eatreinf\u00e9rieure ou \u00e9gale \u00e0 {1}", + invalidEmail: "Merci d'entrer une adresse mail valide.", + exceedMaxSize: "La taille du fichier ne doit pas exc\u00e9der {0}.", + otherRequiredError: "Merci de pr\u00e9ciser le champ 'Autre'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["fr"] = frenchSurveyStrings; + + +/***/ }), +/* 81 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export germanSurveyStrings */ + +var germanSurveyStrings = { + pagePrevText: "Zurück", + pageNextText: "Weiter", + completeText: "Fertig", + progressText: "Seite {0} von {1}", + emptySurvey: "Es gibt keine sichtbare Frage.", + completingSurvey: "Vielen Dank für das Ausfüllen des Fragebogens!", + loadingSurvey: "Der Fragebogen wird vom Server geladen...", + otherItemText: "Benutzerdefinierte Antwort...", + optionsCaption: "Wählen...", + requiredError: "Bitte antworten Sie auf die Frage.", + numericError: "Der Wert sollte eine Zahl sein.", + textMinLength: "Bitte geben Sie mindestens {0} Symbole.", + minSelectError: "Bitte wählen Sie mindestens {0} Varianten.", + maxSelectError: "Bitte wählen Sie nicht mehr als {0} Varianten.", + numericMinMax: "'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}", + numericMin: "'{0}' sollte gleich oder größer sein als {1}", + numericMax: "'{0}' sollte gleich oder kleiner als {1}", + invalidEmail: "Bitte geben Sie eine gültige Email-Adresse ein.", + exceedMaxSize: "Die Dateigröße soll nicht mehr als {0}.", + otherRequiredError: "Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["de"] = germanSurveyStrings; + + +/***/ }), +/* 82 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export greekSurveyStrings */ +//Created by https://github.com/agelospanagiotakis + +var greekSurveyStrings = { + pagePrevText: "Προηγούμενο", + pageNextText: "Επόμενο", + completeText: "Ολοκλήρωση", + otherItemText: "Άλλο (παρακαλώ διευκρινίστε)", + progressText: "Σελίδα {0} από {1}", + emptySurvey: "Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.", + completingSurvey: "Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!", + loadingSurvey: "Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...", + optionsCaption: "Επιλέξτε...", + requiredError: "Παρακαλώ απαντήστε στην ερώτηση.", + requiredInAllRowsError: "Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.", + numericError: "Η τιμή πρέπει να είναι αριθμιτική.", + textMinLength: "Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.", + minRowCountError: "Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.", + minSelectError: "Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.", + maxSelectError: "Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.", + numericMinMax: "Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}", + numericMin: "Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}", + numericMax: "Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}", + invalidEmail: "Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.", + urlRequestError: "Η αίτηση επέστρεψε σφάλμα '{0}'. {1}", + urlGetChoicesError: "Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη", + exceedMaxSize: "Το μέγεθος δεν μπορεί να υπερβένει τα {0}.", + otherRequiredError: "Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.", + uploadingFile: "Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.", + addRow: "Προσθήκη γραμμής", + removeRow: "Αφαίρεση" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["gr"] = greekSurveyStrings; + + +/***/ }), +/* 83 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export polishSurveyStrings */ + +var polishSurveyStrings = { + pagePrevText: "Wstecz", + pageNextText: "Dalej", + completeText: "Gotowe", + otherItemText: "Inna odpowiedź (wpisz)", + progressText: "Strona {0} z {1}", + emptySurvey: "Nie ma widocznych pytań.", + completingSurvey: "Dziękujemy za wypełnienie ankiety!", + loadingSurvey: "Trwa wczytywanie ankiety...", + optionsCaption: "Wybierz...", + requiredError: "Proszę odpowiedzieć na to pytanie.", + requiredInAllRowsError: "Proszę odpowiedzieć na wszystkie pytania.", + numericError: "W tym polu można wpisać tylko liczby.", + textMinLength: "Proszę wpisać co najmniej {0} znaków.", + textMaxLength: "Proszę wpisać mniej niż {0} znaków.", + textMinMaxLength: "Proszę wpisać więcej niż {0} i mniej niż {1} znaków.", + minRowCountError: "Proszę uzupełnić przynajmniej {0} wierszy.", + minSelectError: "Proszę wybrać co najmniej {0} pozycji.", + maxSelectError: "Proszę wybrać nie więcej niż {0} pozycji.", + numericMinMax: "Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}", + numericMin: "Odpowiedź '{0}' powinna być większa lub równa {1}", + numericMax: "Odpowiedź '{0}' powinna być mniejsza lub równa {1}", + invalidEmail: "Proszę podać prawidłowy adres email.", + urlRequestError: "Żądanie zwróciło błąd '{0}'. {1}", + urlGetChoicesError: "Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa", + exceedMaxSize: "Rozmiar przesłanego pliku nie może przekraczać {0}.", + otherRequiredError: "Proszę podać inną odpowiedź.", + uploadingFile: "Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.", + addRow: "Dodaj wiersz", + removeRow: "Usuń" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["pl"] = polishSurveyStrings; + + +/***/ }), +/* 84 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export romanianSurveyStrings */ + +var romanianSurveyStrings = { + pagePrevText: "Precedent", + pageNextText: "Următor", + completeText: "Finalizare", + otherItemText: "Altul(precizaţi)", + progressText: "Pagina {0} din {1}", + emptySurvey: "Nu sunt întrebări pentru acest chestionar", + completingSurvey: "Vă mulţumim pentru timpul acordat!", + loadingSurvey: "Chestionarul se încarcă...", + optionsCaption: "Alegeţi...", + requiredError: "Răspunsul la această întrebare este obligatoriu.", + requiredInAllRowsError: "Toate răspunsurile sunt obligatorii", + numericError: "Răspunsul trebuie să fie numeric.", + textMinLength: "Trebuie să introduci minim {0} caractere.", + minSelectError: "Trebuie să selectezi minim {0} opţiuni.", + maxSelectError: "Trebuie să selectezi maxim {0} opţiuni.", + numericMinMax: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}", + numericMin: "Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}", + numericMax: "Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}", + invalidEmail: "Trebuie să introduceţi o adresa de email validă.", + exceedMaxSize: "Dimensiunea fişierului nu trebuie să depăşească {0}.", + otherRequiredError: "Trebuie să completezi câmpul 'Altul'." +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ro"] = romanianSurveyStrings; + + +/***/ }), +/* 85 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export russianSurveyStrings */ + +var russianSurveyStrings = { + pagePrevText: "Назад", + pageNextText: "Далее", + completeText: "Готово", + progressText: "Страница {0} из {1}", + emptySurvey: "Нет ни одного вопроса.", + completingSurvey: "Благодарим Вас за заполнение анкеты!", + loadingSurvey: "Загрузка с сервера...", + otherItemText: "Другое (пожалуйста, опишите)", + optionsCaption: "Выбрать...", + requiredError: "Пожалуйста, ответьте на вопрос.", + numericError: "Ответ должен быть числом.", + textMinLength: "Пожалуйста, введите хотя бы {0} символов.", + minSelectError: "Пожалуйста, выберите хотя бы {0} вариантов.", + maxSelectError: "Пожалуйста, выберите не более {0} вариантов.", + numericMinMax: "'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}", + numericMin: "'{0}' должно быть равным или больше, чем {1}", + numericMax: "'{0}' должно быть равным или меньше, чем {1}", + invalidEmail: "Пожалуйста, введите действительный адрес электронной почты.", + otherRequiredError: "Пожалуйста, введите данные в поле \"Другое\"" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["ru"] = russianSurveyStrings; + + +/***/ }), +/* 86 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export swedishSurveyStrings */ +//Create by Mattias Asplund + +var swedishSurveyStrings = { + pagePrevText: "Föregående", + pageNextText: "Nästa", + completeText: "Färdig", + otherItemText: "Annat (beskriv)", + progressText: "Sida {0} av {1}", + emptySurvey: "Det finns ingen synlig sida eller fråga i enkäten.", + completingSurvey: "Tack för att du genomfört enkäten!!", + loadingSurvey: "Enkäten laddas...", + optionsCaption: "Välj...", + requiredError: "Var vänlig besvara frågan.", + requiredInAllRowsError: "Var vänlig besvara frågorna på alla rader.", + numericError: "Värdet ska vara numeriskt.", + textMinLength: "Var vänlig ange minst {0} tecken.", + minRowCountError: "Var vänlig fyll i minst {0} rader.", + minSelectError: "Var vänlig välj åtminstone {0} varianter.", + maxSelectError: "Var vänlig välj inte fler än {0} varianter.", + numericMinMax: "'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}", + numericMin: "'{0}' ska vara lika med eller mer än {1}", + numericMax: "'{0}' ska vara lika med eller mindre än {1}", + invalidEmail: "Var vänlig ange en korrekt e-postadress.", + urlRequestError: "Förfrågan returnerade felet '{0}'. {1}", + urlGetChoicesError: "Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt", + exceedMaxSize: "Filstorleken får ej överstiga {0}.", + otherRequiredError: "Var vänlig ange det andra värdet.", + uploadingFile: "Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.", + addRow: "Lägg till rad", + removeRow: "Ta bort" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["sv"] = swedishSurveyStrings; + + +/***/ }), +/* 87 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1); +/* unused harmony export turkishSurveyStrings */ + +var turkishSurveyStrings = { + pagePrevText: "Geri", + pageNextText: "İleri", + completeText: "Anketi Tamamla", + otherItemText: "Diğer (açıklayınız)", + progressText: "Sayfa {0} / {1}", + emptySurvey: "Ankette görüntülenecek sayfa ya da soru mevcut değil.", + completingSurvey: "Anketimizi tamamladığınız için teşekkür ederiz.", + loadingSurvey: "Anket sunucudan yükleniyor ...", + optionsCaption: "Seçiniz ...", + requiredError: "Lütfen soruya cevap veriniz", + numericError: "Girilen değer numerik olmalıdır", + textMinLength: "En az {0} sembol giriniz.", + minRowCountError: "Lütfen en az {0} satırı doldurun.", + minSelectError: "Lütfen en az {0} seçeneği seçiniz.", + maxSelectError: "Lütfen {0} adetten fazla seçmeyiniz.", + numericMinMax: "The '{0}' should be equal or more than {1} and equal or less than {2}", + numericMin: "'{0}' değeri {1} değerine eşit veya büyük olmalıdır", + numericMax: "'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.", + invalidEmail: "Lütfen geçerli bir eposta adresi giriniz.", + urlRequestError: "Talebi şu hatayı döndü '{0}'. {1}", + urlGetChoicesError: "Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.", + exceedMaxSize: "Dosya boyutu {0} değerini geçemez.", + otherRequiredError: "Lütfen diğer değerleri giriniz.", + uploadingFile: "Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.", + addRow: "Satır Ekle", + removeRow: "Kaldır" +}; +__WEBPACK_IMPORTED_MODULE_0__surveyStrings__["a" /* surveyLocalization */].locales["tr"] = turkishSurveyStrings; + + +/***/ }), +/* 88 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCheckboxModel; }); + + + + +var QuestionCheckboxModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCheckboxModel, _super); + function QuestionCheckboxModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionCheckboxModel.prototype.getHasOther = function (val) { + if (!val || !Array.isArray(val)) + return false; + return val.indexOf(this.otherItem.value) >= 0; + }; + QuestionCheckboxModel.prototype.valueFromDataCore = function (val) { + if (!val || !Array.isArray(val)) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) + return val; + if (this.hasUnknownValue(val[i])) { + this.comment = val[i]; + var newVal = val.slice(); + newVal[i] = this.otherItem.value; + return newVal; + } + } + return val; + }; + QuestionCheckboxModel.prototype.valueToDataCore = function (val) { + if (!val || !val.length) + return val; + for (var i = 0; i < val.length; i++) { + if (val[i] == this.otherItem.value) { + if (this.getComment()) { + var newVal = val.slice(); + newVal[i] = this.getComment(); + return newVal; + } + } + } + return val; + }; + QuestionCheckboxModel.prototype.getType = function () { + return "checkbox"; + }; + return QuestionCheckboxModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("checkbox", [], function () { return new QuestionCheckboxModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("checkbox", function (name) { var q = new QuestionCheckboxModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 89 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionCommentModel; }); + + + + + +var QuestionCommentModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionCommentModel, _super); + function QuestionCommentModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rows = 4; + _this.cols = 50; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionCommentModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionCommentModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionCommentModel.prototype.getType = function () { + return "comment"; + }; + QuestionCommentModel.prototype.isEmpty = function () { + return _super.prototype.isEmpty.call(this) || this.value == ""; + }; + return QuestionCommentModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("comment", [{ name: "cols:number", default: 50 }, { name: "rows:number", default: 4 }, + { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionCommentModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("comment", function (name) { return new QuestionCommentModel(name); }); + + +/***/ }), +/* 90 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionDropdownModel; }); + + + + + + +var QuestionDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionDropdownModel, _super); + function QuestionDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locOptionsCaptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionDropdownModel.prototype, "optionsCaption", { + get: function () { return this.locOptionsCaption.text ? this.locOptionsCaption.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("optionsCaption"); }, + set: function (newValue) { this.locOptionsCaption.text = newValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionDropdownModel.prototype, "locOptionsCaption", { + get: function () { return this.locOptionsCaptionValue; }, + enumerable: true, + configurable: true + }); + QuestionDropdownModel.prototype.getType = function () { + return "dropdown"; + }; + QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["b" /* QuestionSelectBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("dropdown", [{ name: "optionsCaption", serializationProperty: "locOptionsCaption" }], function () { return new QuestionDropdownModel(""); }, "selectbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("dropdown", function (name) { var q = new QuestionDropdownModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 91 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionFileModel; }); + + + + + + +var QuestionFileModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionFileModel, _super); + function QuestionFileModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.showPreviewValue = false; + _this.isUploading = false; + return _this; + } + QuestionFileModel.prototype.getType = function () { + return "file"; + }; + Object.defineProperty(QuestionFileModel.prototype, "showPreview", { + get: function () { return this.showPreviewValue; }, + set: function (value) { this.showPreviewValue = value; }, + enumerable: true, + configurable: true + }); + QuestionFileModel.prototype.loadFile = function (file) { + var self = this; + if (this.survey && !this.survey.uploadFile(this.name, file, this.storeDataAsText, function (status) { self.isUploading = status == "uploading"; })) + return; + this.setFileValue(file); + }; + QuestionFileModel.prototype.setFileValue = function (file) { + if (!FileReader) + return; + if (!this.showPreview && !this.storeDataAsText) + return; + if (this.checkFileForErrors(file)) + return; + var fileReader = new FileReader(); + var self = this; + fileReader.onload = function (e) { + if (self.showPreview) { + self.previewValue = self.isFileImage(file) ? fileReader.result : null; + self.fireCallback(self.previewValueLoadedCallback); + } + if (self.storeDataAsText) { + self.value = fileReader.result; + } + }; + fileReader.readAsDataURL(file); + }; + QuestionFileModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.isUploading) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("uploadingFile"))); + } + }; + QuestionFileModel.prototype.checkFileForErrors = function (file) { + var errorLength = this.errors ? this.errors.length : 0; + this.errors = []; + if (this.maxSize > 0 && file.size > this.maxSize) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_4__error__["b" /* ExceedSizeError */](this.maxSize)); + } + if (errorLength != this.errors.length || this.errors.length > 0) { + this.fireCallback(this.errorsChangedCallback); + } + return this.errors.length > 0; + }; + QuestionFileModel.prototype.isFileImage = function (file) { + if (!file || !file.type) + return; + var str = file.type.toLowerCase(); + return str.indexOf("image") == 0; + }; + return QuestionFileModel; +}(__WEBPACK_IMPORTED_MODULE_1__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("file", ["showPreview:boolean", "imageHeight", "imageWidth", "storeDataAsText:boolean", "maxSize:number"], function () { return new QuestionFileModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("file", function (name) { return new QuestionFileModel(name); }); + + +/***/ }), +/* 92 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionbase__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionHtmlModel; }); + + + + + +var QuestionHtmlModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionHtmlModel, _super); + function QuestionHtmlModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.locHtmlValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionHtmlModel.prototype.getType = function () { + return "html"; + }; + Object.defineProperty(QuestionHtmlModel.prototype, "html", { + get: function () { return this.locHtml.text; }, + set: function (value) { this.locHtml.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "locHtml", { + get: function () { return this.locHtmlValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionHtmlModel.prototype, "processedHtml", { + get: function () { return this.survey ? this.survey.processHtml(this.html) : this.html; }, + enumerable: true, + configurable: true + }); + return QuestionHtmlModel; +}(__WEBPACK_IMPORTED_MODULE_1__questionbase__["a" /* QuestionBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("html", [{ name: "html:html", serializationProperty: "locHtml" }], function () { return new QuestionHtmlModel(""); }, "questionbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("html", function (name) { return new QuestionHtmlModel(name); }); + + +/***/ }), +/* 93 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionfactory__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixModel; }); + + + + + + + + +var MatrixRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixRowModel, _super); + function MatrixRowModel(name, text, fullName, data, value) { + var _this = _super.call(this) || this; + _this.name = name; + _this.text = text; + _this.fullName = fullName; + _this.data = data; + _this.rowValue = value; + return _this; + } + Object.defineProperty(MatrixRowModel.prototype, "value", { + get: function () { return this.rowValue; }, + set: function (newValue) { + this.rowValue = newValue; + if (this.data) + this.data.onMatrixRowChanged(this); + this.onValueChanged(); + }, + enumerable: true, + configurable: true + }); + MatrixRowModel.prototype.onValueChanged = function () { + }; + return MatrixRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var QuestionMatrixModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixModel, _super); + function QuestionMatrixModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.isRowChanging = false; + _this.isAllRowRequired = false; + _this.columnsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixModel.prototype.getType = function () { + return "matrix"; + }; + Object.defineProperty(QuestionMatrixModel.prototype, "hasRows", { + get: function () { + return this.rowsValue.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "columns", { + get: function () { return this.columnsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.columnsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixModel.prototype, "visibleRows", { + get: function () { + var result = new Array(); + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, this.name + '_' + this.rows[i].value.toString(), val[this.rows[i].value])); + } + if (result.length == 0) { + result.push(this.createMatrixRow(null, "", this.name, val)); + } + this.generatedVisibleRows = result; + return result; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () { return this.hasValuesInAllRows(); }; + QuestionMatrixModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_5__surveyStrings__["a" /* surveyLocalization */].getString("requiredInAllRowsError"))); + } + }; + QuestionMatrixModel.prototype.hasErrorInRows = function () { + if (!this.isAllRowRequired) + return false; + return !this.hasValuesInAllRows(); + }; + QuestionMatrixModel.prototype.hasValuesInAllRows = function () { + var rows = this.generatedVisibleRows; + if (!rows) + rows = this.visibleRows; + if (!rows) + return true; + for (var i = 0; i < rows.length; i++) { + var val = rows[i].value; + if (!val) + return false; + } + return true; + }; + QuestionMatrixModel.prototype.createMatrixRow = function (name, text, fullName, value) { + return new MatrixRowModel(name, text, fullName, this, value); + }; + QuestionMatrixModel.prototype.onValueChanged = function () { + if (this.isRowChanging || !(this.generatedVisibleRows) || this.generatedVisibleRows.length == 0) + return; + this.isRowChanging = true; + var val = this.value; + if (!val) + val = {}; + if (this.rows.length == 0) { + this.generatedVisibleRows[0].value = val; + } + else { + for (var i = 0; i < this.generatedVisibleRows.length; i++) { + var row = this.generatedVisibleRows[i]; + var rowVal = val[row.name] ? val[row.name] : null; + this.generatedVisibleRows[i].value = rowVal; + } + } + this.isRowChanging = false; + }; + //IMatrixData + QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) { + if (this.isRowChanging) + return; + this.isRowChanging = true; + if (!this.hasRows) { + this.setNewValue(row.value); + } + else { + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[row.name] = row.value; + this.setNewValue(newValue); + } + this.isRowChanging = false; + }; + return QuestionMatrixModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("matrix", [{ name: "columns:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.columns); }, onSetValue: function (obj, value) { obj.columns = value; } }, + { name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_2__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }, + "isAllRowRequired:boolean"], function () { return new QuestionMatrixModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrix", function (name) { var q = new QuestionMatrixModel(name); q.rows = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultRows; q.columns = __WEBPACK_IMPORTED_MODULE_7__questionfactory__["a" /* QuestionFactory */].DefaultColums; return q; }); + + +/***/ }), +/* 94 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(7); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDropdownRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDropdownModel; }); + + + + + +var MatrixDropdownRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDropdownRowModel, _super); + function MatrixDropdownRowModel(name, text, data, value) { + var _this = _super.call(this, data, value) || this; + _this.name = name; + _this.text = text; + return _this; + } + Object.defineProperty(MatrixDropdownRowModel.prototype, "rowName", { + get: function () { return this.name; }, + enumerable: true, + configurable: true + }); + return MatrixDropdownRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDropdownModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDropdownModel, _super); + function QuestionMatrixDropdownModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowsValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].createArray(_this); + return _this; + } + QuestionMatrixDropdownModel.prototype.getType = function () { + return "matrixdropdown"; + }; + Object.defineProperty(QuestionMatrixDropdownModel.prototype, "rows", { + get: function () { return this.rowsValue; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].setData(this.rowsValue, newValue); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDropdownModel.prototype.generateRows = function () { + var result = new Array(); + if (!this.rows || this.rows.length === 0) + return result; + var val = this.value; + if (!val) + val = {}; + for (var i = 0; i < this.rows.length; i++) { + if (!this.rows[i].value) + continue; + result.push(this.createMatrixRow(this.rows[i].value, this.rows[i].text, val[this.rows[i].value])); + } + return result; + }; + QuestionMatrixDropdownModel.prototype.createMatrixRow = function (name, text, value) { + return new MatrixDropdownRowModel(name, text, this, value); + }; + return QuestionMatrixDropdownModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdropdown", [{ name: "rows:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_3__itemvalue__["a" /* ItemValue */].getData(obj.rows); }, onSetValue: function (obj, value) { obj.rows = value; } }], function () { return new QuestionMatrixDropdownModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdropdown", function (name) { var q = new QuestionMatrixDropdownModel(name); q.choices = [1, 2, 3, 4, 5]; q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].DefaultColums; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 95 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MatrixDynamicRowModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMatrixDynamicModel; }); + + + + + + + +var MatrixDynamicRowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MatrixDynamicRowModel, _super); + function MatrixDynamicRowModel(index, data, value) { + var _this = _super.call(this, data, value) || this; + _this.index = index; + return _this; + } + Object.defineProperty(MatrixDynamicRowModel.prototype, "rowName", { + get: function () { return "row" + this.index; }, + enumerable: true, + configurable: true + }); + return MatrixDynamicRowModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["c" /* MatrixDropdownRowModelBase */])); + +var QuestionMatrixDynamicModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMatrixDynamicModel, _super); + function QuestionMatrixDynamicModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rowCounter = 0; + _this.rowCountValue = 2; + _this.minRowCount = 0; + _this.locAddRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + _this.locRemoveRowTextValue = new __WEBPACK_IMPORTED_MODULE_6__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionMatrixDynamicModel.prototype.getType = function () { + return "matrixdynamic"; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "rowCount", { + get: function () { return this.rowCountValue; }, + set: function (val) { + if (val < 0 || val > QuestionMatrixDynamicModel.MaxRowCount) + return; + this.rowCountValue = val; + if (this.value && this.value.length > val) { + var qVal = this.value; + qVal.splice(val); + this.value = qVal; + } + this.fireCallback(this.rowCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.addRow = function () { + if (this.generatedVisibleRows) { + this.generatedVisibleRows.push(this.createMatrixRow(null)); + } + this.rowCount++; + }; + QuestionMatrixDynamicModel.prototype.removeRow = function (index) { + if (index < 0 || index >= this.rowCount) + return; + if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) { + this.generatedVisibleRows.splice(index, 1); + } + if (this.value) { + var val = this.createNewValue(this.value); + val.splice(index, 1); + val = this.deleteRowValue(val, null); + this.value = val; + } + this.rowCount--; + }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "addRowText", { + get: function () { return this.locAddRowText.text ? this.locAddRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("addRow"); }, + set: function (value) { this.locAddRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locAddRowText", { + get: function () { return this.locAddRowTextValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "removeRowText", { + get: function () { return this.locRemoveRowText.text ? this.locRemoveRowText.text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("removeRow"); }, + set: function (value) { this.locRemoveRowText.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "locRemoveRowText", { + get: function () { return this.locRemoveRowTextValue; }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () { return false; }; + Object.defineProperty(QuestionMatrixDynamicModel.prototype, "cachedVisibleRows", { + get: function () { + if (this.generatedVisibleRows && this.generatedVisibleRows.length == this.rowCount) + return this.generatedVisibleRows; + return this.visibleRows; + }, + enumerable: true, + configurable: true + }); + QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors) { + _super.prototype.onCheckForErrors.call(this, errors); + if (this.hasErrorInRows()) { + errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__["a" /* CustomError */](__WEBPACK_IMPORTED_MODULE_4__surveyStrings__["a" /* surveyLocalization */].getString("minRowCountError")["format"](this.minRowCount))); + } + }; + QuestionMatrixDynamicModel.prototype.hasErrorInRows = function () { + if (this.minRowCount <= 0 || !this.generatedVisibleRows) + return false; + var res = false; + var setRowCount = 0; + for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) { + var row = this.generatedVisibleRows[rowIndex]; + if (!row.isEmpty) + setRowCount++; + } + return setRowCount < this.minRowCount; + }; + QuestionMatrixDynamicModel.prototype.generateRows = function () { + var result = new Array(); + if (this.rowCount === 0) + return result; + var val = this.createNewValue(this.value); + for (var i = 0; i < this.rowCount; i++) { + result.push(this.createMatrixRow(this.getRowValueByIndex(val, i))); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) { + return new MatrixDynamicRowModel(this.rowCounter++, this, value); + }; + QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) { + var newRowCount = val && Array.isArray(val) ? val.length : 0; + if (newRowCount <= this.rowCount) + return; + this.rowCountValue = newRowCount; + if (this.generatedVisibleRows) { + this.generatedVisibleRows = this.visibleRows; + } + }; + QuestionMatrixDynamicModel.prototype.createNewValue = function (curValue) { + var result = curValue; + if (!result) + result = []; + var r = []; + if (result.length > this.rowCount) + result.splice(this.rowCount - 1); + for (var i = result.length; i < this.rowCount; i++) { + result.push({}); + } + return result; + }; + QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) { + var isEmpty = true; + for (var i = 0; i < newValue.length; i++) { + if (Object.keys(newValue[i]).length > 0) { + isEmpty = false; + break; + } + } + return isEmpty ? null : newValue; + }; + QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) { + return index >= 0 && index < questionValue.length ? questionValue[index] : null; + }; + QuestionMatrixDynamicModel.prototype.getRowValue = function (row, questionValue, create) { + if (create === void 0) { create = false; } + return this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row)); + }; + return QuestionMatrixDynamicModel; +}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */])); + +QuestionMatrixDynamicModel.MaxRowCount = 100; +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("matrixdynamic", [{ name: "rowCount:number", default: 2 }, { name: "minRowCount:number", default: 0 }, + { name: "addRowText", serializationProperty: "locAddRowText" }, { name: "removeRowText", serializationProperty: "locRemoveRowText" }], function () { return new QuestionMatrixDynamicModel(""); }, "matrixdropdownbase"); +__WEBPACK_IMPORTED_MODULE_3__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("matrixdynamic", function (name) { var q = new QuestionMatrixDynamicModel(name); q.choices = [1, 2, 3, 4, 5]; __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__["d" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q); return q; }); + + +/***/ }), +/* 96 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__validator__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MultipleTextItemModel; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionMultipleTextModel; }); + + + + + + + + +var MultipleTextItemModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](MultipleTextItemModel, _super); + function MultipleTextItemModel(name, title) { + if (name === void 0) { name = null; } + if (title === void 0) { title = null; } + var _this = _super.call(this) || this; + _this.name = name; + _this.isRequired = false; + _this.validators = new Array(); + _this.locTitleValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + _this.title = title; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + MultipleTextItemModel.prototype.getType = function () { + return "multipletextitem"; + }; + MultipleTextItemModel.prototype.setData = function (data) { + this.data = data; + }; + Object.defineProperty(MultipleTextItemModel.prototype, "title", { + get: function () { return this.locTitle.text ? this.locTitle.text : this.name; }, + set: function (value) { this.locTitle.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locTitle", { + get: function () { return this.locTitleValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "fullTitle", { + get: function () { + var res = this.title; + if (this.isRequired && this.data) + res = this.data.getIsRequiredText() + ' ' + res; + return res; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MultipleTextItemModel.prototype, "value", { + get: function () { + return this.data ? this.data.getMultipleTextValue(this.name) : null; + }, + set: function (value) { + if (this.data != null) { + this.data.setMultipleTextValue(this.name, value); + } + }, + enumerable: true, + configurable: true + }); + MultipleTextItemModel.prototype.onValueChanged = function (newValue) { + }; + //IValidatorOwner + MultipleTextItemModel.prototype.getValidatorTitle = function () { return this.title; }; + //ILocalizableOwner + MultipleTextItemModel.prototype.getLocale = function () { return this.data ? this.data.getLocale() : ""; }; + return MultipleTextItemModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +var QuestionMultipleTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionMultipleTextModel, _super); + function QuestionMultipleTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.colCountValue = 1; + _this.itemSize = 25; + _this.itemsValues = new Array(); + _this.isMultipleItemValueChanging = false; + _this.setItemsOverriddenMethods(); + return _this; + } + QuestionMultipleTextModel.prototype.getType = function () { + return "multipletext"; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "items", { + get: function () { return this.itemsValues; }, + set: function (value) { + this.itemsValues = value; + this.setItemsOverriddenMethods(); + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.addItem = function (name, title) { + if (title === void 0) { title = null; } + var item = this.createTextItem(name, title); + this.items.push(item); + return item; + }; + QuestionMultipleTextModel.prototype.setItemsOverriddenMethods = function () { + var self = this; + this.itemsValues.push = function (value) { + value.setData(self); + var result = Array.prototype.push.call(this, value); + self.fireCallback(self.colCountChangedCallback); + return result; + }; + this.itemsValues.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (!start) + start = 0; + if (!deleteCount) + deleteCount = 0; + var result = (_a = Array.prototype.splice).call.apply(_a, [self.itemsValues, start, deleteCount].concat(items)); + if (!items) + items = []; + for (var i = 0; i < items.length; i++) { + items[i].setData(self); + } + self.fireCallback(self.colCountChangedCallback); + return result; + var _a; + }; + }; + QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () { + for (var i = 0; i < this.items.length; i++) { + if (!this.items[i].value) + return false; + } + return true; + }; + Object.defineProperty(QuestionMultipleTextModel.prototype, "colCount", { + get: function () { return this.colCountValue; }, + set: function (value) { + if (value < 1 || value > 4) + return; + this.colCountValue = value; + this.fireCallback(this.colCountChangedCallback); + }, + enumerable: true, + configurable: true + }); + QuestionMultipleTextModel.prototype.getRows = function () { + var colCount = this.colCount; + var items = this.items; + var rows = []; + var index = 0; + for (var i = 0; i < items.length; i++) { + if (index == 0) { + rows.push([]); + } + rows[rows.length - 1].push(items[i]); + index++; + if (index >= colCount) { + index = 0; + } + } + return rows; + }; + QuestionMultipleTextModel.prototype.onValueChanged = function () { + _super.prototype.onValueChanged.call(this); + this.onItemValueChanged(); + }; + QuestionMultipleTextModel.prototype.createTextItem = function (name, title) { + return new MultipleTextItemModel(name, title); + }; + QuestionMultipleTextModel.prototype.onItemValueChanged = function () { + if (this.isMultipleItemValueChanging) + return; + for (var i = 0; i < this.items.length; i++) { + var itemValue = null; + if (this.value && (this.items[i].name in this.value)) { + itemValue = this.value[this.items[i].name]; + } + this.items[i].onValueChanged(itemValue); + } + }; + QuestionMultipleTextModel.prototype.runValidators = function () { + var error = _super.prototype.runValidators.call(this); + if (error != null) + return error; + for (var i = 0; i < this.items.length; i++) { + error = new __WEBPACK_IMPORTED_MODULE_2__validator__["h" /* ValidatorRunner */]().run(this.items[i]); + if (error != null) + return error; + } + return null; + }; + QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback) { + if (fireCallback === void 0) { fireCallback = true; } + var res = _super.prototype.hasErrors.call(this, fireCallback); + if (!res) + res = this.hasErrorInItems(fireCallback); + return res; + }; + QuestionMultipleTextModel.prototype.hasErrorInItems = function (fireCallback) { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.isRequired && !item.value) { + this.errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__["d" /* AnswerRequiredError */]()); + if (fireCallback) { + this.fireCallback(this.errorsChangedCallback); + } + return true; + } + } + return false; + }; + //IMultipleTextData + QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) { + if (!this.value) + return null; + return this.value[name]; + }; + QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) { + this.isMultipleItemValueChanging = true; + var newValue = this.value; + if (!newValue) { + newValue = {}; + } + newValue[name] = value; + this.setNewValue(newValue); + this.isMultipleItemValueChanging = false; + }; + QuestionMultipleTextModel.prototype.getIsRequiredText = function () { + return this.survey ? this.survey.requiredText : ""; + }; + return QuestionMultipleTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletextitem", ["name", "isRequired:boolean", { name: "placeHolder", serializationProperty: "locPlaceHolder" }, + { name: "title", serializationProperty: "locTitle" }, { name: "validators:validators", baseClassName: "surveyvalidator", classNamePart: "validator" }], function () { return new MultipleTextItemModel(""); }); +__WEBPACK_IMPORTED_MODULE_4__jsonobject__["a" /* JsonObject */].metaData.addClass("multipletext", [{ name: "!items:textitems", className: "multipletextitem" }, + { name: "itemSize:number", default: 25 }, { name: "colCount:number", default: 1, choices: [1, 2, 3, 4] }], function () { return new QuestionMultipleTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_5__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("multipletext", function (name) { var q = new QuestionMultipleTextModel(name); q.addItem("text1"); q.addItem("text2"); return q; }); + + +/***/ }), +/* 97 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(14); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRadiogroupModel; }); + + + + +var QuestionRadiogroupModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRadiogroupModel, _super); + function QuestionRadiogroupModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + return _this; + } + QuestionRadiogroupModel.prototype.getType = function () { + return "radiogroup"; + }; + QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + return QuestionRadiogroupModel; +}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__["a" /* QuestionCheckboxBase */])); + +__WEBPACK_IMPORTED_MODULE_1__jsonobject__["a" /* JsonObject */].metaData.addClass("radiogroup", [], function () { return new QuestionRadiogroupModel(""); }, "checkboxbase"); +__WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("radiogroup", function (name) { var q = new QuestionRadiogroupModel(name); q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__["a" /* QuestionFactory */].DefaultChoices; return q; }); + + +/***/ }), +/* 98 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionRatingModel; }); + + + + + + +var QuestionRatingModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionRatingModel, _super); + function QuestionRatingModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.rates = __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].createArray(_this); + _this.locMinRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + _this.locMaxRateDescriptionValue = new __WEBPACK_IMPORTED_MODULE_5__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + Object.defineProperty(QuestionRatingModel.prototype, "rateValues", { + get: function () { return this.rates; }, + set: function (newValue) { + __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(this.rates, newValue); + this.fireCallback(this.rateValuesChangedCallback); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "visibleRateValues", { + get: function () { + if (this.rateValues.length > 0) + return this.rateValues; + return QuestionRatingModel.defaultRateValues; + }, + enumerable: true, + configurable: true + }); + QuestionRatingModel.prototype.getType = function () { + return "rating"; + }; + QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + QuestionRatingModel.prototype.supportComment = function () { return true; }; + QuestionRatingModel.prototype.supportOther = function () { return true; }; + Object.defineProperty(QuestionRatingModel.prototype, "minRateDescription", { + get: function () { return this.locMinRateDescription.text; }, + set: function (value) { this.locMinRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMinRateDescription", { + get: function () { return this.locMinRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + Object.defineProperty(QuestionRatingModel.prototype, "maxRateDescription", { + get: function () { return this.locMaxRateDescription.text; }, + set: function (value) { this.locMaxRateDescription.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionRatingModel.prototype, "locMaxRateDescription", { + get: function () { return this.locMaxRateDescriptionValue; }, + enumerable: true, + configurable: true + }); + ; + return QuestionRatingModel; +}(__WEBPACK_IMPORTED_MODULE_2__question__["a" /* Question */])); + +QuestionRatingModel.defaultRateValues = []; +__WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].setData(QuestionRatingModel.defaultRateValues, [1, 2, 3, 4, 5]); +__WEBPACK_IMPORTED_MODULE_3__jsonobject__["a" /* JsonObject */].metaData.addClass("rating", ["hasComment:boolean", { name: "rateValues:itemvalues", onGetValue: function (obj) { return __WEBPACK_IMPORTED_MODULE_1__itemvalue__["a" /* ItemValue */].getData(obj.rateValues); }, onSetValue: function (obj, value) { obj.rateValues = value; } }, + { name: "minRateDescription", alternativeName: "mininumRateDescription", serializationProperty: "locMinRateDescription" }, + { name: "maxRateDescription", alternativeName: "maximumRateDescription", serializationProperty: "locMaxRateDescription" }], function () { return new QuestionRatingModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_4__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("rating", function (name) { return new QuestionRatingModel(name); }); + + +/***/ }), +/* 99 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localizablestring__ = __webpack_require__(8); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionTextModel; }); + + + + + +var QuestionTextModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](QuestionTextModel, _super); + function QuestionTextModel(name) { + var _this = _super.call(this, name) || this; + _this.name = name; + _this.size = 25; + _this.inputType = "text"; + _this.locPlaceHolderValue = new __WEBPACK_IMPORTED_MODULE_4__localizablestring__["a" /* LocalizableString */](_this); + return _this; + } + QuestionTextModel.prototype.getType = function () { + return "text"; + }; + QuestionTextModel.prototype.isEmpty = function () { return _super.prototype.isEmpty.call(this) || this.value == ""; }; + QuestionTextModel.prototype.supportGoNextPageAutomatic = function () { return true; }; + Object.defineProperty(QuestionTextModel.prototype, "placeHolder", { + get: function () { return this.locPlaceHolder.text; }, + set: function (value) { this.locPlaceHolder.text = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionTextModel.prototype, "locPlaceHolder", { + get: function () { return this.locPlaceHolderValue; }, + enumerable: true, + configurable: true + }); + QuestionTextModel.prototype.setNewValue = function (newValue) { + newValue = this.correctValueType(newValue); + _super.prototype.setNewValue.call(this, newValue); + }; + QuestionTextModel.prototype.correctValueType = function (newValue) { + if (!newValue) + return newValue; + if (this.inputType == "number" || this.inputType == "range") { + return this.isNumber(newValue) ? parseFloat(newValue) : ""; + } + return newValue; + }; + QuestionTextModel.prototype.isNumber = function (value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }; + return QuestionTextModel; +}(__WEBPACK_IMPORTED_MODULE_3__question__["a" /* Question */])); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("text", [{ name: "inputType", default: "text", choices: ["color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "tel", "text", "time", "url", "week"] }, + { name: "size:number", default: 25 }, { name: "placeHolder", serializationProperty: "locPlaceHolder" }], function () { return new QuestionTextModel(""); }, "question"); +__WEBPACK_IMPORTED_MODULE_1__questionfactory__["a" /* QuestionFactory */].Instance.registerQuestion("text", function (name) { return new QuestionTextModel(name); }); + + +/***/ }), +/* 100 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(20); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyWindowModel; }); + + + +var SurveyWindowModel = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyWindowModel, _super); + function SurveyWindowModel(jsonObj) { + var _this = _super.call(this) || this; + _this.surveyValue = _this.createSurvey(jsonObj); + _this.surveyValue.showTitle = false; + _this.windowElement = document.createElement("div"); + return _this; + } + SurveyWindowModel.prototype.getType = function () { return "window"; }; + Object.defineProperty(SurveyWindowModel.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isShowing", { + get: function () { return this.isShowingValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "isExpanded", { + get: function () { return this.isExpandedValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyWindowModel.prototype, "title", { + get: function () { return this.titleValue ? this.titleValue : this.survey.title; }, + set: function (value) { this.titleValue = value; }, + enumerable: true, + configurable: true + }); + SurveyWindowModel.prototype.expand = function () { + this.expandcollapse(true); + }; + SurveyWindowModel.prototype.collapse = function () { + this.expandcollapse(false); + }; + SurveyWindowModel.prototype.createSurvey = function (jsonObj) { + return new __WEBPACK_IMPORTED_MODULE_2__survey__["a" /* SurveyModel */](jsonObj); + }; + SurveyWindowModel.prototype.expandcollapse = function (value) { + this.isExpandedValue = value; + }; + return SurveyWindowModel; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +SurveyWindowModel.surveyElementName = "windowSurveyJS"; + + +/***/ }), +/* 101 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Trigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTrigger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyTriggerVisible; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyTriggerComplete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyTriggerSetValue; }); + + + +var Trigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](Trigger, _super); + function Trigger() { + var _this = _super.call(this) || this; + _this.opValue = "equal"; + return _this; + } + Object.defineProperty(Trigger, "operators", { + get: function () { + if (Trigger.operatorsValue != null) + return Trigger.operatorsValue; + Trigger.operatorsValue = { + empty: function (value, expectedValue) { return !value; }, + notempty: function (value, expectedValue) { return !(!value); }, + equal: function (value, expectedValue) { return value == expectedValue; }, + notequal: function (value, expectedValue) { return value != expectedValue; }, + contains: function (value, expectedValue) { return value && value["indexOf"] && value.indexOf(expectedValue) > -1; }, + notcontains: function (value, expectedValue) { return !value || !value["indexOf"] || value.indexOf(expectedValue) == -1; }, + greater: function (value, expectedValue) { return value > expectedValue; }, + less: function (value, expectedValue) { return value < expectedValue; }, + greaterorequal: function (value, expectedValue) { return value >= expectedValue; }, + lessorequal: function (value, expectedValue) { return value <= expectedValue; } + }; + return Trigger.operatorsValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Trigger.prototype, "operator", { + get: function () { return this.opValue; }, + set: function (value) { + if (!value) + return; + value = value.toLowerCase(); + if (!Trigger.operators[value]) + return; + this.opValue = value; + }, + enumerable: true, + configurable: true + }); + Trigger.prototype.check = function (value) { + if (Trigger.operators[this.operator](value, this.value)) { + this.onSuccess(); + } + else { + this.onFailure(); + } + }; + Trigger.prototype.onSuccess = function () { }; + Trigger.prototype.onFailure = function () { }; + return Trigger; +}(__WEBPACK_IMPORTED_MODULE_1__base__["b" /* Base */])); + +Trigger.operatorsValue = null; +var SurveyTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTrigger, _super); + function SurveyTrigger() { + var _this = _super.call(this) || this; + _this.owner = null; + return _this; + } + SurveyTrigger.prototype.setOwner = function (owner) { + this.owner = owner; + }; + Object.defineProperty(SurveyTrigger.prototype, "isOnNextPage", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + return SurveyTrigger; +}(Trigger)); + +var SurveyTriggerVisible = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerVisible, _super); + function SurveyTriggerVisible() { + var _this = _super.call(this) || this; + _this.pages = []; + _this.questions = []; + return _this; + } + SurveyTriggerVisible.prototype.getType = function () { return "visibletrigger"; }; + SurveyTriggerVisible.prototype.onSuccess = function () { this.onTrigger(this.onItemSuccess); }; + SurveyTriggerVisible.prototype.onFailure = function () { this.onTrigger(this.onItemFailure); }; + SurveyTriggerVisible.prototype.onTrigger = function (func) { + if (!this.owner) + return; + var objects = this.owner.getObjects(this.pages, this.questions); + for (var i = 0; i < objects.length; i++) { + func(objects[i]); + } + }; + SurveyTriggerVisible.prototype.onItemSuccess = function (item) { item.visible = true; }; + SurveyTriggerVisible.prototype.onItemFailure = function (item) { item.visible = false; }; + return SurveyTriggerVisible; +}(SurveyTrigger)); + +var SurveyTriggerComplete = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerComplete, _super); + function SurveyTriggerComplete() { + return _super.call(this) || this; + } + SurveyTriggerComplete.prototype.getType = function () { return "completetrigger"; }; + Object.defineProperty(SurveyTriggerComplete.prototype, "isOnNextPage", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + SurveyTriggerComplete.prototype.onSuccess = function () { if (this.owner) + this.owner.doComplete(); }; + return SurveyTriggerComplete; +}(SurveyTrigger)); + +var SurveyTriggerSetValue = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */](SurveyTriggerSetValue, _super); + function SurveyTriggerSetValue() { + return _super.call(this) || this; + } + SurveyTriggerSetValue.prototype.getType = function () { return "setvaluetrigger"; }; + SurveyTriggerSetValue.prototype.onSuccess = function () { + if (!this.setToName || !this.owner) + return; + this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable); + }; + return SurveyTriggerSetValue; +}(SurveyTrigger)); + +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("trigger", ["operator", "!value"]); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("surveytrigger", ["!name"], null, "trigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("visibletrigger", ["pages", "questions"], function () { return new SurveyTriggerVisible(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("completetrigger", [], function () { return new SurveyTriggerComplete(); }, "surveytrigger"); +__WEBPACK_IMPORTED_MODULE_2__jsonobject__["a" /* JsonObject */].metaData.addClass("setvaluetrigger", ["!setToName", "setValue", "isVariable:boolean"], function () { return new SurveyTriggerSetValue(); }, "surveytrigger"); + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * vue-class-component v5.0.0 + * (c) 2015-2017 Evan You + * @license MIT + */ + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var Vue = _interopDefault(__webpack_require__(2)); + +function createDecorator(factory) { + return function (_, key, index) { + if (typeof index !== 'number') { + index = undefined; + } + $decoratorQueue.push(function (options) { return factory(options, key, index); }); + }; +} +function warn(message) { + if (typeof console !== 'undefined') { + console.warn('[vue-class-component] ' + message); + } +} + +function collectDataFromConstructor(vm, Component) { + Component.prototype._init = function () { + var _this = this; + var keys = Object.getOwnPropertyNames(vm); + if (vm.$options.props) { + for (var key in vm.$options.props) { + if (!vm.hasOwnProperty(key)) { + keys.push(key); + } + } + } + keys.forEach(function (key) { + if (key.charAt(0) !== '_') { + Object.defineProperty(_this, key, { + get: function () { return vm[key]; }, + set: function (value) { return vm[key] = value; } + }); + } + }); + }; + var data = new Component(); + var plainData = {}; + Object.keys(data).forEach(function (key) { + if (data[key] !== undefined) { + plainData[key] = data[key]; + } + }); + if (process.env.NODE_ENV !== 'production') { + if (!(Component.prototype instanceof Vue) && Object.keys(plainData).length > 0) { + warn('Component class must inherit Vue or its descendant class ' + + 'when class property is used.'); + } + } + return plainData; +} + +var $internalHooks = [ + 'data', + 'beforeCreate', + 'created', + 'beforeMount', + 'mounted', + 'beforeDestroy', + 'destroyed', + 'beforeUpdate', + 'updated', + 'activated', + 'deactivated', + 'render' +]; +var $decoratorQueue = []; +function componentFactory(Component, options) { + if (options === void 0) { options = {}; } + options.name = options.name || Component._componentTag; + var proto = Component.prototype; + Object.getOwnPropertyNames(proto).forEach(function (key) { + if (key === 'constructor') { + return; + } + if ($internalHooks.indexOf(key) > -1) { + options[key] = proto[key]; + return; + } + var descriptor = Object.getOwnPropertyDescriptor(proto, key); + if (typeof descriptor.value === 'function') { + (options.methods || (options.methods = {}))[key] = descriptor.value; + } + else if (descriptor.get || descriptor.set) { + (options.computed || (options.computed = {}))[key] = { + get: descriptor.get, + set: descriptor.set + }; + } + }); + (options.mixins || (options.mixins = [])).push({ + data: function () { + return collectDataFromConstructor(this, Component); + } + }); + $decoratorQueue.forEach(function (fn) { return fn(options); }); + $decoratorQueue = []; + var superProto = Object.getPrototypeOf(Component.prototype); + var Super = superProto instanceof Vue + ? superProto.constructor + : Vue; + return Super.extend(options); +} + +function Component(options) { + if (typeof options === 'function') { + return componentFactory(options); + } + return function (Component) { + return componentFactory(Component, options); + }; +} +(function (Component) { + function registerHooks(keys) { + $internalHooks.push.apply($internalHooks, keys); + } + Component.registerHooks = registerHooks; +})(Component || (Component = {})); +var Component$1 = Component; + +exports['default'] = Component$1; +exports.createDecorator = createDecorator; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24))) + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('form', { + class: _vm.css.checkbox.root + }, _vm._l((_vm.question.visibleChoices), function(item, index) { + return _c('div', { + class: _vm.css.radiogroup.item, + style: ({ + width: _vm.colWidth, + 'margin-right': _vm.question.colCount === 0 ? '5px' : '0px' + }) + }, [_c('label', { + class: _vm.css.radiogroup.item + }, [_c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (_vm.value), + expression: "value" + }], + attrs: { + "type": "checkbox", + "name": _vm.question.name, + "id": _vm.question.inputId + '_' + item.value, + "disabled": _vm.question.isReadOnly + }, + domProps: { + "value": item.value, + "checked": Array.isArray(_vm.value) ? _vm._i(_vm.value, item.value) > -1 : (_vm.value) + }, + on: { + "click": function($event) { + var $$a = _vm.value, + $$el = $event.target, + $$c = $$el.checked ? (true) : (false); + if (Array.isArray($$a)) { + var $$v = item.value, + $$i = _vm._i($$a, $$v); + if ($$c) { + $$i < 0 && (_vm.value = $$a.concat($$v)) + } else { + $$i > -1 && (_vm.value = $$a.slice(0, $$i).concat($$a.slice($$i + 1))) + } + } else { + _vm.value = $$c + } + } + } + }), _vm._v(" "), _c('span', [_vm._v(_vm._s(item.text))]), _vm._v(" "), _c('survey-other-choice', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.hasOther && _vm.question.isOtherSelected), + expression: "question.hasOther && question.isOtherSelected" + }], + class: _vm.css.radiogroup.other, + attrs: { + "question": _vm.question, + "css": _vm.css + } + })], 1)]) + })) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-060dbce0", module.exports) + } +} + +/***/ }), +/* 104 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [(!_vm.question.isReadOnly) ? _c('textarea', { + directives: [{ + name: "model", + rawName: "v-model", + value: (_vm.question.value), + expression: "question.value" + }], + class: _vm.css.comment.root, + attrs: { + "type": "text", + "id": _vm.question.inputId, + "cols": _vm.question.cols, + "rows": _vm.question.rows, + "placeholder": _vm.question.placeHolder + }, + domProps: { + "value": _vm._s(_vm.question.value) + }, + on: { + "input": function($event) { + if ($event.target.composing) { return; } + _vm.question.value = $event.target.value + } + } + }) : _c('div', { + class: _vm.css.comment.root, + attrs: { + "text": _vm.question.value + } + })]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-0776fbbc", module.exports) + } +} + +/***/ }), +/* 105 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + class: _vm.css.root + }, [(_vm.hasTitle) ? _c('div', { + class: _vm.css.header + }, [_c('h3', [_vm._v(_vm._s(_vm.survey.processedTitle))])]) : _vm._e(), _vm._v(" "), (_vm.survey.state === 'running') ? [_c('div', { + class: _vm.css.body + }, [(_vm.survey.showProgressBar == 'top') ? _c('survey-progress', { + attrs: { + "survey": _vm.survey, + "css": _vm.css + } + }) : _vm._e(), _vm._v(" "), _c('survey-page', { + attrs: { + "id": "sq-page", + "survey": _vm.survey, + "page": _vm.survey.currentPage, + "css": _vm.css + } + }), _vm._v(" "), (_vm.survey.showProgressBar == 'bottom') ? _c('survey-progress', { + staticStyle: { + "margin-top": "10px" + }, + attrs: { + "survey": _vm.survey, + "css": _vm.css + } + }) : _vm._e()], 1), _vm._v(" "), (_vm.survey.isNavigationButtonsShowing) ? _c('div', { + class: _vm.css.footer + }, [_c('input', { + directives: [{ + name: "show", + rawName: "v-show", + value: (!_vm.survey.isFirstPage), + expression: "!survey.isFirstPage" + }], + class: _vm.getNavBtnClasses('prev'), + attrs: { + "type": "button", + "value": _vm.survey.pagePrevText + }, + on: { + "click": _vm.prevPage + } + }), _vm._v(" "), _c('input', { + directives: [{ + name: "show", + rawName: "v-show", + value: (!_vm.survey.isLastPage), + expression: "!survey.isLastPage" + }], + class: _vm.getNavBtnClasses('next'), + attrs: { + "type": "button", + "value": _vm.survey.pageNextText + }, + on: { + "click": _vm.nextPage + } + }), _vm._v(" "), (_vm.survey.isEditMode) ? _c('input', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.survey.isLastPage), + expression: "survey.isLastPage" + }], + class: _vm.getNavBtnClasses('complete'), + attrs: { + "type": "button", + "value": _vm.survey.completeText + }, + on: { + "click": _vm.completeLastPage + } + }) : _vm._e()]) : _vm._e()] : _vm._e(), _vm._v(" "), (_vm.hasCompletedPage) ? _c('div', { + domProps: { + "innerHTML": _vm._s(_vm.survey.processedCompletedHtml) + } + }) : _vm._e(), _vm._v(" "), (_vm.survey.state === 'loading') ? _c('div', { + domProps: { + "innerHTML": _vm._s(_vm.survey.processedLoadingHtml) + } + }) : _vm._e(), _vm._v(" "), (_vm.survey.state === 'empty') ? _c('div', { + class: _vm.css.body + }, [_vm._v(_vm._s(_vm.survey.emptySurveyText))]) : _vm._e()], 2) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-16bc9a32", module.exports) + } +} + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + domProps: { + "innerHTML": _vm._s(_vm.question.processedHtml) + } + }) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-18490810", module.exports) + } +} + +/***/ }), +/* 107 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('table', { + class: _vm.css.multipletext.root + }, _vm._l((_vm.question.getRows()), function(row) { + return _c('tr', [_vm._l((row), function(item, index) { + return [_c('td', { + class: _vm.css.multipletext.itemTitle + }, [_vm._v(_vm._s(item.fullTitle))]), _vm._v(" "), _c('td', [(!_vm.question.isReadOnly) ? _c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (item.value), + expression: "item.value" + }], + class: _vm.css.multipletext.itemValue, + staticStyle: { + "float": "left" + }, + attrs: { + "type": "text", + "size": _vm.question.itemSize, + "placeholder": item.placeHolder, + "id": index === 0 ? _vm.question.inputId : '' + }, + domProps: { + "value": _vm._s(item.value) + }, + on: { + "input": function($event) { + if ($event.target.composing) { return; } + item.value = $event.target.value + } + } + }) : _c('div', { + class: _vm.css.multipletext.itemValue, + staticStyle: { + "float": "left" + }, + attrs: { + "size": _vm.question.itemSize + } + }, [_vm._v(_vm._s(item.value))])]), _vm._v(" "), void 0] + })], 2) + })) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-3687b98a", module.exports) + } +} + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [_c('h4', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.hasTitle), + expression: "hasTitle" + }], + class: _vm.css.pageTitle + }, [_vm._v(_vm._s(_vm.num + _vm.page.processedTitle))]), _vm._v(" "), _vm._l((_vm.rows), function(row) { + return _c('div', { + directives: [{ + name: "show", + rawName: "v-show", + value: (row.visible), + expression: "row.visible" + }], + class: _vm.css.row + }, [_c('survey-row', { + attrs: { + "row": row, + "survey": _vm.survey, + "css": _vm.css + } + })], 1) + })], 2) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-3b2ec4dc", module.exports) + } +} + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + style: ({ + overflowX: _vm.question.horizontalScroll ? 'scroll' : '' + }) + }, [_c('table', { + class: _vm.css.matrixdynamic.root + }, [_c('thead', [_c('tr', [_vm._l((_vm.question.columns), function(column) { + return _c('th', { + style: ({ + minWidth: _vm.question.getColumnWidth(column) + }) + }, [_vm._v(_vm._s(_vm.question.getColumnTitle(column)))]) + }), _vm._v(" "), (!_vm.question.isReadOnly) ? _c('th') : _vm._e()], 2)]), _vm._v(" "), _c('tbody', _vm._l((_vm.rows), function(row) { + return _c('tr', [_vm._l((row.cells), function(cell) { + return _c('td', [_c('survey-errors', { + attrs: { + "question": cell.question, + "css": _vm.css + } + }), _vm._v(" "), _c('survey-' + cell.question.getType(), { + tag: "component", + attrs: { + "question": cell.question, + "css": _vm.css + } + })], 1) + }), _vm._v(" "), (!_vm.question.isReadOnly) ? _c('td', [_c('input', { + class: _vm.css.matrixdynamic.button, + attrs: { + "type": "button", + "value": _vm.question.removeRowText + }, + on: { + "click": function($event) { + _vm.removeRowClick(row) + } + } + })]) : _vm._e()], 2) + }))]), _vm._v(" "), (!_vm.question.isReadOnly) ? _c('input', { + class: _vm.css.matrixdynamic.button, + attrs: { + "type": "button", + "value": _vm.question.addRowText + }, + on: { + "click": _vm.addRowClick + } + }) : _vm._e()]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-434f4d61", module.exports) + } +} + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [(!_vm.question.isReadOnly) ? _c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (_vm.question.comment), + expression: "question.comment" + }], + class: _vm.css.question.comment, + attrs: { + "type": "text" + }, + domProps: { + "value": _vm._s(_vm.question.comment) + }, + on: { + "input": function($event) { + if ($event.target.composing) { return; } + _vm.question.comment = $event.target.value + } + } + }) : _c('div', { + class: _vm.css.question.comment + }, [_vm._v(_vm._s(_vm.question.comment))])]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-4380fa14", module.exports) + } +} + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [(!_vm.question.isReadOnly) ? _c('input', { + attrs: { + "type": "file", + "id": _vm.question.inputId + }, + on: { + "change": _vm.doChange + } + }) : _vm._e(), _vm._v(" "), _c('div', [_c('img', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.previewValue), + expression: "question.previewValue" + }], + attrs: { + "src": _vm.question.value, + "height": _vm.question.imageHeight, + "width": _vm.question.imageWidth + } + })])]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-47c5cd6e", module.exports) + } +} + +/***/ }), +/* 112 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('form', { + class: _vm.css.radiogroup.root + }, [_vm._l((_vm.question.visibleChoices), function(item, index) { + return _c('div', { + class: _vm.css.radiogroup.item, + style: ({ + 'width': _vm.colWidth, + 'margin-right': _vm.question.colCount === 0 ? '5px' : '0px' + }) + }, [_c('label', { + class: _vm.css.radiogroup.label + }, [_c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (_vm.question.value), + expression: "question.value" + }], + attrs: { + "type": "radio", + "name": _vm.question.name, + "id": _vm.question.inputId + '_' + item.value, + "disabled": _vm.question.isReadOnly + }, + domProps: { + "value": item.value, + "checked": _vm._q(_vm.question.value, item.value) + }, + on: { + "click": function($event) { + _vm.question.value = item.value + } + } + }), _vm._v(" "), _c('span', [_vm._v(_vm._s(item.text))])])]) + }), _vm._v(" "), _c('survey-other-choice', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.hasOther && _vm.question.isOtherSelected), + expression: "question.hasOther && question.isOtherSelected" + }], + class: _vm.css.radiogroup.other, + attrs: { + "question": _vm.question, + "css": _vm.css + } + })], 2) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-5a061b71", module.exports) + } +} + +/***/ }), +/* 113 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', _vm._l((_vm.row.elements), function(element) { + return _c('div', { + class: _vm.css.question.root, + staticStyle: { + "vertical-align": "top" + }, + style: ({ + display: element.visible ? 'inline-block' : 'none', + marginLeft: _vm.getIndentSize(element, element.indent), + paddingRight: _vm.getIndentSize(element, element.rightIndent), + width: element.renderWidth + }), + attrs: { + "id": element.id + } + }, [(element.hasTitle) ? _c('h5', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.survey.questionTitleLocation === 'top'), + expression: "survey.questionTitleLocation === 'top'" + }], + class: _vm.css.question.title + }, [_vm._v(_vm._s(element.fullTitle))]) : _vm._e(), _vm._v(" "), _c('survey-errors', { + attrs: { + "question": element, + "css": _vm.css + } + }), _vm._v(" "), _c(_vm.getWidgetComponentName(element), { + tag: "component", + attrs: { + "question": element, + "css": _vm.css + } + }), _vm._v(" "), _c('div', { + directives: [{ + name: "show", + rawName: "v-show", + value: (element.hasComment), + expression: "element.hasComment" + }] + }, [_c('div', [_vm._v(_vm._s(element.commentText))]), _vm._v(" "), _c('survey-comment', { + attrs: { + "question": element, + "css": _vm.css + } + })], 1), _vm._v(" "), (element.hasTitle) ? _c('h5', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.survey.questionTitleLocation === 'bottom'), + expression: "survey.questionTitleLocation === 'bottom'" + }], + class: _vm.css.question.title + }, [_vm._v(_vm._s(element.fullTitle))]) : _vm._e()], 1) + })) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-6295b4c6", module.exports) + } +} + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + class: _vm.css.dropdown.root + }, [(!_vm.question.isReadOnly) ? _c('select', { + directives: [{ + name: "model", + rawName: "v-model", + value: (_vm.question.value), + expression: "question.value" + }], + class: _vm.css.dropdown.control, + attrs: { + "id": _vm.question.inputId + }, + on: { + "change": function($event) { + _vm.question.value = Array.prototype.filter.call($event.target.options, function(o) { + return o.selected + }).map(function(o) { + var val = "_value" in o ? o._value : o.value; + return val + })[0] + } + } + }, [_c('option', { + attrs: { + "value": "" + } + }, [_vm._v(_vm._s(_vm.question.optionsCaption))]), _vm._v(" "), _vm._l((_vm.question.visibleChoices), function(item, index) { + return _c('option', { + domProps: { + "value": item.value + } + }, [_vm._v(_vm._s(item.text))]) + })], 2) : _c('div', { + class: _vm.css.dropdown.control, + attrs: { + "text": _vm.question.value + } + }), _vm._v(" "), _c('survey-other-choice', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.hasOther && _vm.question.isOtherSelected), + expression: "question.hasOther && question.isOtherSelected" + }], + class: _vm.css.radiogroup.other, + attrs: { + "question": _vm.question, + "css": _vm.css + } + })], 1) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-64d71a44", module.exports) + } +} + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [(!_vm.question.isReadOnly) ? _c('input', { + class: _vm.css.text, + attrs: { + "type": _vm.question.inputType, + "size": _vm.question.size, + "id": _vm.question.inputId, + "placeholder": _vm.question.placeHolder + }, + domProps: { + "value": _vm.question.value + }, + on: { + "change": _vm.change + } + }) : _c('div', { + class: _vm.css.text + }, [_vm._v(_vm._s(_vm.question.value))])]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-67bbaf0c", module.exports) + } +} + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + style: ({ + overflowX: _vm.question.horizontalScroll ? 'scroll' : '' + }) + }, [_c('table', { + class: _vm.css.matrixdropdown.root + }, [_c('thead', [_c('tr', [_c('th'), _vm._v(" "), _vm._l((_vm.question.columns), function(column) { + return _c('th', { + style: ({ + minWidth: _vm.question.getColumnWidth(column) + }) + }, [_vm._v(_vm._s(_vm.question.getColumnTitle(column)))]) + })], 2)]), _vm._v(" "), _c('tbody', _vm._l((_vm.question.visibleRows), function(row) { + return _c('tr', [_c('td', [_vm._v(_vm._s(row.text))]), _vm._v(" "), _vm._l((row.cells), function(cell) { + return _c('td', [_c('survey-errors', { + attrs: { + "question": _vm.question, + "css": _vm.css + } + }), _vm._v(" "), _c('survey-' + cell.question.getType(), { + tag: "component", + attrs: { + "question": cell.question, + "css": _vm.css + } + })], 1) + })], 2) + }))])]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-74a6555f", module.exports) + } +} + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + directives: [{ + name: "show", + rawName: "v-show", + value: (!!_vm.question.errors && _vm.question.errors.length > 0), + expression: "!!question.errors && question.errors.length > 0" + }], + class: _vm.css.error.root, + attrs: { + "role": "alert" + } + }, _vm._l((_vm.question.errors), function(error) { + return _c('div', [_c('span', { + class: _vm.css.error.icon, + attrs: { + "aria-hidden": "true" + } + }), _vm._v(" "), _c('span', { + class: _vm.css.error.item + }, [_vm._v(_vm._s(error.getText()))])]) + })) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-7f5f0a78", module.exports) + } +} + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('table', { + class: _vm.css.matrix.root + }, [_c('thead', [_c('tr', [_c('th', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.hasRows), + expression: "question.hasRows" + }] + }), _vm._v(" "), _vm._l((_vm.question.columns), function(column) { + return _c('th', [_vm._v(_vm._s(column.text))]) + })], 2)]), _vm._v(" "), _c('tbody', _vm._l((_vm.question.visibleRows), function(row, rowIndex) { + return _c('tr', [_c('td', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.hasRows), + expression: "question.hasRows" + }] + }, [_vm._v(_vm._s(row.text))]), _vm._v(" "), _vm._l((_vm.question.columns), function(column, columnIndex) { + return _c('td', [_c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (row.value), + expression: "row.value" + }], + attrs: { + "type": "radio", + "name": row.fullName, + "disabled": _vm.question.isReadOnly, + "id": (columnIndex === 0) && (rowIndex === 0) ? _vm.question.inputId : '' + }, + domProps: { + "value": column.value, + "checked": _vm._q(row.value, column.value) + }, + on: { + "click": function($event) { + row.value = column.value + } + } + })]) + })], 2) + }))]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-af01d064", module.exports) + } +} + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [_c('h4', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.hasTitle), + expression: "hasTitle" + }], + class: _vm.css.pageTitle + }, [_vm._v(_vm._s(_vm.question.processedTitle))]), _vm._v(" "), _c('div', { + style: ({ + marginLeft: _vm.getIndentSize(_vm.question, _vm.question.innerIndent) + }) + }, _vm._l((_vm.rows), function(row) { + return _c('div', { + directives: [{ + name: "show", + rawName: "v-show", + value: (row.visible), + expression: "row.visible" + }], + class: _vm.css.row + }, [_c('survey-row', { + attrs: { + "row": row, + "survey": _vm.survey, + "css": _vm.css + } + })], 1) + }))]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-bf831bf2", module.exports) + } +} + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', [_c('div', { + class: _vm.css.rating.root + }, _vm._l((_vm.question.visibleRateValues), function(item, index) { + return _c('label', { + class: _vm.getCss(item) + }, [_c('input', { + staticStyle: { + "display": "none" + }, + attrs: { + "type": "radio", + "name": _vm.question.name, + "id": _vm.question.name + index, + "disabled": _vm.question.isReadOnly + }, + domProps: { + "value": item.value + }, + on: { + "change": _vm.change + } + }), _vm._v(" "), (index === 0) ? _c('span', [_vm._v(_vm._s(_vm.question.minRateDescription))]) : _vm._e(), _vm._v(" "), _c('span', [_vm._v(_vm._s(item.text))]), _vm._v(" "), (index === _vm.question.visibleRateValues.length - 1) ? _c('span', [_vm._v(_vm._s(_vm.question.maxRateDescription))]) : _vm._e()]) + })), _vm._v(" "), _c('survey-other-choice', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.question.hasOther), + expression: "question.hasOther" + }], + class: _vm.css.rating.other, + attrs: { + "question": _vm.question, + "css": _vm.css + } + })], 1) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-cd2238ac", module.exports) + } +} + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + class: _vm.css.window.root, + staticStyle: { + "position": "fixed", + "bottom": "3px", + "right": "10px" + } + }, [_c('div', { + class: _vm.css.window.header.root + }, [_c('a', { + staticStyle: { + "width": "100%" + }, + attrs: { + "href": "#" + }, + on: { + "click": _vm.doExpand + } + }, [_c('span', { + class: _vm.css.window.header.title, + staticStyle: { + "padding-right": "10px" + } + }, [_vm._v(_vm._s(_vm.survey.title))]), _vm._v(" "), _c('span', { + class: _vm.expandedCss, + attrs: { + "aria-hidden": "true" + } + })])]), _vm._v(" "), _c('div', { + directives: [{ + name: "show", + rawName: "v-show", + value: (_vm.expanded), + expression: "expanded" + }], + class: _vm.css.window.body + }, [_c('survey', { + attrs: { + "survey": _vm.survey + } + })], 1)]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-e85ca706", module.exports) + } +} + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + class: _vm.css.progress, + staticStyle: { + "width": "60%" + } + }, [_c('div', { + class: _vm.css.progressBar, + style: ({ + width: _vm.progress + }), + attrs: { + "role": "progressbar", + "aria-valuemin": "0", + "aria-valuemax": "100" + } + }, [_c('span', [_vm._v(_vm._s(_vm.survey.progressText))])])]) +},staticRenderFns: []} +module.exports.render._withStripped = true +if (false) { + module.hot.accept() + if (module.hot.data) { + require("vue-hot-reload-api").rerender("data-v-eb74fa0c", module.exports) + } +} + +/***/ }), +/* 123 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 124 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__chunks_model__ = __webpack_require__(32); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "AnswerCountValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "EmailValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["c"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "NumericValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["d"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RegexValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["e"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["f"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextValidator", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["g"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorResult", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["h"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ValidatorRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["i"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Base", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["j"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Event", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["k"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["l"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ItemValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["m"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "LocalizableString", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["n"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ChoicesRestfull", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["o"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Condition", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["p"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionNode", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionRunner", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["r"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ConditionsParser", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["s"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ProcessValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["t"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["u"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ExceedSizeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["v"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "RequreNumericError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["w"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["x"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonIncorrectTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMetadataClass", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["A"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["B"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonMissingTypeErrorBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["C"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObject", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["D"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["E"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonRequiredPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["F"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "JsonUnknownPropertyError", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["G"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownCell", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["H"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownColumn", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["I"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["J"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["K"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdownRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["L"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["M"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixDynamicRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["N"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixDynamicModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["O"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MatrixRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["P"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMatrixModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Q"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "MultipleTextItemModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["R"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionMultipleTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["S"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["T"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PanelModelBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["U"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["V"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "PageModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["W"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Question", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["X"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Y"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["Z"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionSelectBase", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_0"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCheckboxModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_1"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCommentModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_2"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionDropdownModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_3"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_4"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ElementFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_5"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionFileModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_6"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionHtmlModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_7"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRadiogroupModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_8"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionRatingModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_9"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionTextModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_10"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_11"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTrigger", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_12"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerComplete", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_13"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerSetValue", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_14"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyTriggerVisible", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_15"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Trigger", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_16"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "SurveyWindowModel", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_17"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "TextPreProcessor", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_18"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dxSurveyService", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_19"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyLocalization", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_20"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "surveyStrings", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_21"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "QuestionCustomWidget", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_22"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "CustomWidgetCollection", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__["_23"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__chunks_localization__ = __webpack_require__(31); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__ = __webpack_require__(0); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["a"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["b"]; }); +/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "surveyCss", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStandardCss", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultBootstrapCss", function() { return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vue_surveyModel__ = __webpack_require__(33); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_5__vue_surveyModel__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__vue_survey_vue__ = __webpack_require__(51); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__vue_survey_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__vue_survey_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Survey", function() { return __WEBPACK_IMPORTED_MODULE_6__vue_survey_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vue_window_vue__ = __webpack_require__(53); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vue_window_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__vue_window_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Window", function() { return __WEBPACK_IMPORTED_MODULE_7__vue_window_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__vue_page_vue__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__vue_page_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__vue_page_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Page", function() { return __WEBPACK_IMPORTED_MODULE_8__vue_page_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__vue_radiogroup_vue__ = __webpack_require__(48); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__vue_radiogroup_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9__vue_radiogroup_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Radiogroup", function() { return __WEBPACK_IMPORTED_MODULE_9__vue_radiogroup_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__vue_otherChoice_vue__ = __webpack_require__(44); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__vue_otherChoice_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10__vue_otherChoice_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "OtherChoice", function() { return __WEBPACK_IMPORTED_MODULE_10__vue_otherChoice_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__vue_rating_vue__ = __webpack_require__(49); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__vue_rating_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11__vue_rating_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Rating", function() { return __WEBPACK_IMPORTED_MODULE_11__vue_rating_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__vue_comment_vue__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__vue_comment_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12__vue_comment_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Comment", function() { return __WEBPACK_IMPORTED_MODULE_12__vue_comment_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__vue_checkbox_vue__ = __webpack_require__(34); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__vue_checkbox_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13__vue_checkbox_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Checkbox", function() { return __WEBPACK_IMPORTED_MODULE_13__vue_checkbox_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__vue_text_vue__ = __webpack_require__(52); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__vue_text_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14__vue_text_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Text", function() { return __WEBPACK_IMPORTED_MODULE_14__vue_text_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__vue_multipletext_vue__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__vue_multipletext_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15__vue_multipletext_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "MultipleText", function() { return __WEBPACK_IMPORTED_MODULE_15__vue_multipletext_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__vue_matrix_vue__ = __webpack_require__(40); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__vue_matrix_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16__vue_matrix_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Matrix", function() { return __WEBPACK_IMPORTED_MODULE_16__vue_matrix_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__vue_dropdown_vue__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__vue_dropdown_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_17__vue_dropdown_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Dropdown", function() { return __WEBPACK_IMPORTED_MODULE_17__vue_dropdown_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__vue_file_vue__ = __webpack_require__(38); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__vue_file_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_18__vue_file_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "File", function() { return __WEBPACK_IMPORTED_MODULE_18__vue_file_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__vue_matrixdropdown_vue__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__vue_matrixdropdown_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_19__vue_matrixdropdown_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "MatrixDropdown", function() { return __WEBPACK_IMPORTED_MODULE_19__vue_matrixdropdown_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__vue_errors_vue__ = __webpack_require__(37); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__vue_errors_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_20__vue_errors_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Errors", function() { return __WEBPACK_IMPORTED_MODULE_20__vue_errors_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__vue_html_vue__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__vue_html_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_21__vue_html_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Html", function() { return __WEBPACK_IMPORTED_MODULE_21__vue_html_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__vue_matrixdynamic_vue__ = __webpack_require__(42); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__vue_matrixdynamic_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_22__vue_matrixdynamic_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "MatrixDynamic", function() { return __WEBPACK_IMPORTED_MODULE_22__vue_matrixdynamic_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__vue_progress_vue__ = __webpack_require__(47); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__vue_progress_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_23__vue_progress_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Progress", function() { return __WEBPACK_IMPORTED_MODULE_23__vue_progress_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__vue_panel_vue__ = __webpack_require__(46); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__vue_panel_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_24__vue_panel_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Panel", function() { return __WEBPACK_IMPORTED_MODULE_24__vue_panel_vue___default.a; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__vue_row_vue__ = __webpack_require__(50); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__vue_row_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_25__vue_row_vue__); +/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "Row", function() { return __WEBPACK_IMPORTED_MODULE_25__vue_row_vue___default.a; }); +// model + +// localization + +// helpers + + +// css standard + +// css bootstrap + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBkYjRhM2U4ZjFlNDI3NzkzZGEzMiIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiVnVlXCIsXCJjb21tb25qczJcIjpcInZ1ZVwiLFwiY29tbW9uanNcIjpcInZ1ZVwiLFwiYW1kXCI6XCJ2dWVcIn0iLCJ3ZWJwYWNrOi8vLy4vc3JjL2pzb25vYmplY3QudHMiLCJ3ZWJwYWNrOi8vLy4vfi92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi92dWUtcHJvcGVydHktZGVjb3JhdG9yLmNvbW1vbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyLmpzIiwid2VicGFjazovLy8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzIiwid2VicGFjazovLy8uL3NyYy92dWUvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Vycm9yLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaXRlbXZhbHVlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9iYXNlc2VsZWN0LnRzIiwid2VicGFjazovLy8uL3NyYy9jb25kaXRpb25zLnRzIiwid2VicGFjazovLy8uL3NyYy9jaG9pY2VzUmVzdGZ1bGwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdmFsaWRhdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy92dWUvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZGl0aW9uc1BhcnNlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZHhTdXJ2ZXlTZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYW5lbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwid2VicGFjazovLy8uL3NyYy9kZWZhdWx0Q3NzL2Nzc2Jvb3RzdHJhcC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvbG9jYWxpemF0aW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9lbnRyaWVzL2NodW5rcy9tb2RlbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3N1cnZleU1vZGVsLnRzIiwid2VicGFjazovLy8uL3NyYy92dWUvY2hlY2tib3gudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvY29tbWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lcnJvcnMudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvZmlsZS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9odG1sLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3BhbmVsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvcmF0aW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3Jvdy52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdXJ2ZXkudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvdGV4dC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS93aW5kb3cudnVlIiwid2VicGFjazovLy8uL3NyYy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vfi9yZWZsZWN0LW1ldGFkYXRhL1JlZmxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jaGVja2JveC52dWU/ZmRiYyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NvbW1lbnQudnVlP2Y4MzkiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/ZGUwMyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Vycm9ycy52dWU/MTRmYyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2ZpbGUudnVlPzJhYzUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9odG1sLnZ1ZT8wZjNhIiwid2VicGFjazovLy8uL3NyYy92dWUvbWF0cml4LnZ1ZT9kN2I5Iiwid2VicGFjazovLy8uL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlP2JmMjkiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT81MGQ4Iiwid2VicGFjazovLy8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9hNjAxIiwid2VicGFjazovLy8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlPzI5N2IiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYWdlLnZ1ZT84ZmM5Iiwid2VicGFjazovLy8uL3NyYy92dWUvcGFuZWwudnVlPzQ5NWQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/ZjAzZCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzAxODAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yYXRpbmcudnVlP2I3MmEiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yb3cudnVlPzc2ZGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP2Y3ZmMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS90ZXh0LnZ1ZT9lNmUwIiwid2VicGFjazovLy8uL3NyYy92dWUvd2luZG93LnZ1ZT8yODZkIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9jaGVja2JveC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fY29tbWVudC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2ZpbGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2h0bWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcmFkaW9ncm91cC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcmF0aW5nLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlXaW5kb3cudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyaWdnZXIudHMiLCJ3ZWJwYWNrOi8vLy4vfi92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jaGVja2JveC52dWU/OThkNCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NvbW1lbnQudnVlP2M5NDAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdXJ2ZXkudnVlPzdjZTYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9odG1sLnZ1ZT9iYTEzIiwid2VicGFjazovLy8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT8yNTNkIiwid2VicGFjazovLy8uL3NyYy92dWUvcGFnZS52dWU/YmU2NyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlPzQyZjAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWU/OTQ3YSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2ZpbGUudnVlP2IzYjYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT8wZDdlIiwid2VicGFjazovLy8uL3NyYy92dWUvcm93LnZ1ZT8zODljIiwid2VicGFjazovLy8uL3NyYy92dWUvZHJvcGRvd24udnVlPzRjMTYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS90ZXh0LnZ1ZT8xNDI2Iiwid2VicGFjazovLy8uL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlP2IzMmIiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lcnJvcnMudnVlPzFmZjEiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXgudnVlP2FlODYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYW5lbC52dWU/YTJjYyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3JhdGluZy52dWU/MWE5YiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3dpbmRvdy52dWU/MDZkZiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT9hYmM0Iiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvdnVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUNoRU8sSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsTUFBTTtJQUN0RCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFSSxtQkFBb0IsU0FBUyxFQUFFLFNBQVM7SUFDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO1FBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekgsQ0FBQztBQUFBLENBQUM7QUFJSyxJQUFJLFVBQVUsR0FBRyxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDM0QsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdILEVBQUUsQ0FBQyxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO1FBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0gsSUFBSTtRQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEosTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDOzs7Ozs7Ozs7O0FDckJLLElBQUksa0JBQWtCLEdBQUc7SUFDNUIsYUFBYSxFQUFFLEVBQUU7SUFDakIsT0FBTyxFQUFFLEVBQUU7SUFDWCxTQUFTLEVBQUUsVUFBVSxPQUFlO1FBQ2hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQ2hGLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxVQUFVLEVBQUU7UUFDUixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSixDQUFDO0FBQ0ssSUFBSSxhQUFhLEdBQUc7SUFDdkIsWUFBWSxFQUFFLFVBQVU7SUFDeEIsWUFBWSxFQUFFLE1BQU07SUFDcEIsWUFBWSxFQUFFLFVBQVU7SUFDeEIsYUFBYSxFQUFFLGtCQUFrQjtJQUNqQyxZQUFZLEVBQUUsaUJBQWlCO0lBQy9CLFdBQVcsRUFBRSxxREFBcUQ7SUFDbEUsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELGFBQWEsRUFBRSxzQkFBc0I7SUFDckMsY0FBYyxFQUFFLFdBQVc7SUFDM0IsYUFBYSxFQUFFLDZCQUE2QjtJQUM1QyxzQkFBc0IsRUFBRSxzQ0FBc0M7SUFDOUQsWUFBWSxFQUFFLDhCQUE4QjtJQUM1QyxhQUFhLEVBQUUsb0NBQW9DO0lBQ25ELGFBQWEsRUFBRSxxQ0FBcUM7SUFDcEQsZ0JBQWdCLEVBQUUsdURBQXVEO0lBQ3pFLGdCQUFnQixFQUFFLG1DQUFtQztJQUNyRCxjQUFjLEVBQUUsc0NBQXNDO0lBQ3RELGNBQWMsRUFBRSwwQ0FBMEM7SUFDMUQsYUFBYSxFQUFFLHVFQUF1RTtJQUN0RixVQUFVLEVBQUUsNENBQTRDO0lBQ3hELFVBQVUsRUFBRSw0Q0FBNEM7SUFDeEQsWUFBWSxFQUFFLHNDQUFzQztJQUNwRCxlQUFlLEVBQUUsdUNBQXVDO0lBQ3hELGtCQUFrQixFQUFFLHFFQUFxRTtJQUN6RixhQUFhLEVBQUUsc0NBQXNDO0lBQ3JELGtCQUFrQixFQUFFLCtCQUErQjtJQUNuRCxhQUFhLEVBQUUsb0VBQW9FO0lBQ25GLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLFNBQVMsRUFBRSxRQUFRO0lBQ25CLGlCQUFpQixFQUFFLFlBQVk7SUFDL0Isa0JBQWtCLEVBQUUsYUFBYTtJQUNqQyxpQkFBaUIsRUFBRSxZQUFZO0lBQy9CLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCLFVBQVUsRUFBRSxLQUFLO0NBQ3BCLENBQUM7QUFDRixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO0FBRWpELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRztRQUN6QixJQUFJLElBQUksR0FBRyxTQUFTLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU07WUFDbkQsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVc7a0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUM7a0JBQ1osS0FBSyxDQUNOO1FBQ1QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUM7QUFDTixDQUFDOzs7Ozs7O0FDbEVELCtDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRUE7SUFnQkksNEJBQW1CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBZnZCLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFDekIsaUJBQVksR0FBZSxJQUFJLENBQUM7UUFDaEMsZ0JBQVcsR0FBcUIsSUFBSSxDQUFDO1FBQ3RDLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFDekIsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFDL0Isa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0Isa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0IsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixZQUFPLEdBQVksSUFBSSxDQUFDO1FBQ3hCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLDBCQUFxQixHQUFXLElBQUksQ0FBQztRQUNyQyxlQUFVLEdBQXNCLElBQUksQ0FBQztJQUk1QyxDQUFDO0lBQ0Qsc0JBQVcsb0NBQUk7YUFBZixjQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDaEYsVUFBZ0IsS0FBYSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BRHNCO0lBRWhGLHNCQUFXLGdEQUFnQjthQUEzQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNoRiwyQ0FBYyxHQUFyQixVQUFzQixLQUFVO1FBQzVCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDTSxxQ0FBUSxHQUFmLFVBQWdCLEdBQVE7UUFDcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELEVBQUUsRUFBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDTSw2Q0FBZ0IsR0FBdkIsVUFBd0IsR0FBUTtRQUM1QixFQUFFLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxzQkFBVyxnREFBZ0I7YUFBM0IsY0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDaEYscUNBQVEsR0FBZixVQUFnQixHQUFRLEVBQUUsS0FBVSxFQUFFLFFBQW9CO1FBQ3RELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLEVBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2dCQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUk7Z0JBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFDTSx1Q0FBVSxHQUFqQixVQUFrQixPQUFlO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ00seUNBQVksR0FBbkIsVUFBb0IsU0FBaUI7UUFDakMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDMUgsQ0FBQztJQUNELHNCQUFXLHVDQUFPO2FBQWxCO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDeEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUM7OztPQUFBO0lBQ00sdUNBQVUsR0FBakIsVUFBa0IsS0FBaUIsRUFBRSxTQUEyQjtRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBQ0wseUJBQUM7QUFBRCxDQUFDOztBQUNEO0lBS0ksMkJBQW1CLElBQVksRUFBRSxVQUFzQixFQUFTLE9BQXlCLEVBQVMsVUFBeUI7UUFBM0Qsd0NBQXlCO1FBQVMsOENBQXlCO1FBQXhHLFNBQUksR0FBSixJQUFJLENBQVE7UUFBaUMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBUyxlQUFVLEdBQVYsVUFBVSxDQUFlO1FBRjNILGVBQVUsR0FBOEIsSUFBSSxDQUFDO1FBQzdDLHVCQUFrQixHQUFrQixJQUFJLENBQUM7UUFFckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztRQUNsRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ00sZ0NBQUksR0FBWCxVQUFZLElBQVk7UUFDcEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ00sMENBQWMsR0FBckIsVUFBc0IsUUFBYTtRQUMvQixJQUFJLFlBQVksR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckQsWUFBWSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxJQUFJLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUM3QixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMvQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzlCLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxFQUFFLEVBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLFdBQVcsR0FBRyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNuRixJQUFJLFlBQVksR0FBRyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwRixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsRUFBRSxFQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7Z0JBQzVELElBQUksQ0FBUyxDQUFDO2dCQUNkLEVBQUUsRUFBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDOUIsQ0FBQztZQUNMLENBQUM7WUFDRCxFQUFFLEVBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsRUFBRSxFQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTywyQ0FBZSxHQUF2QixVQUF3QixZQUFvQjtRQUN4QyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsY0FBYyxDQUFDO1lBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN6RyxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBQ08sZ0RBQW9CLEdBQTVCLFVBQTZCLFlBQW9CO1FBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0wsd0JBQUM7QUFBRCxDQUFDOztBQTlGVSxnQ0FBYyxHQUFHLEdBQUcsQ0FBQztBQUNyQiw0QkFBVSxHQUFHLEdBQUcsQ0FBQztBQThGNUI7SUFBQTtRQUNZLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBQzNDLG9CQUFlLEdBQXdDLEVBQUUsQ0FBQztRQUMxRCxvQkFBZSxHQUF5QyxFQUFFLENBQUM7UUFDM0QsNEJBQXVCLEdBQTZCLEVBQUUsQ0FBQztJQTZJbkUsQ0FBQztJQTVJVSwrQkFBUSxHQUFmLFVBQWdCLElBQVksRUFBRSxVQUFzQixFQUFFLE9BQXlCLEVBQUUsVUFBeUI7UUFBcEQsd0NBQXlCO1FBQUUsOENBQXlCO1FBQ3RHLElBQUksYUFBYSxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFDLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBQ00sNENBQXFCLEdBQTVCLFVBQTZCLElBQVksRUFBRSxPQUFrQjtRQUN6RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEIsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFDTSxvQ0FBYSxHQUFwQixVQUFxQixTQUFpQjtRQUNsQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNkLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBQ00sbUNBQVksR0FBbkIsVUFBb0IsU0FBaUIsRUFBRSxZQUFvQjtRQUN2RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztZQUN6QyxFQUFFLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUM7Z0JBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ00sa0NBQVcsR0FBbEIsVUFBbUIsSUFBWTtRQUMzQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFDTSx5Q0FBa0IsR0FBekIsVUFBMEIsSUFBWSxFQUFFLFlBQTZCO1FBQTdCLG1EQUE2QjtRQUNqRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ00sNENBQXFCLEdBQTVCLFVBQTZCLElBQVk7UUFDckMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNkLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBQ00sa0NBQVcsR0FBbEIsVUFBbUIsU0FBaUIsRUFBRSxZQUFpQjtRQUNuRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBQ00scUNBQWMsR0FBckIsVUFBc0IsU0FBaUIsRUFBRSxZQUFvQjtRQUN6RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDWCxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUNPLHlDQUFrQixHQUExQixVQUEyQixhQUFnQyxFQUFFLFFBQTRCO1FBQ3JGLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN0RCxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ08sOENBQXVCLEdBQS9CLFVBQWdDLGFBQWdDLEVBQUUsUUFBNEI7UUFDMUYsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN0QixhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUNuQyxLQUFLLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsYUFBYSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ08sK0NBQXdCLEdBQWhDLFVBQWlDLGFBQWdDO1FBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN0RCxDQUFDO0lBQ0wsQ0FBQztJQUNPLDBDQUFtQixHQUEzQixVQUE0QixJQUFZLEVBQUUsWUFBcUIsRUFBRSxNQUFnQztRQUM3RixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNMLENBQUM7SUFDTSxnQ0FBUyxHQUFoQixVQUFpQixJQUFZO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDTyxxQ0FBYyxHQUF0QixVQUF1QixJQUFZLEVBQUUsSUFBK0I7UUFDaEUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMzQixFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0wsQ0FBQztJQUNPLHNDQUFlLEdBQXZCLFVBQXdCLFFBQTRCLEVBQUUsSUFBK0IsRUFBRSxRQUFnQjtRQUNuRyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixLQUFLLENBQUM7WUFDVixDQUFDO1FBQ0wsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUNPLDZDQUFzQixHQUE5QixVQUErQixJQUFZLEVBQUUsSUFBbUI7UUFDNUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMzQixFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDTCxDQUFDO0lBQ0wsbUJBQUM7QUFBRCxDQUFDOztBQUNEO0lBR0ksbUJBQW1CLElBQVksRUFBUyxPQUFlO1FBQXBDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBRmhELGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLE9BQUUsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUV2QixDQUFDO0lBQ00sc0NBQWtCLEdBQXpCO1FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDTCxnQkFBQztBQUFELENBQUM7O0FBQ0Q7SUFBOEMsMkZBQVM7SUFDbkQsa0NBQW1CLFlBQW9CLEVBQVMsU0FBaUI7UUFBakUsWUFDSSxrQkFBTSxpQkFBaUIsRUFBRSxnQkFBZ0IsR0FBRyxZQUFZLEdBQUcsY0FBYyxHQUFHLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FVM0c7UUFYa0Isa0JBQVksR0FBWixZQUFZLENBQVE7UUFBUyxlQUFTLEdBQVQsU0FBUyxDQUFRO1FBRTdELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDYixLQUFJLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUFDLEtBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO2dCQUNwQyxLQUFJLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0MsQ0FBQztZQUNELEtBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDO1FBQzVCLENBQUM7O0lBQ0wsQ0FBQztJQUNMLCtCQUFDO0FBQUQsQ0FBQyxDQWI2QyxTQUFTLEdBYXREOztBQUNEO0lBQThDLDJGQUFTO0lBQ25ELGtDQUFtQixhQUFxQixFQUFTLElBQVksRUFBUyxPQUFlO1FBQXJGLFlBQ0ksa0JBQU0sSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQVF2QjtRQVRrQixtQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUFTLFVBQUksR0FBSixJQUFJLENBQVE7UUFBUyxhQUFPLEdBQVAsT0FBTyxDQUFRO1FBRWpGLEtBQUksQ0FBQyxXQUFXLEdBQUcscUNBQXFDLENBQUM7UUFDekQsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFBQyxLQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztZQUNwQyxLQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsS0FBSSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUM7O0lBQzVCLENBQUM7SUFDTCwrQkFBQztBQUFELENBQUMsQ0FYNkMsU0FBUyxHQVd0RDs7QUFDRDtJQUEwQyx1RkFBd0I7SUFDOUQsOEJBQW1CLFlBQW9CLEVBQVMsYUFBcUI7UUFBckUsWUFDSSxrQkFBTSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsK0VBQStFLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUNySjtRQUZrQixrQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFTLG1CQUFhLEdBQWIsYUFBYSxDQUFROztJQUVyRSxDQUFDO0lBQ0wsMkJBQUM7QUFBRCxDQUFDLENBSnlDLHdCQUF3QixHQUlqRTs7QUFDRDtJQUE0Qyx5RkFBd0I7SUFDaEUsZ0NBQW1CLFlBQW9CLEVBQVMsYUFBcUI7UUFBckUsWUFDSSxrQkFBTSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsaUZBQWlGLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUN6SjtRQUZrQixrQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFTLG1CQUFhLEdBQWIsYUFBYSxDQUFROztJQUVyRSxDQUFDO0lBQ0wsNkJBQUM7QUFBRCxDQUFDLENBSjJDLHdCQUF3QixHQUluRTs7QUFDRDtJQUErQyw0RkFBUztJQUNwRCxtQ0FBbUIsWUFBb0IsRUFBUyxTQUFpQjtRQUFqRSxZQUNJLGtCQUFNLGtCQUFrQixFQUFFLGdCQUFnQixHQUFHLFlBQVksR0FBRywwQkFBMEIsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQzdHO1FBRmtCLGtCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVMsZUFBUyxHQUFULFNBQVMsQ0FBUTs7SUFFakUsQ0FBQztJQUNMLGdDQUFDO0FBQUQsQ0FBQyxDQUo4QyxTQUFTLEdBSXZEOztBQUVEO0lBQUE7UUFLVyxXQUFNLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztJQTJJM0MsQ0FBQztJQTVJRyxzQkFBa0Isc0JBQVE7YUFBMUIsY0FBK0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUUxRCxpQ0FBWSxHQUFuQixVQUFvQixHQUFRO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDTSw2QkFBUSxHQUFmLFVBQWdCLE9BQVksRUFBRSxHQUFRO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3JCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNkLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDeEIsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0QixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUNqRCxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztnQkFDekMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsUUFBUSxDQUFDO1lBQ2IsQ0FBQztZQUNELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksd0JBQXdCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RixRQUFRLENBQUM7WUFDYixDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0wsQ0FBQztJQUNTLHFDQUFnQixHQUExQixVQUEyQixHQUFRLEVBQUUsUUFBNEI7UUFDN0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUM3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDUyxnQ0FBVyxHQUFyQixVQUFzQixHQUFRLEVBQUUsTUFBVyxFQUFFLFFBQTRCO1FBQ3JFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2xELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDM0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEQsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFDUywrQkFBVSxHQUFwQixVQUFxQixLQUFVLEVBQUUsR0FBUSxFQUFFLEdBQVEsRUFBRSxRQUE0QjtRQUM3RSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNoRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDO1FBQ1gsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFDTyxpQ0FBWSxHQUFwQixVQUFxQixLQUFVLElBQWEsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxpQ0FBWSxHQUFwQixVQUFxQixLQUFVLEVBQUUsUUFBNEI7UUFDekQsSUFBSSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN2RCxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNoRixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEYsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ08sMkNBQXNCLEdBQTlCLFVBQStCLE1BQVcsRUFBRSxLQUFVLEVBQUUsUUFBNEIsRUFBRSxTQUFpQjtRQUNuRyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNULElBQUksa0JBQWtCLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5RSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2pELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQyxLQUFLLEdBQUcsSUFBSSx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzt3QkFDeEUsS0FBSyxDQUFDO29CQUNWLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNiLEtBQUssR0FBRyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLEtBQUssR0FBRyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNPLGdDQUFXLEdBQW5CLFVBQW9CLEtBQWdCLEVBQUUsT0FBWTtRQUM5QyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDOUQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDTyxpQ0FBWSxHQUFwQixVQUFxQixLQUFpQixFQUFFLEdBQVEsRUFBRSxHQUFRLEVBQUUsUUFBNEI7UUFDcEYsRUFBRSxFQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNPLGlDQUFZLEdBQXBCLFVBQXFCLFVBQXFDLEVBQUUsR0FBUTtRQUNoRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckUsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNMLGlCQUFDO0FBQUQsQ0FBQzs7QUEvSWtCLDJCQUFnQixHQUFHLE1BQU0sQ0FBQztBQUMxQiwrQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDN0Isd0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzs7Ozs7OztBQ3RXdEQ7O0FBRUEsOENBQThDLGNBQWM7O0FBRTVELCtCQUErQixpRkFBaUY7O0FBRWhIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixjQUFjO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsY0FBYztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGNBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDa0JBO0FBQUE7SUFBQTtJQW1CQSxDQUFDO0lBbEJVLHNCQUFPLEdBQWQ7UUFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNTLCtCQUFnQixHQUExQixVQUEyQixDQUFNLEVBQUUsQ0FBTTtRQUNyQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25FLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQzVCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN6RCxDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCxXQUFDO0FBQUQsQ0FBQzs7QUFDRDtJQUFBO0lBSUEsQ0FBQztJQUhVLDZCQUFPLEdBQWQ7UUFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNMLGtCQUFDO0FBQUQsQ0FBQzs7QUFFTSxJQUFJLFlBQW9CLENBQUM7QUFDaEMsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUN6QjtJQUFBO0lBeUJBLENBQUM7SUF4QmlCLGdDQUFrQixHQUFoQyxVQUFpQyxTQUFpQjtRQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUM3QyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDYSxvQ0FBc0IsR0FBcEMsVUFBcUMsUUFBYTtRQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUM7Z0JBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ2EsMEJBQVksR0FBMUIsVUFBMkIsU0FBaUI7UUFDeEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzdCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNMLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNMLG9CQUFDO0FBQUQsQ0FBQzs7QUFFRDtJQUFBO0lBdUJBLENBQUM7SUFyQkcsc0JBQVcsMEJBQU87YUFBbEIsY0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3ZGLG9CQUFJLEdBQVgsVUFBWSxNQUFXLEVBQUUsT0FBZ0I7UUFDckMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDbkMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQzlDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXhELENBQUM7SUFDTCxDQUFDO0lBQ00sbUJBQUcsR0FBVixVQUFXLElBQU87UUFDZCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ00sc0JBQU0sR0FBYixVQUFjLElBQU87UUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUNMLFlBQUM7QUFBRCxDQUFDOzs7Ozs7Ozs7Ozs7QUM1SWtEO0FBRW5ELDZDQUE2QztBQUM3QztJQUFBO1FBYVksZ0JBQVcsR0FBOEMsRUFBRSxDQUFDO0lBb0J4RSxDQUFDO0lBL0JHLHNCQUFrQixpQ0FBYzthQUFoQztZQUNJLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEdBQUcsMEVBQWtCLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDM0wsQ0FBQzs7O09BQUE7SUFDRCxzQkFBa0IsZ0NBQWE7YUFBL0I7WUFDSSxJQUFJLE9BQU8sR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDRCxzQkFBa0IsOEJBQVc7YUFBN0I7WUFDSSxJQUFJLE9BQU8sR0FBRywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7OztPQUFBO0lBR00sMENBQWdCLEdBQXZCLFVBQXdCLFlBQW9CLEVBQUUsZUFBK0M7UUFDekYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxlQUFlLENBQUM7SUFDckQsQ0FBQztJQUNNLCtCQUFLLEdBQVo7UUFDSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ00scUNBQVcsR0FBbEI7UUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2pDLEdBQUcsRUFBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDTSx3Q0FBYyxHQUFyQixVQUFzQixZQUFvQixFQUFFLElBQVk7UUFDcEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNqQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDTCxzQkFBQztBQUFELENBQUM7O0FBaENpQix3QkFBUSxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO0FBa0NwRTtJQUFBO1FBRVksZ0JBQVcsR0FBMEMsRUFBRSxDQUFDO0lBb0JwRSxDQUFDO0lBbEJVLHdDQUFlLEdBQXRCLFVBQXVCLFdBQW1CLEVBQUUsY0FBMEM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDbkQsQ0FBQztJQUNNLDhCQUFLLEdBQVo7UUFDSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ00sb0NBQVcsR0FBbEI7UUFDSSxJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELEdBQUcsRUFBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDTSxzQ0FBYSxHQUFwQixVQUFxQixXQUFtQixFQUFFLElBQVk7UUFDbEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDTCxxQkFBQztBQUFELENBQUM7O0FBckJpQix1QkFBUSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDOzs7Ozs7OztBQ3JDbEU7QUFBQTtJQUdJLDJCQUFvQixLQUF3QjtRQUF4QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQURwQyxXQUFNLEdBQUcsRUFBRSxDQUFDO0lBRXBCLENBQUM7SUFDRCxzQkFBVyxxQ0FBTTthQUFqQixjQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3ZFLHNCQUFXLG1DQUFJO2FBQWY7WUFDSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxFQUFFLEVBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3RCLEVBQUUsRUFBQyxDQUFDLEdBQUcsQ0FBQztnQkFBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1lBQy9DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsRUFBRSxFQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQ0QsVUFBZ0IsS0FBYTtZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQzs7O09BSEE7SUFJTSx5Q0FBYSxHQUFwQixVQUFxQixHQUFXO1FBQzVCLEVBQUUsRUFBQyxDQUFDLEdBQUcsQ0FBQztZQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNNLHlDQUFhLEdBQXBCLFVBQXFCLEdBQVcsRUFBRSxLQUFhO1FBQzNDLEVBQUUsRUFBQyxDQUFDLEdBQUcsQ0FBQztZQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7UUFDL0MsRUFBRSxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNSLEVBQUUsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixFQUFFLEVBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLGFBQWEsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN6QixFQUFFLEVBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQ3hDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ00sbUNBQU8sR0FBZDtRQUNJLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLEVBQUUsRUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakMsRUFBRSxFQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ00sbUNBQU8sR0FBZCxVQUFlLEtBQVU7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsRUFBRSxFQUFDLENBQUMsS0FBSyxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2xCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osR0FBRyxFQUFDLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNPLHVEQUEyQixHQUFuQyxVQUFvQyxZQUFvQjtRQUNwRCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxHQUFHLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDbkMsRUFBRSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ3hELEVBQUUsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQztnQkFBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNMLENBQUM7SUFDTCx3QkFBQztBQUFELENBQUM7O0FBakVrQiwrQkFBYSxHQUFXLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNML0I7QUFFaUM7QUFHdkQsSUFBcUIsUUFBUTtJQUFrQywyRUFBRztJQUFsRTs7SUFLQSxDQUFDO0lBQUQsZUFBQztBQUFELENBQUMsQ0FMOEQsMkNBQUcsR0FLakU7QUFIRztJQURDLDREQUFJOzBDQUNNO0FBRVg7SUFEQyw0REFBSTtxQ0FDRztBQUpTLFFBQVE7SUFENUIsaUVBQVM7R0FDVyxRQUFRLENBSzVCO3dEQUxvQixRQUFROzs7Ozs7Ozs7Ozs7Ozs7O0FDTHNCO0FBQ2hCO0FBRW5DO0lBQXlDLHNGQUFXO0lBQ2hEO2VBQ0ksaUJBQU87SUFDWCxDQUFDO0lBQ00scUNBQU8sR0FBZDtRQUNJLE1BQU0sQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNMLDBCQUFDO0FBQUQsQ0FBQyxDQVB3QywwREFBVyxHQU9uRDs7QUFDRDtJQUF3QyxxRkFBVztJQUMvQztlQUNJLGlCQUFPO0lBQ1gsQ0FBQztJQUNNLG9DQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDTCx5QkFBQztBQUFELENBQUMsQ0FQdUMsMERBQVcsR0FPbEQ7O0FBQ0Q7SUFBcUMsa0ZBQVc7SUFFNUMseUJBQVksT0FBZTtRQUEzQixZQUNJLGlCQUFPLFNBRVY7UUFERyxLQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs7SUFDM0IsQ0FBQztJQUNNLGlDQUFPLEdBQWQ7UUFDSSxNQUFNLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFDTyxxQ0FBVyxHQUFuQjtRQUNJLElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FBQyxDQWpCb0MsMERBQVcsR0FpQi9DOztBQUVEO0lBQWlDLDhFQUFXO0lBRXhDLHFCQUFZLElBQVk7UUFBeEIsWUFDSSxpQkFBTyxTQUVWO1FBREcsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O0lBQ3JCLENBQUM7SUFDTSw2QkFBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUNMLGtCQUFDO0FBQUQsQ0FBQyxDQVRnQywwREFBVyxHQVMzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQ3VDO0FBQ0k7QUFDTTtBQUNDO0FBQ1A7QUFDa0M7QUFDMUI7QUFDcUI7QUFFekU7SUFBOEIsMkVBQVk7SUFpQnRDLGtCQUFtQixJQUFZO1FBQS9CLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBR2Q7UUFKa0IsVUFBSSxHQUFKLElBQUksQ0FBUTtRQVp2QixxQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxxQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxtQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixtQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV2QyxZQUFNLEdBQXVCLEVBQUUsQ0FBQztRQUNoQyxnQkFBVSxHQUEyQixJQUFJLEtBQUssRUFBbUIsQ0FBQztRQTBIMUQsa0NBQTRCLEdBQVksS0FBSyxDQUFDO1FBNEQ5Qyw0QkFBc0IsR0FBRyxLQUFLLENBQUM7UUE5S25DLEtBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNqRCxLQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDM0QsQ0FBQztJQUNELHNCQUFXLDhCQUFRO2FBQW5CLGNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUMvQyxzQkFBVyw4QkFBUTthQUFuQixjQUFpQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDL0Msc0JBQVcsNkJBQU87YUFBbEIsY0FBK0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDdEQsc0JBQVcsMkJBQUs7YUFBaEI7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM3QixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pDLENBQUM7YUFDRCxVQUFpQixRQUFnQjtZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNqRCxDQUFDOzs7T0FKQTtJQUtELHNCQUFXLDhCQUFRO2FBQW5CLGNBQTJDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDdkUsc0JBQVcsb0NBQWM7YUFBekIsY0FBaUQsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ25GLHNCQUFXLG9DQUFjO2FBQXpCLGNBQThCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlHLHNCQUFXLCtCQUFTO2FBQXBCO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLDJFQUFnQixFQUFFLENBQUM7b0JBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFZLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxVQUFVLElBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRyxDQUFDO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUM1RSxDQUFDO1lBQ0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQztZQUNwQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFBQyxFQUFFLElBQUksSUFBSSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbEQsQ0FBQzs7O09BQUE7SUFDTSx3QkFBSyxHQUFaLFVBQWEsT0FBd0I7UUFBeEIseUNBQXdCO1FBQ2pDLDREQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3ZGLEVBQUUsQ0FBQyxDQUFDLDREQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUNTLHlDQUFzQixHQUFoQztRQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDUyw4Q0FBMkIsR0FBckM7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUNTLHlDQUFzQixHQUFoQyxVQUFpQyxJQUFZO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUNoRSxDQUFDO0lBQ1Msd0NBQXFCLEdBQS9CLFVBQWdDLElBQVk7UUFDeEMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNoRCxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ00saUNBQWMsR0FBckIsY0FBbUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0MsK0JBQVksR0FBbkIsY0FBaUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEQsc0JBQVcsZ0NBQVU7YUFBckIsY0FBbUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2FBQ2pFLFVBQXNCLEdBQVk7WUFDOUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDakQsQ0FBQzs7O09BTGdFO0lBTWpFLHNCQUFXLGdDQUFVO2FBQXJCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzthQUNqRSxVQUFzQixHQUFZO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztZQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQy9DLENBQUM7OztPQUxnRTtJQU1qRSxzQkFBVyxpQ0FBVzthQUF0QjtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRSxDQUFDO2FBQ0QsVUFBdUIsS0FBYTtZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQzs7O09BSEE7SUFJRCxzQkFBVyw4QkFBUTthQUFuQixjQUFpQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDN0QsVUFBb0IsR0FBWTtZQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQzs7O09BTjREO0lBT25ELGtDQUFlLEdBQXpCLGNBQThCLENBQUM7SUFDL0Isc0JBQVcsZ0NBQVU7YUFBckIsY0FBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBQzs7O09BQUE7SUFDOUYsc0JBQVcsOEJBQVE7YUFBbkIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQzdELFVBQW9CLEtBQWM7WUFDOUIsRUFBRSxFQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQzs7O09BTDREO0lBTW5ELGtDQUFlLEdBQXpCO1FBQ0ksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0Qsc0JBQWMsd0JBQUU7YUFBaEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDaEQsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3JDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNoRCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEUsQ0FBQzs7O09BQUE7SUFDUyw0QkFBUyxHQUFuQjtRQUNJLGlCQUFNLFNBQVMsV0FBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELHNCQUFXLDJCQUFLO2FBQWhCO1lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQzthQUVELFVBQWlCLFFBQWE7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQzlDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsS0FBSyxDQUFDO1FBQzlDLENBQUM7OztPQVJBO0lBU0Qsc0JBQVcsNkJBQU87YUFBbEIsY0FBK0IsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDMUQsVUFBbUIsUUFBZ0I7WUFDL0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxDQUFDOzs7T0FMeUQ7SUFNaEQsNkJBQVUsR0FBcEIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMzRyw2QkFBVSxHQUFwQixVQUFxQixRQUFnQjtRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDTSwwQkFBTyxHQUFkLGNBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakQsNEJBQVMsR0FBaEIsVUFBaUIsWUFBNEI7UUFBNUIsa0RBQTRCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0Qsc0JBQVcsdUNBQWlCO2FBQTVCLGNBQXlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3JFLHNCQUFXLGtDQUFZO2FBQXZCLGNBQW9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzdHLDJCQUFRLEdBQWYsVUFBZ0IsS0FBa0I7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ08saUNBQWMsR0FBdEIsVUFBdUIsWUFBcUI7UUFDeEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFDUyxtQ0FBZ0IsR0FBMUIsVUFBMkIsTUFBMEI7UUFDakQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksbUVBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDTCxDQUFDO0lBQ1MsbUNBQWdCLEdBQTFCO1FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDUyxnQ0FBYSxHQUF2QjtRQUNJLE1BQU0sQ0FBQyxJQUFJLG1FQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVTLDhCQUFXLEdBQXJCLFVBQXNCLFFBQWE7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ1Msb0NBQWlCLEdBQTNCLFVBQTRCLFFBQWE7UUFDckMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFDTywrQkFBWSxHQUFwQjtRQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNsRixDQUFDO0lBQ08sK0JBQVksR0FBcEIsVUFBcUIsUUFBYTtRQUM5QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQztJQUNTLGdDQUFhLEdBQXZCLFVBQXdCLEdBQVEsSUFBUyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1Qyw4QkFBVyxHQUFyQixVQUFzQixHQUFRLElBQVMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsaUNBQWMsR0FBeEIsY0FBNkIsQ0FBQztJQUNwQixnQ0FBYSxHQUF2QixVQUF3QixRQUFnQjtRQUNwQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQUMsSUFBSTtZQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFDRCxXQUFXO0lBQ1gsdUNBQW9CLEdBQXBCLFVBQXFCLFFBQWE7UUFDOUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxpQkFBaUI7SUFDakIsb0NBQWlCLEdBQWpCLGNBQThCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hELGVBQUM7QUFBRCxDQUFDLENBdk82QixtRUFBWSxHQXVPekM7O0FBQ0QsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUU7SUFDL0YsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFO0lBQ2hFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7Ozs7Ozs7Ozs7QUNuUDlKLElBQUksU0FBUyxHQUFHO0lBQ25CLFdBQVcsRUFBRSxFQUFFO0lBQ2YsTUFBTSxFQUFFO1FBQ0osSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1FBQ3pFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQztBQUVLLElBQUksa0JBQWtCLEdBQUc7SUFDNUIsSUFBSSxFQUFFLFNBQVM7SUFDZixNQUFNLEVBQUUsRUFBRTtJQUNWLElBQUksRUFBRSxTQUFTO0lBQ2YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDO0lBQ3BFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEVBQUU7SUFDeEMsU0FBUyxFQUFFLFlBQVk7SUFDdkIsR0FBRyxFQUFFLFFBQVE7SUFDYixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0lBQ3hFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBRWpELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3pFLE9BQU8sRUFBRSxFQUFFO0lBQ1gsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO0lBQ25DLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7SUFDL0IsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtJQUN2QyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7SUFDNUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDeEQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3hGLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO0lBQ3pELElBQUksRUFBRSxFQUFFO0lBQ1IsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsbUJBQW1CO1FBQzVDLE1BQU0sRUFBRTtZQUNKLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRTtTQUMxRjtLQUNKO0NBQ0osQ0FBQztBQUVGLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQ3ZDOEI7QUFFekU7SUFvREksbUJBQVksS0FBVSxFQUFFLElBQW1CO1FBQW5CLGtDQUFtQjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNkVBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsRUFBRSxFQUFDLElBQUksQ0FBQztZQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBdERhLHFCQUFXLEdBQXpCLFVBQTBCLFFBQTJCO1FBQ2pELElBQUksS0FBSyxHQUFxQixFQUFFLENBQUM7UUFDakMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ2Esb0JBQVUsR0FBeEIsVUFBeUIsS0FBdUIsRUFBRSxRQUEyQjtRQUN6RSxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVMsS0FBSztZQUN2QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBQ0YsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLEtBQWMsRUFBRSxXQUFvQjtZQUFFLGVBQXFCO2lCQUFyQixVQUFxQixFQUFyQixxQkFBcUIsRUFBckIsSUFBcUI7Z0JBQXJCLDhCQUFxQjs7WUFDaEYsSUFBSSxNQUFNLEdBQUcsV0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsSUFBSSxZQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxTQUFNLEtBQUssRUFBQyxDQUFDO1lBQzlFLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQztnQkFBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDakMsQ0FBQztZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7O1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDYSxpQkFBTyxHQUFyQixVQUFzQixLQUF1QixFQUFFLE1BQWtCO1FBQzdELEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNMLENBQUM7SUFDYSxpQkFBTyxHQUFyQixVQUFzQixLQUF1QjtRQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNhLHdCQUFjLEdBQTVCLFVBQTZCLEtBQXVCLEVBQUUsR0FBUTtRQUMxRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztZQUNyQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFTTSwyQkFBTyxHQUFkLGNBQTJCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hELHNCQUFXLDhCQUFPO2FBQWxCLGNBQTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDckUsc0JBQVcsK0JBQVE7YUFBbkIsY0FBNEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN4RSxVQUFvQixLQUF3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQURMO0lBRXhFLHNCQUFXLDRCQUFLO2FBQWhCLGNBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUNsRCxVQUFpQixRQUFhO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1lBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUM7OztPQVZpRDtJQVdsRCxzQkFBVyw4QkFBTzthQUFsQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzFFLHNCQUFXLDJCQUFJO2FBQWY7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMzQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUNELFVBQWdCLE9BQWU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLENBQUM7OztPQUhBO0lBSU0sMkJBQU8sR0FBZCxVQUFlLEtBQVU7UUFDckIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzlDLFNBQVMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUNRLGtDQUFjLEdBQXZCLFVBQXdCLEdBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFXLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsR0FBQztJQUN4RyxrQ0FBYyxHQUF0QixVQUF1QixHQUFRLEVBQUUsU0FBd0I7UUFDckQsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDdkQsRUFBRSxFQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNMLGdCQUFDO0FBQUQsQ0FBQzs7QUF6R2lCLG1CQUFTLEdBQUcsR0FBRyxDQUFDO0FBZ0RmLHVCQUFhLEdBQUcsQ0FBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRGhEO0FBQ0o7QUFFRTtBQUNhO0FBQ2Y7QUFDYztBQUNJO0FBRXREO0lBQXdDLHFGQUFRO0lBYzVDLDRCQUFZLElBQVk7UUFBeEIsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FPZDtRQXJCTyx5QkFBbUIsR0FBcUIsSUFBSSxDQUFDO1FBRTdDLG9CQUFjLEdBQWMsSUFBSSw2REFBUyxDQUFDLE9BQU8sRUFBRSwwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUlsRyxvQkFBYyxHQUFxQixJQUFJLENBQUM7UUFDeEMsaUNBQTJCLEdBQVEsSUFBSSxDQUFDO1FBR3pDLDBCQUFvQixHQUFZLElBQUksQ0FBQztRQUNwQyx1QkFBaUIsR0FBVyxNQUFNLENBQUM7UUEyQm5DLHNCQUFnQixHQUFZLEtBQUssQ0FBQztRQXZCdEMsS0FBSSxDQUFDLGFBQWEsR0FBRyw2REFBUyxDQUFDLFdBQVcsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNqRCxLQUFJLENBQUMsWUFBWSxHQUFHLEtBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxLQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNyRCxLQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksR0FBRyxLQUFJLENBQUM7UUFDaEIsS0FBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLEtBQXVCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQzs7SUFDbEgsQ0FBQztJQUNELHNCQUFXLHlDQUFTO2FBQXBCO1lBQ0ksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMzRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUVELHNCQUFXLCtDQUFlO2FBQTFCO1lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlHLENBQUM7OztPQUFBO0lBQ1Msd0NBQVcsR0FBckIsVUFBc0IsR0FBUTtRQUMxQixNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFDUywyQ0FBYyxHQUF4QixjQUE4QyxNQUFNLENBQUMsSUFBSSx5RUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLHVDQUFVLEdBQXBCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFBQyxNQUFNLENBQUMsaUJBQU0sVUFBVSxXQUFFLENBQUM7UUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVTLHVDQUFVLEdBQXBCLFVBQXFCLFFBQWdCO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLGlCQUFNLFVBQVUsWUFBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQztZQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7Z0JBQzdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ1Msd0NBQVcsR0FBckIsVUFBc0IsUUFBYTtRQUMvQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFBQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsUUFBUSxDQUFDO1FBQzFELGlCQUFNLFdBQVcsWUFBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ1MsMENBQWEsR0FBdkIsVUFBd0IsR0FBUTtRQUM1QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUFDLE1BQU0sQ0FBQyxpQkFBTSxhQUFhLFlBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUNTLHdDQUFXLEdBQXJCLFVBQXNCLEdBQVE7UUFDMUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFBQyxNQUFNLENBQUMsaUJBQU0sV0FBVyxZQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDUyw4Q0FBaUIsR0FBM0IsVUFBNEIsR0FBUTtRQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFDUyw0Q0FBZSxHQUF6QixVQUEwQixHQUFRO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25ELEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ1MsNENBQWUsR0FBekIsVUFBMEIsR0FBUTtRQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzVDLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxzQkFBSSx1Q0FBTzthQUFYLGNBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUN4RCxVQUFZLFFBQW9CO1lBQzVCLDZEQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbkMsQ0FBQzs7O09BSnVEO0lBSzlDLDRDQUFlLEdBQXpCO1FBQ0ksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELHNCQUFJLDRDQUFZO2FBQWhCLGNBQTZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2FBQzdELFVBQWlCLFFBQWdCO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbkMsQ0FBQzs7O09BTDREO0lBTTdELHNCQUFXLHlDQUFTO2FBQXBCLGNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDakUsVUFBcUIsS0FBYTtZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLENBQUM7OztPQUpnRTtJQUtqRSxzQkFBVyw4Q0FBYzthQUF6QixjQUFzQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDM0UsVUFBMEIsS0FBYSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUUsQ0FBQzs7O09BRFA7SUFFM0Usc0JBQVcsNENBQVk7YUFBdkIsY0FBK0MsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQy9FLHNCQUFXLGlEQUFpQjthQUE1QixjQUFvRCxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFFekYsc0JBQUksOENBQWM7YUFBbEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0UsRUFBRSxFQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQy9FLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3BDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVksNkNBQWE7YUFBekIsY0FBZ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDM0csMkNBQWMsR0FBckIsY0FBbUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUMseUNBQVksR0FBbkIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsNkNBQWdCLEdBQTFCLFVBQTJCLE1BQTBCO1FBQ2pELGlCQUFNLGdCQUFnQixZQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2xELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDL0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksMkRBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDTSw0Q0FBZSxHQUF0QjtRQUNJLGlCQUFNLGVBQWUsV0FBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ08sNENBQWUsR0FBdkI7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsdUJBQXVCO1FBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNTLG9EQUF1QixHQUFqQyxjQUFzQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUkseUNBQVksR0FBWjtRQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFDTyxpREFBb0IsR0FBNUIsVUFBNkIsS0FBdUI7UUFDaEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1lBQ3BDLDZEQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDakMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUNPLG9EQUF1QixHQUEvQjtRQUNJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ08sK0NBQWtCLEdBQTFCLFVBQTJCLEtBQXVCO1FBQzlDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNPLHNDQUFTLEdBQWpCLFVBQWtCLEtBQXVCLEVBQUUsSUFBWTtRQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ08sMkNBQWMsR0FBdEIsVUFBdUIsS0FBdUI7UUFDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsOENBQWlCLEdBQWpCO1FBQ0ksaUJBQU0saUJBQWlCLFdBQUUsQ0FBQztRQUMxQixFQUFFLEVBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUNMLHlCQUFDO0FBQUQsQ0FBQyxDQXZNdUMsMkRBQVEsR0F1TS9DOztBQUVEO0lBQTBDLHVGQUFrQjtJQUd4RCw4QkFBbUIsSUFBWTtRQUEvQixZQUNJLGtCQUFNLElBQUksQ0FBQyxTQUNkO1FBRmtCLFVBQUksR0FBSixJQUFJLENBQVE7UUFGdkIsbUJBQWEsR0FBVyxDQUFDLENBQUM7O0lBSWxDLENBQUM7SUFDRCxzQkFBVywwQ0FBUTthQUFuQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDNUQsVUFBb0IsS0FBYTtZQUM3QixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDcEQsQ0FBQzs7O09BTDJEO0lBTWhFLDJCQUFDO0FBQUQsQ0FBQyxDQVp5QyxrQkFBa0IsR0FZM0Q7O0FBQ0QsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLGtCQUFrQjtJQUNoRixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFRLElBQUksTUFBTSxDQUFDLDZEQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFRLEVBQUUsS0FBVSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO0lBQy9LLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0lBQ3JGLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsRUFBRSxLQUFVLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDalAsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFDO0lBQ2xJLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUUvRSwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3JPbEY7QUFDQztBQUVyRDtJQUFBO1FBa0JZLFlBQU8sR0FBVyxPQUFPLENBQUM7SUF3QnRDLENBQUM7SUF4Q0csc0JBQVcsc0JBQVM7YUFBcEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUN0RSxTQUFTLENBQUMsY0FBYyxHQUFHO2dCQUN2QixLQUFLLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLFFBQVEsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELFFBQVEsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxRQUFRLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRyxXQUFXLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEcsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELElBQUksRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxjQUFjLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsV0FBVyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDaEUsQ0FBQztZQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQ3BDLENBQUM7OztPQUFBO0lBSUQsc0JBQVcsK0JBQVE7YUFBbkIsY0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3RELFVBQW9CLEtBQWE7WUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ25CLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDOzs7T0FOcUQ7SUFPL0MsMkJBQU8sR0FBZCxVQUFlLElBQWdCLEVBQUUsS0FBaUI7UUFBbkMsa0NBQWdCO1FBQUUsb0NBQWlCO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUvQixNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNPLGdDQUFZLEdBQXBCLFVBQXFCLEdBQVE7UUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDakQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDckIsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ0wsZ0JBQUM7QUFBRCxDQUFDOztBQXpDVSx3QkFBYyxHQUF3QixJQUFJLENBQUM7QUEwQ3REO0lBR0k7UUFGUSxvQkFBZSxHQUFXLEtBQUssQ0FBQztRQUNqQyxhQUFRLEdBQWUsRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUN4QixzQkFBVyxxQ0FBVTthQUFyQixjQUFrQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7YUFDaEUsVUFBc0IsS0FBYTtZQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUM7Z0JBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNqRCxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUM7Z0JBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNoRCxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLENBQUM7OztPQVIrRDtJQVNoRSxzQkFBVyxrQ0FBTzthQUFsQixjQUF1QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDbkQsNkJBQUssR0FBWjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDTCxvQkFBQztBQUFELENBQUM7O0FBQ0Q7SUFLSSx5QkFBbUIsVUFBa0I7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw0RUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELHNCQUFXLHVDQUFVO2FBQXJCLGNBQWtDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzthQUNoRSxVQUFzQixLQUFhO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLDJFQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLENBQUM7OztPQUwrRDtJQU16RCw2QkFBRyxHQUFWLFVBQVcsTUFBc0I7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDTyxpQ0FBTyxHQUFmLFVBQWdCLElBQW1CO1FBQy9CLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO1FBQzNDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFDTywwQ0FBZ0IsR0FBeEIsVUFBeUIsS0FBVTtRQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDekIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ08sc0NBQVksR0FBcEIsVUFBcUIsU0FBb0I7UUFDckMsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDUCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO1lBQzFGLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDUCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDTyxzQ0FBWSxHQUFwQixVQUFxQixTQUFjO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN2RyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0wsc0JBQUM7QUFBRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFId0M7QUFDSDtBQUNFO0FBQ1c7QUFDZjtBQUVwQztJQUFxQyxrRkFBSTtJQU9yQztRQUFBLFlBQ0ksaUJBQU8sU0FDVjtRQVJNLFNBQUcsR0FBVyxFQUFFLENBQUM7UUFDakIsVUFBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixlQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLGVBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkIsV0FBSyxHQUFnQixJQUFJLENBQUM7O0lBR2pDLENBQUM7SUFDTSw2QkFBRyxHQUFWO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUMxRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsR0FBRyxDQUFDLE1BQU0sR0FBRztZQUNULEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDO0lBQ00saUNBQU8sR0FBZCxjQUEyQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNuRCxzQkFBVyxvQ0FBTzthQUFsQjtZQUNJLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDekUsQ0FBQzs7O09BQUE7SUFDTSxpQ0FBTyxHQUFkLFVBQWUsSUFBUztRQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNwRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFDTSwrQkFBSyxHQUFaO1FBQ0ksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDUyxnQ0FBTSxHQUFoQixVQUFpQixNQUFXO1FBQ3hCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQUMsUUFBUSxDQUFDO2dCQUN6QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksNkRBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0wsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDJEQUFXLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDTyxpQ0FBTyxHQUFmLFVBQWdCLE1BQWMsRUFBRSxRQUFnQjtRQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksMkRBQVcsQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNPLDRDQUFrQixHQUExQixVQUEyQixNQUFXO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMzQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNPLG1DQUFTLEdBQWpCO1FBQ0ksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNPLGtDQUFRLEdBQWhCLFVBQWlCLElBQVM7UUFDdEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDTyxrQ0FBUSxHQUFoQixVQUFpQixJQUFTO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FBQyxDQTdGb0MsbURBQUksR0E2RnhDOztBQUNELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRSxjQUFjLE1BQU0sQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7O0FDbEd2STtBQUFBO0lBQ0k7SUFBZ0IsQ0FBQztJQUNWLG1DQUFZLEdBQW5CLFVBQW9CLElBQVk7UUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7Z0JBQUMsS0FBSyxDQUFDO1lBQ2xDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDTSwrQkFBUSxHQUFmLFVBQWdCLElBQVksRUFBRSxNQUFzQjtRQUNoRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN4QixDQUFDO0lBQ00sK0JBQVEsR0FBZixVQUFnQixJQUFZLEVBQUUsTUFBc0I7UUFDaEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUNPLG1DQUFZLEdBQXBCLFVBQXFCLElBQVksRUFBRSxNQUFXO1FBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0MsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO1lBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDbkMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ3pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDZCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQy9DLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLEtBQUssRUFBRSxDQUFDO2dCQUNaLENBQUM7Z0JBQ0QsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDekQsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDdEQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixDQUFDO1FBQ0QsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDckIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDTyxrQ0FBVyxHQUFuQixVQUFvQixHQUFRO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFDTCxtQkFBQztBQUFELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVEdUM7QUFDSjtBQUNnQjtBQUNkO0FBQ2E7QUFDTTtBQU1QO0FBQ0E7QUFDdUI7QUFTekU7SUFBMEMsdUZBQUk7SUFlMUMsOEJBQW1CLElBQVksRUFBRSxLQUFvQjtRQUFwQixvQ0FBb0I7UUFBckQsWUFDSSxpQkFBTyxTQU1WO1FBUGtCLFVBQUksR0FBSixJQUFJLENBQVE7UUFUeEIsZ0JBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsY0FBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixjQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGNBQVEsR0FBVyxTQUFTLENBQUM7UUFDN0IsZUFBUyxHQUFXLE1BQU0sQ0FBQztRQUMzQixrQkFBWSxHQUFXLE1BQU0sQ0FBQztRQUU5QixjQUFRLEdBQXNCLElBQUksQ0FBQztRQUNsQyxtQkFBYSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBRy9CLEtBQUksQ0FBQyxZQUFZLEdBQUcsNkRBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDaEQsS0FBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDZFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ2pELEtBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLDZFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQzFELEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLDZFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3ZELEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5RUFBZSxFQUFFLENBQUM7O0lBQzlDLENBQUM7SUFDTSxzQ0FBTyxHQUFkLGNBQW1CLE1BQU0sQ0FBQyxzQkFBc0IsRUFBQyxDQUFDO0lBRWxELHNCQUFXLHVDQUFLO2FBQWhCLGNBQXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNsRixVQUFpQixLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BRG1CO0lBRWxGLHNCQUFXLDBDQUFRO2FBQW5CLGNBQXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDcEQsc0JBQVcsZ0RBQWM7YUFBekIsY0FBc0MsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQzthQUMxRSxVQUEwQixLQUFhLElBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBQzs7O09BREw7SUFFMUUsc0JBQVcsbURBQWlCO2FBQTVCLGNBQW9ELE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN6RixzQkFBVyw2Q0FBVzthQUF0QixjQUFtQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLFVBQXVCLEtBQWEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FETjtJQUVyRSxzQkFBVyxnREFBYzthQUF6QixjQUFpRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFFbkYsc0JBQVcseUNBQU87YUFBbEIsY0FBbUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQzlELFVBQW1CLFFBQW9CO1lBQ25DLDZEQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsQ0FBQzs7O09BSDZEO0lBSTlELHNCQUFXLDBDQUFRO2FBQW5CLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUM1RCxVQUFvQixLQUFhO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDOzs7T0FKMkQ7SUFLckQsd0NBQVMsR0FBaEI7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBQ0wsMkJBQUM7QUFBRCxDQUFDLENBL0N5QyxtREFBSSxHQStDN0M7O0FBRUQ7SUFFSSw0QkFBbUIsTUFBNEIsRUFBUyxHQUErQixFQUFFLElBQXlCO1FBQS9GLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFDbkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxzQkFBVyx3Q0FBUTthQUFuQixjQUFrQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlELHNCQUFXLHFDQUFLO2FBQWhCLGNBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDdkQsVUFBaUIsS0FBVTtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQzs7O09BSHNEO0lBSTNELHlCQUFDO0FBQUQsQ0FBQzs7QUFFRDtJQVdJLG9DQUFZLElBQXlCLEVBQUUsS0FBVTtRQVB6QyxjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFDakMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFHakMsVUFBSyxHQUE4QixFQUFFLENBQUM7UUFHekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQWRjLGdDQUFLLEdBQXBCLGNBQWlDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsMEJBQTBCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZTNGLHNCQUFXLDBDQUFFO2FBQWIsY0FBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNoRCxzQkFBVywrQ0FBTzthQUFsQixjQUF1QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDckMsc0JBQVcsNkNBQUs7YUFBaEIsY0FBcUIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQzdDLFVBQWlCLEtBQVU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0wsQ0FBQztZQUNELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDOzs7T0FiNEM7SUFjdEMsNkNBQVEsR0FBZixVQUFnQixJQUFZO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDTSw2Q0FBUSxHQUFmLFVBQWdCLElBQVksRUFBRSxRQUFhO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDaEMsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQztZQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckMsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDTSwrQ0FBVSxHQUFqQixVQUFrQixJQUFZO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDTSwrQ0FBVSxHQUFqQixVQUFrQixJQUFZLEVBQUUsUUFBZ0I7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUNELHNCQUFXLCtDQUFPO2FBQWxCO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQzs7O09BQUE7SUFDTSw4Q0FBUyxHQUFoQixjQUE2QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0lBQ3BFLCtDQUFVLEdBQWxCO1FBQ0ksSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDaEMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0wsQ0FBQztJQUNTLCtDQUFVLEdBQXBCLFVBQXFCLE1BQTRCO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDTCxpQ0FBQztBQUFELENBQUM7O0FBcEVrQixvQ0FBUyxHQUFXLENBQUMsQ0FBQztBQXNFekM7SUFBcUQsa0dBQVE7SUFrQnpELHlDQUFtQixJQUFZO1FBQS9CLFlBQ0ksa0JBQU0sSUFBSSxDQUFDLFNBSWQ7UUFMa0IsVUFBSSxHQUFKLElBQUksQ0FBUTtRQVp2QixrQkFBWSxHQUFnQyxFQUFFLENBQUM7UUFHL0MsbUJBQWEsR0FBRyxLQUFLLENBQUM7UUFDcEIsMEJBQW9CLEdBQXNDLElBQUksQ0FBQztRQUNqRSxtQkFBYSxHQUFXLFVBQVUsQ0FBQztRQUNuQyx5QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDakMsb0JBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsc0JBQWdCLEdBQVksS0FBSyxDQUFDO1FBTXJDLEtBQUksQ0FBQyxZQUFZLEdBQUcsNkRBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDaEQsS0FBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksNkVBQWlCLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDMUQsS0FBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7O0lBQ2xDLENBQUM7SUF0QmMsaURBQWlCLEdBQWhDLFVBQWlDLE1BQXVDO1FBQ3BFLElBQUksUUFBUSxHQUFHLHlFQUFlLENBQUMsYUFBYSxDQUFDO1FBQzdDLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHO1lBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQW1CTSxpREFBTyxHQUFkO1FBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxzQkFBVyxvREFBTzthQUFsQixjQUFvRCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDL0UsVUFBbUIsS0FBa0M7WUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxDQUFDOzs7T0FMOEU7SUFNdkUsZ0VBQXNCLEdBQTlCO1FBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSztZQUNwQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxVQUFVLEtBQWMsRUFBRSxXQUFvQjtZQUFFLGVBQWdDO2lCQUFoQyxVQUFnQyxFQUFoQyxxQkFBZ0MsRUFBaEMsSUFBZ0M7Z0JBQWhDLDhCQUFnQzs7WUFDdkcsSUFBSSxNQUFNLEdBQUcsV0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsSUFBSSxZQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxTQUFNLEtBQUssRUFBQyxDQUFDO1lBQzlFLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQztnQkFBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDN0IsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNELHNCQUFXLHFEQUFRO2FBQW5CLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUM1RCxVQUFvQixRQUFnQjtZQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxDQUFDOzs7T0FMMkQ7SUFNNUQsc0JBQVcsMkRBQWM7YUFBekIsY0FBc0MsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7YUFDeEUsVUFBMEIsS0FBYTtZQUNuQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxDQUFDOzs7T0FMdUU7SUFNakUsd0RBQWMsR0FBckIsVUFBc0IsTUFBNEI7UUFDOUMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQzNDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFBQyxXQUFXLElBQUksR0FBRyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDTSx3REFBYyxHQUFyQixVQUFzQixNQUE0QjtRQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkUsQ0FBQztJQUNELHNCQUFXLG9EQUFPO2FBQWxCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUM5RCxVQUFtQixRQUFvQjtZQUNuQyw2REFBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELENBQUM7OztPQUg2RDtJQUk5RCxzQkFBVywyREFBYzthQUF6QixjQUE4QixNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsSixVQUEwQixRQUFnQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQzs7O09BRDJEO0lBRWxKLHNCQUFXLDhEQUFpQjthQUE1QixjQUFpQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDL0QsbURBQVMsR0FBaEIsVUFBaUIsSUFBWSxFQUFFLEtBQW9CO1FBQXBCLG9DQUFvQjtRQUMvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxzQkFBVyx3REFBVzthQUF0QjtZQUNJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyQyxDQUFDOzs7T0FBQTtJQUNTLHNEQUFZLEdBQXRCLGNBQThELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLHlEQUFlLEdBQXpCLFVBQTBCLElBQVMsRUFBRSxJQUFZLEVBQUUsS0FBVTtRQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDUyx3REFBYyxHQUF4QixVQUF5QixRQUFhLElBQVMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLHFEQUFXLEdBQXJCLFVBQXNCLEdBQStCLEVBQUUsYUFBa0IsRUFBRSxNQUF1QjtRQUF2Qix1Q0FBdUI7UUFDOUYsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1RSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDWixhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN4QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ1MsOERBQW9CLEdBQTlCLFVBQStCLEdBQVE7SUFDdkMsQ0FBQztJQUNTLHdEQUFjLEdBQXhCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDakYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDRCxvRUFBMEIsR0FBMUI7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDckIsR0FBRyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pELElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUM5RixDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNNLG1EQUFTLEdBQWhCLFVBQWlCLFlBQTRCO1FBQTVCLGtEQUE0QjtRQUN6QyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLGlCQUFNLFNBQVMsWUFBQyxZQUFZLENBQUMsSUFBSSxjQUFjLENBQUM7SUFDM0QsQ0FBQztJQUNPLDJEQUFpQixHQUF6QixVQUEwQixZQUFxQjtRQUMzQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0MsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNoRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDL0MsR0FBRyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDMUgsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNTLGdFQUFzQixHQUFoQztRQUNJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEdBQUcsaUJBQU0sc0JBQXNCLFdBQUUsQ0FBQztJQUN4RSxDQUFDO0lBQ1MscUVBQTJCLEdBQXJDO1FBQ0ksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sR0FBRyxpQkFBTSwyQkFBMkIsV0FBRSxDQUFDO0lBQzdFLENBQUM7SUFDUyw4REFBb0IsR0FBOUIsVUFBK0IsT0FBZ0I7UUFDM0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDL0MsR0FBRyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNoRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7b0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRO1lBQ3ZGLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QscUJBQXFCO0lBQ2Qsd0RBQWMsR0FBckIsVUFBc0IsR0FBK0IsRUFBRSxNQUE0QjtRQUMvRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixRQUFRLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDeEMsUUFBUSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3BDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxRQUFRLFlBQVksZ0ZBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixRQUFTLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2hFLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ1MsNERBQWtCLEdBQTVCLFVBQTZCLEdBQStCLEVBQUUsTUFBNEI7UUFDdEYsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzlFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckUsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNTLHlEQUFlLEdBQXpCLFVBQTBCLEdBQStCLEVBQUUsTUFBNEIsSUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEksMERBQWdCLEdBQTFCLFVBQTJCLE1BQTRCO1FBQ25ELE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdkYsQ0FBQztJQUNTLGlFQUF1QixHQUFqQyxVQUFrQyxNQUE0QjtRQUMxRCxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0UsQ0FBQztJQUNTLHdEQUFjLEdBQXhCLFVBQXlCLElBQVksRUFBRSxNQUE0QjtRQUMvRCxJQUFJLENBQUMsR0FBMEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ1Msd0RBQWMsR0FBeEIsVUFBeUIsSUFBWSxFQUFFLE1BQTRCO1FBQy9ELElBQUksQ0FBQyxHQUEwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUNTLDBEQUFnQixHQUExQixVQUEyQixJQUFZLEVBQUUsTUFBNEI7UUFDakUsSUFBSSxDQUFDLEdBQTRCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ1MsaUVBQXVCLEdBQWpDLFVBQWtDLFFBQTRCLEVBQUUsTUFBNEI7UUFDeEYsUUFBUSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQzVDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxFQUFFLEVBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUNTLG9EQUFVLEdBQXBCLFVBQXFCLElBQVksRUFBRSxNQUE0QjtRQUMzRCxJQUFJLENBQUMsR0FBc0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDL0IsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ1MsdURBQWEsR0FBdkIsVUFBd0IsSUFBWSxFQUFFLE1BQTRCO1FBQzlELElBQUksQ0FBQyxHQUF5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUNTLDREQUFrQixHQUE1QixVQUE2QixZQUFvQixFQUFFLElBQVk7UUFDM0QsTUFBTSxDQUFXLHlFQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUNTLHdEQUFjLEdBQXhCLFVBQXlCLFFBQWEsRUFBRSxHQUErQjtRQUNuRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQy9ELENBQUM7SUFDRCxzREFBWSxHQUFaLFVBQWEsR0FBK0IsRUFBRSxXQUFnQjtRQUMxRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDO1lBQUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNkLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN0RCxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNMLHNDQUFDO0FBQUQsQ0FBQyxDQXJRb0QsMkRBQVEsR0FxUTVEOztBQUVELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFO0lBQzFHLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsSUFBSSxNQUFNLENBQUMsNkRBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQVEsRUFBRSxLQUFVLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7SUFDL0ssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUMsRUFBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQy9MLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBQztJQUN0TCxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtJQUNyRixFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFRLEVBQUUsS0FBVSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2pQLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFFNUwsY0FBYyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTFELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLCtCQUErQixFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBQztJQUN2SCwwQkFBMEI7SUFDMUIsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxJQUFJLE1BQU0sQ0FBQyw2REFBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBUSxFQUFFLEtBQVUsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztJQUMvSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRTtJQUN0RSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDN0csRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUN2RixjQUFjLE1BQU0sQ0FBQyxJQUFJLCtCQUErQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQ2xiUztBQUVsRDtBQUNLO0FBRzdDO0lBQWtDLCtFQUFJO0lBMEJsQyxzQkFBbUIsSUFBWTtRQUEvQixZQUNJLGlCQUFPLFNBR1Y7UUFKa0IsVUFBSSxHQUFKLElBQUksQ0FBUTtRQW5CdkIscUJBQWUsR0FBb0IsSUFBSSxDQUFDO1FBRXpDLGVBQVMsR0FBVyxFQUFFLENBQUM7UUFFdEIsa0JBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsMkJBQXFCLEdBQVksSUFBSSxDQUFDO1FBQ3RDLHVCQUFpQixHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFdBQUssR0FBVyxFQUFFLENBQUM7UUFDbEIsc0JBQWdCLEdBQVcsRUFBRSxDQUFDO1FBQzlCLHNCQUFnQixHQUFXLENBQUMsQ0FBQztRQUM5QixZQUFNLEdBQVcsQ0FBQyxDQUFDO1FBV3RCLEtBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVDLEtBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7SUFDdEIsQ0FBQztJQTVCYywwQkFBYSxHQUE1QjtRQUNJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUEyQkQsc0JBQVcsaUNBQU87YUFBbEIsY0FBZ0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQy9DLHNCQUFXLGlDQUFPO2FBQWxCLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUMzRCxVQUFtQixHQUFZO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDckQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBWSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDTCxDQUFDOzs7T0FUMEQ7SUFVM0Qsc0JBQVcsbUNBQVM7YUFBcEIsY0FBa0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNyRyxzQkFBVyxvQ0FBVTthQUFyQixjQUEwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDeEMsc0JBQVcsc0NBQVk7YUFBdkIsY0FBb0MsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzdELGdDQUFTLEdBQWhCLFVBQWlCLFlBQTRCO1FBQTVCLGtEQUE0QjtRQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFBQyxDQUFDO0lBQ3pFLHNCQUFXLDJDQUFpQjthQUE1QixjQUF5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDcEQsc0JBQVcsa0NBQVE7YUFBbkIsY0FBaUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ2hELHNCQUFXLGtDQUFRO2FBQW5CLGNBQWlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNoRCxzQkFBVyxvQ0FBVTthQUFyQixjQUFtQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDbEQsc0JBQVcsNEJBQUU7YUFBYixjQUEwQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ2hELHNCQUFXLDBDQUFnQjthQUEzQixjQUF5QyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzthQUM3RSxVQUE0QixLQUFjO1lBQ3RDLEVBQUUsRUFBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUMxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLEVBQUUsRUFBQyxJQUFJLENBQUMsK0JBQStCLENBQUM7Z0JBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDcEYsQ0FBQzs7O09BTDRFO0lBTTdFLHNCQUFXLHFDQUFXO2FBQXRCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2FBQ2xFLFVBQXVCLEdBQVc7WUFDOUIsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN2RCxDQUFDOzs7T0FMaUU7SUFNbEUsc0JBQVcscUNBQVc7YUFBdEIsY0FBbUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7YUFDbEUsVUFBdUIsR0FBVztZQUM5QixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7OztPQUxpRTtJQU0zRCw0QkFBSyxHQUFaLFVBQWEsT0FBd0I7UUFBeEIseUNBQXdCO0lBQUksQ0FBQztJQUMxQyw4QkFBTyxHQUFQLFVBQVEsUUFBcUI7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDckIsRUFBRSxFQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQVksUUFBUSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELHNCQUFXLGdDQUFNO2FBQWpCLGNBQStCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDL0MsbUNBQVksR0FBdEIsVUFBdUIsUUFBb0I7UUFDdkMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNTLGdDQUFTLEdBQW5CLGNBQXdCLENBQUM7SUFDZixpQ0FBVSxHQUFwQixjQUF5QixDQUFDO0lBQ25CLG1DQUFZLEdBQW5CLFVBQW9CLE1BQXNCO1FBQ3RDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7WUFBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksb0VBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxXQUFXO0lBQ0osMkNBQW9CLEdBQTNCLFVBQTRCLFFBQWE7SUFDekMsQ0FBQztJQUNNLG1DQUFZLEdBQW5CO0lBQ0EsQ0FBQztJQUNNLHNDQUFlLEdBQXRCLFVBQXVCLEtBQWE7UUFDaEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNNLGlEQUEwQixHQUFqQyxjQUFzQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5Qyx3Q0FBaUIsR0FBeEIsY0FBNEIsQ0FBQztJQUN0QixzQ0FBZSxHQUF0QixjQUEwQixDQUFDO0lBQzNCLG1CQUFtQjtJQUNaLGdDQUFTLEdBQWhCO1FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQTRCLElBQUksQ0FBQyxJQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFDTCxtQkFBQztBQUFELENBQUMsQ0ExR2lDLG1EQUFJOztBQUNuQiw0QkFBZSxHQUFHLEdBQUcsQ0FBQztBQTBHekMsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsc0JBQXNCO0lBQ3JILEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEhoRztBQUMwRTtBQUVqRjtBQUNtQjtBQUNDO0FBQ0g7QUFFQztBQUVmO0FBQzJCO0FBQ1U7QUFFekU7SUFBaUMsOEVBQUk7SUFxRWpDLHFCQUFZLE9BQW1CO1FBQW5CLHdDQUFtQjtRQUEvQixZQUNJLGlCQUFPLFNBNkJWO1FBbEdNLGNBQVEsR0FBVyxJQUFJLENBQUM7UUFDeEIsa0JBQVksR0FBVyxJQUFJLENBQUM7UUFDNUIsY0FBUSxHQUFXLElBQUksQ0FBQztRQUN4QixnQkFBVSxHQUFXLElBQUksQ0FBQztRQUMxQiwwQkFBb0IsR0FBWSxLQUFLLENBQUM7UUFFdEMsbUJBQWEsR0FBVyxVQUFVLENBQUM7UUFDbkMsaUNBQTJCLEdBQVksSUFBSSxDQUFDO1FBQzVDLDJCQUFxQixHQUFZLElBQUksQ0FBQztRQUN0QyxlQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLG9CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHVCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxrQkFBWSxHQUFXLEdBQUcsQ0FBQztRQUMzQix3QkFBa0IsR0FBVyxFQUFFLENBQUM7UUFDaEMscUJBQWUsR0FBVyxLQUFLLENBQUM7UUFDaEMsMEJBQW9CLEdBQVksSUFBSSxDQUFDO1FBQ3JDLHlCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQyxXQUFLLEdBQXFCLElBQUksS0FBSyxFQUFhLENBQUM7UUFDakQsY0FBUSxHQUF5QixJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUM1RCwwQkFBb0IsR0FBWSxLQUFLLENBQUM7UUFTckMsc0JBQWdCLEdBQWMsSUFBSSxDQUFDO1FBQ25DLGdCQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUNoQyxtQkFBYSxHQUFtQixFQUFFLENBQUM7UUFJbkMsMEJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLDhCQUF3QixHQUFXLElBQUksQ0FBQztRQUN4QyxnQ0FBMEIsR0FBVyxLQUFLLENBQUM7UUFDM0MsaUJBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsaUJBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsZUFBUyxHQUFZLEtBQUssQ0FBQztRQUMzQix5QkFBbUIsR0FBbUIsRUFBRSxDQUFDO1FBRXpDLCtCQUF5QixHQUFZLEtBQUssQ0FBQztRQUMzQyxlQUFTLEdBQVcsTUFBTSxDQUFDO1FBQzNCLHVCQUFpQixHQUFZLEtBQUssQ0FBQztRQUVwQyxnQkFBVSxHQUE2QyxJQUFJLG9EQUFLLEVBQXFDLENBQUM7UUFDdEcsbUJBQWEsR0FBNkMsSUFBSSxvREFBSyxFQUFxQyxDQUFDO1FBQ3pHLDBCQUFvQixHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDNUksb0JBQWMsR0FBMkQsSUFBSSxvREFBSyxFQUFtRCxDQUFDO1FBQ3RJLHNCQUFnQixHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDeEksMEJBQW9CLEdBQTJELElBQUksb0RBQUssRUFBbUQsQ0FBQztRQUM1SSxxQkFBZSxHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDdkksdUJBQWlCLEdBQTJELElBQUksb0RBQUssRUFBbUQsQ0FBQztRQUN6SSxrQkFBWSxHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDcEksb0JBQWMsR0FBMkQsSUFBSSxvREFBSyxFQUFtRCxDQUFDO1FBQ3RJLHdCQUFrQixHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFFMUksbUJBQWEsR0FBMkQsSUFBSSxvREFBSyxFQUFtRCxDQUFDO1FBQ3JJLGtCQUFZLEdBQTJELElBQUksb0RBQUssRUFBbUQsQ0FBQztRQUNwSSxpQkFBVyxHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDbkksa0JBQVksR0FBMkQsSUFBSSxvREFBSyxFQUFtRCxDQUFDO1FBQ3BJLHlCQUFtQixHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDM0ksdUJBQWlCLEdBQTJELElBQUksb0RBQUssRUFBbUQsQ0FBQztRQUN6SSwyQkFBcUIsR0FBMkQsSUFBSSxvREFBSyxFQUFtRCxDQUFDO1FBQzdJLHdCQUFrQixHQUEyRCxJQUFJLG9EQUFLLEVBQW1ELENBQUM7UUFDMUksZ0JBQVUsR0FBcUIsSUFBSSxDQUFDO1FBaWxCbkMsNEJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBN2tCbkMsS0FBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDhFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ2pELEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLDhFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3pELEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDhFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3hELEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDhFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3hELEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDhFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3hELEtBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLDhFQUFpQixDQUFDLEtBQUksQ0FBQyxDQUFDO1FBRWpFLElBQUksSUFBSSxHQUFHLEtBQUksQ0FBQztRQUNoQixLQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSwyRUFBZ0IsRUFBRSxDQUFDO1FBQy9DLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFZLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFVBQVUsSUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkcsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLO1lBQzdCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztRQUNGLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSztZQUNoQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztRQUNGLEtBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLEtBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDVixLQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixLQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOztJQUN0QixDQUFDO0lBQ00sNkJBQU8sR0FBZCxjQUEyQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3QyxzQkFBVywrQkFBTTthQUFqQixjQUE4QixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDeEQsVUFBa0IsS0FBYTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QiwwRUFBa0IsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsQ0FBQztRQUNMLENBQUM7OztPQVB1RDtJQVF4RCxtQkFBbUI7SUFDWiwrQkFBUyxHQUFoQixjQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkMsa0NBQVksR0FBbkIsVUFBb0IsR0FBVyxJQUFJLE1BQU0sQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlFLHNCQUFXLHdDQUFlO2FBQTFCLGNBQXVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDakYsc0JBQVcsOEJBQUs7YUFBaEIsY0FBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN6RCxVQUFpQixLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BRE47SUFFekQsc0JBQVcsaUNBQVE7YUFBbkIsY0FBMkMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN2RSxzQkFBVyxzQ0FBYTthQUF4QixjQUFxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFDO2FBQ3hFLFVBQXlCLEtBQWEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFDOzs7T0FETjtJQUV4RSxzQkFBVyx5Q0FBZ0I7YUFBM0IsY0FBbUQsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDOzs7T0FBQTtJQUN0RixzQkFBVyxxQ0FBWTthQUF2QixjQUFvQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkksVUFBd0IsUUFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDOzs7T0FEb0Q7SUFFdkksc0JBQVcsd0NBQWU7YUFBMUIsY0FBa0QsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDOzs7T0FBQTtJQUNwRixzQkFBVyxxQ0FBWTthQUF2QixjQUFvQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkksVUFBd0IsUUFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDOzs7T0FEb0Q7SUFFdkksc0JBQVcsd0NBQWU7YUFBMUIsY0FBa0QsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDOzs7T0FBQTtJQUNwRixzQkFBVyxxQ0FBWTthQUF2QixjQUFvQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkksVUFBd0IsUUFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDOzs7T0FEb0Q7SUFFdkksc0JBQVcsd0NBQWU7YUFBMUIsY0FBa0QsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDOzs7T0FBQTtJQUNwRixzQkFBVyw4Q0FBcUI7YUFBaEMsY0FBNkMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBQzthQUN4RixVQUFpQyxLQUFhLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBQzs7O09BRE47SUFFeEYsc0JBQVcsaURBQXdCO2FBQW5DLGNBQTJELE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUV2RyxzQkFBVyx3Q0FBZTthQUExQixjQUF3QyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQzthQUMzRSxVQUEyQixLQUFjO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7OztPQUwwRTtJQU0zRSxzQkFBVyw0Q0FBbUI7YUFBOUIsY0FBMkMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7YUFDbEYsVUFBK0IsS0FBYTtZQUN4QyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7OztPQUxpRjtJQUFBLENBQUM7SUFLbEYsQ0FBQztJQUNGLHNCQUFXLHVDQUFjO2FBQXpCLGNBQThCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3BFLHNCQUFXLDhDQUFxQjthQUFoQyxjQUE2QyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQzthQUN0RixVQUFpQyxLQUFhO1lBQzFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsMEJBQTBCLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3RELElBQUksQ0FBQywwQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFDNUMsQ0FBQzs7O09BSnFGO0lBQUEsQ0FBQztJQUl0RixDQUFDO0lBQ0Ysc0JBQVcsNkJBQUk7YUFBZixjQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDcEQsVUFBZ0IsS0FBYTtZQUN6QixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDL0IsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDOzs7T0FMbUQ7SUFNcEQsc0JBQVcsNkJBQUk7YUFBZjtZQUNJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEIsQ0FBQzthQUlELFVBQWdCLElBQVM7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDUCxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMxQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQy9DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7b0JBQzFELENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQzs7O09BakJBO0lBQ1MsbUNBQWEsR0FBdkIsVUFBd0IsSUFBUyxFQUFFLEdBQVc7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQWVELHNCQUFXLGlDQUFRO2FBQW5CO1lBQ0ksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUkscUNBQVk7YUFBaEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pDLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUFhLENBQUM7WUFDcEMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyxnQ0FBTzthQUFsQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDaEUsc0JBQVcsa0NBQVM7YUFBcEI7WUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyx5Q0FBZ0I7YUFBM0I7WUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDcEMsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyxvQ0FBVzthQUF0QjtZQUNJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDL0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLENBQUM7WUFDTCxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLENBQUM7YUFDRCxVQUF1QixLQUFnQjtZQUNuQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3ZELEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUM7OztPQVRBO0lBVUQsc0JBQVcsc0NBQWE7YUFBeEI7WUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7YUFDRCxVQUF5QixLQUFhO1lBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDL0IsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDOzs7T0FMQTtJQU1NLHdDQUFrQixHQUF6QjtRQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLENBQUM7SUFDTCxDQUFDO0lBQ0Qsc0JBQVcsOEJBQUs7YUFBaEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDckMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLEdBQUcsT0FBTztRQUNuRCxDQUFDOzs7T0FBQTtJQUNNLDJCQUFLLEdBQVosVUFBYSxTQUF5QixFQUFFLGFBQTZCO1FBQXhELDRDQUF5QjtRQUFFLG9EQUE2QjtRQUNqRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNMLENBQUM7SUFDUyxpQ0FBVyxHQUFyQixVQUFzQixHQUFRLEVBQUUsSUFBUztRQUNyQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMxQixHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDckMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ1MseUNBQW1CLEdBQTdCLFVBQThCLElBQWU7UUFDekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDbEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLHNGQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7SUFDTCxDQUFDO0lBQ1Msd0NBQWtCLEdBQTVCLFVBQTZCLFFBQW1CLEVBQUUsUUFBbUI7UUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBQ00saUNBQVcsR0FBbEI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0Qsc0JBQVcsbURBQTBCO2FBQXJDO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3BDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixJQUFJLE1BQU07Z0JBQzdDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRixDQUFDOzs7T0FBQTtJQUNELHNCQUFXLG1DQUFVO2FBQXJCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ2hFLHNCQUFXLHNDQUFhO2FBQXhCLGNBQXNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3RFLHNCQUFXLHFDQUFZO2FBQXZCLGNBQXFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUM5RCxtQ0FBYSxHQUFwQixVQUFxQixLQUFjO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUNELHNCQUFXLGtDQUFTO2FBQXBCO1lBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDbkMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM5QixNQUFNLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDOzs7T0FBQTtJQUNNLCtCQUFTLEdBQWhCO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQztJQUNwRixDQUFDO0lBQ00sa0NBQVksR0FBbkI7UUFDSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDN0IsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUM3QyxDQUFDO0lBQ00sOEJBQVEsR0FBZjtRQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELHNCQUFJLCtDQUFzQjthQUExQjtZQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDOzs7T0FBQTtJQUNNLDhCQUFRLEdBQWY7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9CLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ00sc0NBQWdCLEdBQXZCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0Qsc0JBQVcsb0NBQVc7YUFBdEI7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsbUNBQVU7YUFBckI7WUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzFDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7OztPQUFBO0lBQ00sZ0NBQVUsR0FBakI7UUFDSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNMLENBQUM7SUFDRCxzQkFBVyw2Q0FBb0I7YUFBL0IsY0FBNkMsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzdFLDZDQUF1QixHQUEvQixVQUFnQyxHQUFZO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztRQUNyQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ1MsbURBQTZCLEdBQXZDLGNBQTRDLENBQUM7SUFDbkMsd0NBQWtCLEdBQTVCO1FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRyxjQUFjLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pILEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTyw4Q0FBd0IsR0FBaEMsVUFBaUMsT0FBWTtRQUN6QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3hDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUNqQixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSwyREFBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxJQUFJO2dCQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUNTLGdDQUFVLEdBQXBCO1FBQ0ksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMvQixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNTLGtDQUFZLEdBQXRCO1FBQ0ksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUNELHNCQUFXLCtDQUFzQjthQUFqQztZQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNwRSxDQUFDOzs7T0FBQTtJQUNELHNCQUFXLDZDQUFvQjthQUEvQjtZQUNJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDakUsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyxxQ0FBWTthQUF2QjtZQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMvQixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxDQUFDOzs7T0FBQTtJQUNTLHVDQUFpQixHQUEzQixVQUE0QixXQUFXO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QscUNBQWUsR0FBZixVQUFnQixXQUFXO1FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBQ0QseUNBQW1CLEdBQW5CLFVBQW9CLFFBQW1CLEVBQUUsV0FBVztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUNELHNDQUFnQixHQUFoQixVQUFpQixLQUFlLEVBQUUsV0FBVztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVNLGdDQUFVLEdBQWpCLFVBQWtCLElBQVksRUFBRSxJQUFVLEVBQUUsZUFBd0IsRUFBRSxpQkFBd0M7UUFDMUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN6RSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNTLG9DQUFjLEdBQXhCLFVBQXlCLElBQVksRUFBRSxJQUFVLEVBQUUsaUJBQTBDO1FBQ3pGLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztZQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUkseUVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLE9BQWdCLEVBQUUsUUFBYTtZQUM3RixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ3hFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELDZCQUFPLEdBQVAsVUFBUSxLQUFhO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCw2QkFBTyxHQUFQLFVBQVEsSUFBZTtRQUNuQixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxnQ0FBVSxHQUFWLFVBQVcsSUFBWTtRQUNuQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsZ0NBQVUsR0FBVixVQUFXLElBQWU7UUFDdEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDTSx1Q0FBaUIsR0FBeEIsVUFBeUIsSUFBWSxFQUFFLGVBQWdDO1FBQWhDLHlEQUFnQztRQUNuRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9ELEVBQUUsRUFBQyxZQUFZLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNNLHlDQUFtQixHQUExQixVQUEyQixLQUFlLEVBQUUsZUFBZ0M7UUFBaEMseURBQWdDO1FBQ3hFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ3hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDakUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNNLHNDQUFnQixHQUF2QixVQUF3QixPQUFpQjtRQUNyQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixFQUFFLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2xELENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTSx1Q0FBaUIsR0FBeEIsVUFBeUIsUUFBbUI7UUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ00sbUNBQWEsR0FBcEIsVUFBcUIsSUFBWTtRQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTSxxQ0FBZSxHQUF0QixVQUF1QixLQUFlO1FBQ2xDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ3hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNNLHFDQUFlLEdBQXRCLFVBQXVCLFdBQTRCO1FBQTVCLGlEQUE0QjtRQUMvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ1MsbUNBQWEsR0FBdkIsVUFBd0IsSUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLHdEQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELGtEQUE0QixHQUFwQyxVQUFxQyxJQUFZLEVBQUUsUUFBYTtRQUM1RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hELEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUN4QyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBQ08sc0RBQWdDLEdBQXhDO1FBQ0ksSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDO0lBQ0wsQ0FBQztJQUNTLDBDQUFvQixHQUE5QixVQUErQixRQUFtQixFQUFFLFFBQWE7UUFDN0QsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDTyx5Q0FBbUIsR0FBM0I7UUFDSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQztJQUNPLDZDQUF1QixHQUEvQjtRQUNJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUNsRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDTyxtQ0FBYSxHQUFyQixVQUFzQixJQUFZLEVBQUUsUUFBYSxFQUFFLFlBQXFCO1FBQ3BFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDTyxzQ0FBZ0IsR0FBeEI7UUFDSSxHQUFHLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFDTyxtQ0FBYSxHQUFyQjtRQUNJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDO0lBQ00sZ0NBQVUsR0FBakIsVUFBa0IsTUFBcUIsRUFBRSxRQUF1QixFQUFFLGtCQUFtQztRQUFuRixzQ0FBcUI7UUFBRSwwQ0FBdUI7UUFBRSwrREFBbUM7UUFDakcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0IsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3QixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2pELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLHlFQUFlLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxPQUFnQixFQUFFLFFBQWE7WUFDekYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDTSwrQkFBUyxHQUFoQixVQUFpQixRQUFnQixFQUFFLElBQVk7UUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUkseUVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsT0FBZ0IsRUFBRSxJQUFTLEVBQUUsUUFBZSxFQUFFLFFBQWE7WUFDakgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ00sMkNBQXFCLEdBQTVCLFVBQTZCLFFBQXVCO1FBQXZCLDBDQUF1QjtRQUNoRCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLHlFQUFlLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLE9BQWdCLEVBQUUsTUFBYyxFQUFFLFFBQWE7WUFDckcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ1MsZ0RBQTBCLEdBQXBDO0lBQ0EsQ0FBQztJQUNTLDZDQUF1QixHQUFqQztJQUNBLENBQUM7SUFDTyx5Q0FBbUIsR0FBM0IsVUFBNEIsUUFBbUIsRUFBRSxrQkFBMkI7UUFDeEUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ2xCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDOUIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLDBDQUFvQixHQUE1QjtRQUNJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNMLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNyRyxDQUFDO0lBQ0wsQ0FBQztJQUNPLDhDQUF3QixHQUFoQyxVQUFpQyxTQUFrQjtRQUMvQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakcsQ0FBQztJQUNMLENBQUM7SUFDTyxrREFBNEIsR0FBcEMsVUFBcUMsU0FBc0IsRUFBRSxTQUFrQjtRQUMzRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBVywwQ0FBaUI7YUFBNUIsY0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlELG1DQUFhLEdBQXJCLFVBQXNCLE9BQVk7UUFDOUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLGFBQWEsR0FBRyxJQUFJLCtEQUFVLEVBQUUsQ0FBQztRQUNyQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0QyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBQ1Msc0NBQWdCLEdBQTFCLGNBQStCLENBQUM7SUFDdEIsZ0NBQVUsR0FBcEIsY0FBeUIsQ0FBQztJQUNsQiwrQ0FBeUIsR0FBakM7UUFDSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0wsQ0FBQztJQUNPLHNEQUFnQyxHQUF4QyxVQUF5QyxRQUFtQjtRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUN2RSxDQUFDO0lBQ08sMkNBQXFCLEdBQTdCLFVBQThCLElBQVk7UUFDdEMsSUFBSSxTQUFTLEdBQUcsSUFBSSw0RUFBWSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNPLDJDQUFxQixHQUE3QixVQUE4QixJQUFZO1FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksNEVBQVksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZELEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLElBQUksNEVBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSw0RUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNPLHVDQUFpQixHQUF6QjtRQUNJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUNPLGtEQUE0QixHQUFwQztRQUNJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUNNLGlDQUFXLEdBQWxCLFVBQW1CLElBQVk7UUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDTSxpQ0FBVyxHQUFsQixVQUFtQixJQUFZLEVBQUUsUUFBYTtRQUMxQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQzlELENBQUM7SUFDRCxjQUFjO0lBQ0osb0NBQWMsR0FBeEIsVUFBeUIsS0FBVTtRQUMvQixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbkMsMkNBQTJDO1lBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ00sOEJBQVEsR0FBZixVQUFnQixJQUFZO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMzQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDTSw4QkFBUSxHQUFmLFVBQWdCLElBQVksRUFBRSxRQUFhO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxFQUFFLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNPLGtDQUFZLEdBQXBCLFVBQXFCLElBQVksRUFBRSxRQUFhO1FBQzVDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7UUFDekUsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNTLDRDQUFzQixHQUFoQyxVQUFpQyxJQUFZO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMzRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUN0RixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1FBQzNFLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ00sZ0NBQVUsR0FBakIsVUFBa0IsSUFBWTtRQUMxQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEQsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztZQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ00sZ0NBQVUsR0FBakIsVUFBa0IsSUFBWSxFQUFFLFFBQWdCO1FBQzVDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNqQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNMLENBQUM7SUFDTSxnQ0FBVSxHQUFqQixVQUFrQixJQUFZO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCwrQ0FBeUIsR0FBekIsVUFBMEIsUUFBbUIsRUFBRSxRQUFpQjtRQUM1RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCwyQ0FBcUIsR0FBckIsVUFBc0IsSUFBVyxFQUFFLFFBQWlCO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBQ0QsbUNBQWEsR0FBYixVQUFjLFFBQW1CLEVBQUUsS0FBYSxFQUFFLFdBQWdCLEVBQUUsU0FBYztRQUM5RSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0NBQWdDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDekosQ0FBQztJQUNELHFDQUFlLEdBQWYsVUFBZ0IsUUFBbUI7UUFDL0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsZ0NBQVUsR0FBVixVQUFXLEtBQWUsRUFBRSxLQUFhLEVBQUUsV0FBZ0IsRUFBRSxTQUFjO1FBQ3ZFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzdJLENBQUM7SUFDRCxrQ0FBWSxHQUFaLFVBQWEsS0FBZTtRQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0Qsc0NBQWdCLEdBQWhCLFVBQWlCLElBQVk7UUFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLDJEQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqRSxDQUFDO0lBQ0QsaUNBQVcsR0FBWCxVQUFZLElBQVk7UUFDcEIsSUFBSSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsaUNBQVcsR0FBWCxVQUFZLElBQVk7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELHFCQUFxQjtJQUNyQixnQ0FBVSxHQUFWLFVBQVcsS0FBZSxFQUFFLFNBQW1CO1FBQzNDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUNELHFDQUFlLEdBQWYsVUFBZ0IsSUFBWSxFQUFFLEtBQVUsRUFBRSxVQUFtQjtRQUN6RCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUNsQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFDTCxrQkFBQztBQUFELENBQUMsQ0FoMkJnQyxtREFBSSxHQWcyQnBDOztBQUVELDJFQUEyRTtBQUUzRSwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFRLE1BQU0sQ0FBQywwRUFBa0IsQ0FBQyxVQUFVLEVBQUUsRUFBQyxDQUFDLEVBQUU7SUFDakgsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUM7SUFDakgsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO0lBQzdILEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUFhLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdFAsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0lBQ3ZGLFVBQVUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLDhCQUE4QjtJQUN4RSxFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUN0RyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUN2Ryx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7SUFDM0csRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDN0UsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0lBQzlFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtJQUMvRCxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCO0lBQ3RILEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBQztJQUNqRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUM7SUFDakUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFDO0lBQ2pFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7OztBQ2w0QnZKO0FBQUE7SUFBQTtJQUdBLENBQUM7SUFBRCwyQkFBQztBQUFELENBQUM7O0FBRUQ7SUFHSTtJQUFnQixDQUFDO0lBQ1Ysa0NBQU8sR0FBZCxVQUFlLElBQVk7UUFDdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ3pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUN4RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7Z0JBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNPLG1DQUFRLEdBQWhCLFVBQWlCLElBQVk7UUFDekIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNaLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUIsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUM7Z0JBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDWixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNiLElBQUksSUFBSSxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDTyxrQ0FBTyxHQUFmLFVBQWdCLElBQVk7UUFDeEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ08seUNBQWMsR0FBdEIsVUFBdUIsSUFBWTtRQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDeEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU07WUFDTixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCx1QkFBQztBQUFELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekR3QztBQUNlO0FBQ0w7QUFDWDtBQUV4QztJQUNJLHlCQUFtQixLQUFVLEVBQVMsS0FBeUI7UUFBekIsb0NBQXlCO1FBQTVDLFVBQUssR0FBTCxLQUFLLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFvQjtJQUMvRCxDQUFDO0lBQ0wsc0JBQUM7QUFBRCxDQUFDOztBQUVEO0lBQXFDLGtGQUFJO0lBRXJDO1FBQUEsWUFDSSxpQkFBTyxTQUNWO1FBSE0sVUFBSSxHQUFXLEVBQUUsQ0FBQzs7SUFHekIsQ0FBQztJQUNTLHNDQUFZLEdBQXRCLFVBQXVCLElBQVk7UUFDL0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNTLDZDQUFtQixHQUE3QixVQUE4QixJQUFZO1FBQ3RDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ00sa0NBQVEsR0FBZixVQUFnQixLQUFVLEVBQUUsSUFBbUI7UUFBbkIsa0NBQW1CO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FBQyxDQWZvQyxtREFBSSxHQWV4Qzs7QUFNRDtJQUFBO0lBYUEsQ0FBQztJQVpVLDZCQUFHLEdBQVYsVUFBVyxLQUFzQjtRQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0MsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUN4RCxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsS0FBSyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCxzQkFBQztBQUFELENBQUM7O0FBRUQ7SUFBc0MsbUZBQWU7SUFDakQsMEJBQW1CLFFBQXVCLEVBQVMsUUFBdUI7UUFBdkQsMENBQXVCO1FBQVMsMENBQXVCO1FBQTFFLFlBQ0ksaUJBQU8sU0FDVjtRQUZrQixjQUFRLEdBQVIsUUFBUSxDQUFlO1FBQVMsY0FBUSxHQUFSLFFBQVEsQ0FBZTs7SUFFMUUsQ0FBQztJQUNNLGtDQUFPLEdBQWQsY0FBMkIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUNoRCxtQ0FBUSxHQUFmLFVBQWdCLEtBQVUsRUFBRSxJQUFtQjtRQUFuQixrQ0FBbUI7UUFDM0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksa0VBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLDJEQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksMkRBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUN2RCxDQUFDO0lBQ1MsOENBQW1CLEdBQTdCLFVBQThCLElBQVk7UUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7UUFDbEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7WUFDRCxNQUFNLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEYsQ0FBQztJQUNMLENBQUM7SUFDTyxtQ0FBUSxHQUFoQixVQUFpQixLQUFLO1FBQ2xCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNMLHVCQUFDO0FBQUQsQ0FBQyxDQWxDcUMsZUFBZSxHQWtDcEQ7O0FBRUQ7SUFBbUMsZ0ZBQWU7SUFDOUMsdUJBQW1CLFNBQXFCLEVBQVMsU0FBcUI7UUFBbkQseUNBQXFCO1FBQVMseUNBQXFCO1FBQXRFLFlBQ0ksaUJBQU8sU0FDVjtRQUZrQixlQUFTLEdBQVQsU0FBUyxDQUFZO1FBQVMsZUFBUyxHQUFULFNBQVMsQ0FBWTs7SUFFdEUsQ0FBQztJQUNNLCtCQUFPLEdBQWQsY0FBMkIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsZ0NBQVEsR0FBZixVQUFnQixLQUFVLEVBQUUsSUFBbUI7UUFBbkIsa0NBQW1CO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLDJEQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLDJEQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNTLDJDQUFtQixHQUE3QixVQUE4QixJQUFZO1FBQ3RDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDTCxvQkFBQztBQUFELENBQUMsQ0FwQmtDLGVBQWUsR0FvQmpEOztBQUVEO0lBQTBDLHVGQUFlO0lBQ3JELDhCQUFtQixRQUF1QixFQUFTLFFBQXVCO1FBQXZELDBDQUF1QjtRQUFTLDBDQUF1QjtRQUExRSxZQUNJLGlCQUFPLFNBQ1Y7UUFGa0IsY0FBUSxHQUFSLFFBQVEsQ0FBZTtRQUFTLGNBQVEsR0FBUixRQUFRLENBQWU7O0lBRTFFLENBQUM7SUFDTSxzQ0FBTyxHQUFkLGNBQTJCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDcEQsdUNBQVEsR0FBZixVQUFnQixLQUFVLEVBQUUsSUFBbUI7UUFBbkIsa0NBQW1CO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLDJEQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQywwRUFBa0IsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEosQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSwyREFBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsMEVBQWtCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xKLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDUyxrREFBbUIsR0FBN0IsVUFBOEIsSUFBWTtRQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUMsQ0FuQnlDLGVBQWUsR0FtQnhEOztBQUVEO0lBQW9DLGlGQUFlO0lBQy9DLHdCQUFtQixLQUFvQjtRQUFwQixvQ0FBb0I7UUFBdkMsWUFDSSxpQkFBTyxTQUNWO1FBRmtCLFdBQUssR0FBTCxLQUFLLENBQWU7O0lBRXZDLENBQUM7SUFDTSxnQ0FBTyxHQUFkLGNBQTJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDOUMsaUNBQVEsR0FBZixVQUFnQixLQUFVLEVBQUUsSUFBbUI7UUFBbkIsa0NBQW1CO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSwyREFBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDTCxxQkFBQztBQUFELENBQUMsQ0FYbUMsZUFBZSxHQVdsRDs7QUFDRDtJQUFvQyxpRkFBZTtJQUUvQztRQUFBLFlBQ0ksaUJBQU8sU0FDVjtRQUhPLFFBQUUsR0FBRyx3SEFBd0gsQ0FBQzs7SUFHdEksQ0FBQztJQUNNLGdDQUFPLEdBQWQsY0FBMkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM5QyxpQ0FBUSxHQUFmLFVBQWdCLEtBQVUsRUFBRSxJQUFtQjtRQUFuQixrQ0FBbUI7UUFDM0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksMkRBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBQ1MsNENBQW1CLEdBQTdCLFVBQThCLElBQVk7UUFDdEMsTUFBTSxDQUFDLDBFQUFrQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0wscUJBQUM7QUFBRCxDQUFDLENBZG1DLGVBQWUsR0FjbEQ7O0FBRUQsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMxRCwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzVKLCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN4SiwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3BLLCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUMzSCwrREFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7Ozs7Ozs7O0FDNUo3RyxJQUFNLE9BQU8sR0FBRztJQUNuQixPQUFPLEVBQUU7UUFDTCxhQUFhLEVBQUUsVUFBVSxRQUF1QixFQUFFLE1BQWM7WUFDNUQsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDL0MsQ0FBQztLQUNKO0NBQ0osQ0FBQzs7Ozs7OztBQ1pGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7QUNuTGdCO0FBRXREO0lBQUE7SUEyTkEsQ0FBQztJQXBOVSxnQ0FBSyxHQUFaLFVBQWEsSUFBWSxFQUFFLElBQW1CO1FBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNNLG1DQUFRLEdBQWYsVUFBZ0IsSUFBbUI7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNPLHVDQUFZLEdBQXBCLFVBQXFCLEtBQVU7UUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDTyx1Q0FBWSxHQUFwQixVQUFxQixJQUFtQjtRQUNwQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDWCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztnQkFDNUMsR0FBRyxJQUFJLFFBQVEsQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzFCLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNPLDRDQUFpQixHQUF6QixVQUEwQixTQUFvQjtRQUMxQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN2RCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7UUFDM0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzVELElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUMvRCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNPLDRDQUFpQixHQUF6QixVQUEwQixFQUFVO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUM7WUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDTyxvQ0FBUyxHQUFqQixVQUFrQixLQUFhO1FBQzNCLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNPLG9DQUFTLEdBQWpCO1FBQ0ksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUNPLHlDQUFjLEdBQXRCO1FBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ08sd0NBQWEsR0FBckI7UUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0IsRUFBRSxFQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLDhEQUFTLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTyx5Q0FBYyxHQUF0QjtRQUNJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQVksR0FBRyxDQUFDO1lBQzdCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBWSxnQ0FBRTthQUFkLGNBQTJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUN0RCwrQkFBSSxHQUFaO1FBQ0ksT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFDTyxrQ0FBTyxHQUFmLFVBQWdCLENBQVM7UUFDckIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDM0QsQ0FBQztJQUNPLG1DQUFRLEdBQWhCLFVBQWlCLENBQVM7UUFDdEIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUc7SUFDL0IsQ0FBQztJQUNPLHlDQUFjLEdBQXRCLFVBQXVCLENBQVM7UUFDNUIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDeEQsQ0FBQztJQUNPLHFDQUFVLEdBQWxCLFVBQW1CLENBQVM7UUFDeEIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBQ08scUNBQVUsR0FBbEI7UUFDSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQUMsS0FBSyxDQUFDO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxDQUFDO1lBQ1YsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQUMsS0FBSyxDQUFDO2dCQUN2RCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFBQyxLQUFLLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDbkQsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNOLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM5QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNPLDZDQUFrQixHQUExQixVQUEyQixFQUFVO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7SUFDN0MsQ0FBQztJQUNPLHVDQUFZLEdBQXBCO1FBQ0ksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNyQixFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUM7WUFBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUM7WUFBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztZQUFDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUNwRCxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQ2pELEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztZQUFDLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDMUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDO1lBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM5QyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDO1lBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUNyQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDO1lBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNPLHlDQUFjLEdBQXRCO1FBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN0QixHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztZQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDM0MsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDO1lBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUMxQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUM7WUFBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ08seUNBQWMsR0FBdEI7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLGtFQUFhLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBQ08sd0NBQWEsR0FBckI7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNPLHVDQUFZLEdBQXBCLFVBQXFCLENBQVk7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDTyx3Q0FBYSxHQUFyQixVQUFzQixHQUFXO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUMvQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztnQkFDM0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxrRUFBYSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUM1QixPQUFPLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLE9BQU8sR0FBRyxJQUFJLGtFQUFhLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUN4QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDTCx1QkFBQztBQUFELENBQUM7Ozs7Ozs7OztBQzdORDtBQUFBO0lBRUkseUVBQXlFO0lBQ3pFO0lBQ0EsQ0FBQztJQUNNLG9DQUFVLEdBQWpCLFVBQWtCLFFBQWdCLEVBQUUsTUFBaUU7UUFDakcsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsVUFBVSxHQUFHLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUMxRSxHQUFHLENBQUMsTUFBTSxHQUFHO1lBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUNNLG9DQUFVLEdBQWpCLFVBQWtCLE1BQWMsRUFBRSxNQUFZLEVBQUUsWUFBc0QsRUFBRSxRQUF1QixFQUFFLGtCQUFtQztRQUE1RCwwQ0FBdUI7UUFBRSwrREFBbUM7UUFDaEssSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUN4RSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNwRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1lBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzFELElBQUksYUFBYSxHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sR0FBRztZQUN2QixFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDMUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDTSxrQ0FBUSxHQUFmLFVBQWdCLE1BQWMsRUFBRSxJQUFVLEVBQUUsVUFBcUQ7UUFDN0YsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUc7WUFDdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ00sbUNBQVMsR0FBaEIsVUFBaUIsUUFBZ0IsRUFBRSxJQUFZLEVBQUUsV0FBdUY7UUFDcEksSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUksR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFVBQVUsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixHQUFHLENBQUMsTUFBTSxHQUFHO1lBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztZQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDVixHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7WUFDTCxDQUFDO1lBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDTSxxQ0FBVyxHQUFsQixVQUFtQixRQUFnQixFQUFFLFFBQWdCLEVBQUUsYUFBd0U7UUFDM0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUksR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDNUQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFVBQVUsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixHQUFHLENBQUMsTUFBTSxHQUFHO1lBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUM7UUFDRixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDO0lBQ0wsc0JBQUM7QUFBRCxDQUFDOztBQTdFaUIsMEJBQVUsR0FBVyxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNEbEQ7QUFDbUY7QUFJdEQ7QUFFckU7SUFBK0IsNEVBQWM7SUFHekMsbUJBQW1CLElBQWlCO1FBQWpCLGdDQUFpQjtRQUFwQyxZQUNJLGtCQUFNLElBQUksQ0FBQyxTQUNkO1FBRmtCLFVBQUksR0FBSixJQUFJLENBQWE7UUFGNUIsY0FBUSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLGlDQUEyQixHQUFXLFNBQVMsQ0FBQzs7SUFHdkQsQ0FBQztJQUNNLDJCQUFPLEdBQWQsY0FBMkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0Msc0JBQVcsMEJBQUc7YUFBZCxjQUFtQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDMUMsVUFBZSxLQUFhO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7OztPQUx5QztJQU1uQyxzQ0FBa0IsR0FBekI7UUFDSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQztRQUNWLENBQUM7SUFDTCxDQUFDO0lBQ00sMkNBQXVCLEdBQTlCO1FBQ0ksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7Z0JBQUMsUUFBUSxDQUFDO1lBQ3JGLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLEtBQUssQ0FBQztRQUNWLENBQUM7SUFDTCxDQUFDO0lBQ00sK0JBQVcsR0FBbEI7UUFDSSw0REFBYSxDQUFDLGtCQUFrQixDQUFDLDJEQUFZLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ1MsZ0NBQVksR0FBdEIsVUFBdUIsS0FBYTtJQUNwQyxDQUFDO0lBQ1Msb0NBQWdCLEdBQTFCO1FBQ0ksaUJBQU0sZ0JBQWdCLFdBQUUsQ0FBQztRQUN6QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTCxDQUFDO0lBRUwsZ0JBQUM7QUFBRCxDQUFDLENBeEM4Qiw4REFBYyxHQXdDNUM7O0FBRUQsK0RBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ25JLGNBQWMsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xEZDtBQUNnRztBQUUzRjtBQUNLO0FBQ3VCO0FBRXpFO0lBR0ksMEJBQW1CLEtBQXFCO1FBQXJCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBR2pDLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBRmxDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM5RCxDQUFDO0lBR0Qsc0JBQVcsdUNBQVM7UUFEcEIsMENBQTBDO2FBQzFDLGNBQTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUM7OztPQUFBO0lBQ2hFLHNCQUFXLHFDQUFPO2FBQWxCLGNBQWdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUMzRCxVQUFtQixHQUFZO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDOzs7T0FMMEQ7SUFNcEQsd0NBQWEsR0FBcEI7UUFDSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNNLHFDQUFVLEdBQWpCLFVBQWtCLENBQVc7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDUywyQ0FBZ0IsR0FBMUI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBQ08sbUNBQVEsR0FBaEI7UUFDSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEMsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDekMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDO0lBQ1QsQ0FBQztJQUNPLDBDQUFlLEdBQXZCO1FBQ0ksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFDLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNPLHNDQUFXLEdBQW5CLGNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSx1QkFBQztBQUFELENBQUM7O0FBRUQ7SUFBb0MsaUZBQUk7SUFtQnBDLHdCQUFtQixJQUFpQjtRQUFqQixnQ0FBaUI7UUFBcEMsWUFDSSxpQkFBTyxTQVFWO1FBVGtCLFVBQUksR0FBSixJQUFJLENBQWE7UUFiNUIsZUFBUyxHQUFZLElBQUksQ0FBQztRQUUxQixlQUFTLEdBQTRCLElBQUksQ0FBQztRQUMxQyxxQkFBZSxHQUFvQixJQUFJLENBQUM7UUFDeEMsbUJBQWEsR0FBb0IsSUFBSSxLQUFLLEVBQVksQ0FBQztRQUN2RCxzQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsb0JBQWMsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDakUsWUFBTSxHQUFtQixJQUFJLENBQUM7UUFDOUIsZUFBUyxHQUFXLEVBQUUsQ0FBQztRQUd2QixrQkFBWSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLGtCQUFZLEdBQVksSUFBSSxDQUFDO1FBR2pDLEtBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNDLEtBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw2RUFBaUIsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksR0FBRyxLQUFJLENBQUM7UUFDaEIsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLLElBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLEtBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLFVBQVUsS0FBYyxFQUFFLFdBQW9CO1lBQUUsZUFBd0I7aUJBQXhCLFVBQXdCLEVBQXhCLHFCQUF3QixFQUF4QixJQUF3QjtnQkFBeEIsOEJBQXdCOztZQUNoRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixPQUFyQixJQUFJLEdBQWtCLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxTQUFLLEtBQUssR0FBRTtRQUNyRSxDQUFDLENBQUM7O0lBQ04sQ0FBQztJQTFCYyx5QkFBVSxHQUF6QjtRQUNJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUF5QkQsc0JBQVcsZ0NBQUk7YUFBZixjQUE2QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDckQsVUFBZ0IsS0FBYztZQUMxQixFQUFFLEVBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDOzs7T0FQb0Q7SUFRckQsc0JBQVcsaUNBQUs7YUFBaEIsY0FBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN6RCxVQUFpQixRQUFnQjtZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDbEMsQ0FBQzs7O09BSHdEO0lBSXpELHNCQUFXLG9DQUFRO2FBQW5CLGNBQTJDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDaEUsa0NBQVMsR0FBaEI7UUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBNEIsSUFBSSxDQUFDLElBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUNELHNCQUFXLDhCQUFFO2FBQWIsY0FBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNoRCxzQkFBVyxtQ0FBTzthQUFsQixjQUFnQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDL0Msc0JBQVcscUNBQVM7YUFBcEI7WUFDSSxFQUFFLEVBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsRUFBRSxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksRUFBRSxHQUFnQixFQUFHLENBQUMsU0FBUyxDQUFDO3dCQUNwQyxHQUFHLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7NEJBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO29CQUNMLENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQWUsRUFBRSxDQUFDLENBQUM7b0JBQy9DLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLENBQUM7WUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUNPLDhDQUFxQixHQUE3QjtRQUNJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsRUFBRSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUNELHNCQUFXLG9DQUFRO2FBQW5CLGNBQXlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDOUQsd0NBQWUsR0FBdEIsVUFBdUIsT0FBaUI7UUFDcEMsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztZQUM1QyxJQUFJLEVBQUUsR0FBUSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLEVBQUUsRUFBQyxFQUFFLElBQUksT0FBTyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDOUIsRUFBRSxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNaLEVBQUUsRUFBa0IsRUFBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2xFLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ00sa0NBQVMsR0FBaEIsVUFBaUIsWUFBNEIsRUFBRSxrQkFBbUM7UUFBakUsa0RBQTRCO1FBQUUsK0RBQW1DO1FBQzlFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxFQUFFLEVBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDakMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ25ELGtCQUFrQixHQUFHLFFBQVEsQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ00sMkNBQWtCLEdBQXpCLFVBQTBCLElBQXNCLEVBQUUsV0FBNEI7UUFBNUIsaURBQTRCO1FBQzFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDekMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDekMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNDLEVBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQVksRUFBRSxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0Qsc0JBQVcsZ0NBQUk7YUFBZjtZQUNJLEVBQUUsRUFBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyxvQ0FBUTthQUFuQixjQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDcEYsc0JBQWMsZ0NBQUk7YUFBbEI7WUFDSSxJQUFJLEdBQUcsR0FBbUIsSUFBSSxDQUFDO1lBQy9CLE9BQU0sR0FBRyxDQUFDLE1BQU07Z0JBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNmLENBQUM7OztPQUFBO0lBQ1Msa0NBQVMsR0FBbkIsY0FBMEMsTUFBTSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLHFDQUFZLEdBQW5CO1FBQ0ksR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxFQUFFLEVBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUNELHNCQUFjLDZDQUFpQjthQUEvQixjQUE2QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDckYsc0NBQWEsR0FBdkI7UUFDSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixFQUFFLEVBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdkYsQ0FBQztJQUNELHNCQUFZLHdDQUFZO2FBQXhCLGNBQTZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDbEUsd0NBQWUsR0FBdkIsVUFBd0IsSUFBcUIsRUFBRSxLQUFlO1FBQzFELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDTyx5Q0FBZ0IsR0FBeEIsVUFBeUIsSUFBcUIsRUFBRSxLQUFjLEVBQUUsV0FBb0I7UUFBRSxlQUFvQjthQUFwQixVQUFvQixFQUFwQixxQkFBb0IsRUFBcEIsSUFBb0I7WUFBcEIsOEJBQW9COztRQUN0RyxFQUFFLEVBQUMsQ0FBQyxLQUFLLENBQUM7WUFBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEVBQUUsRUFBQyxDQUFDLFdBQVcsQ0FBQztZQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDbkMsRUFBRSxFQUFDLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFBQyxRQUFRLENBQUM7WUFDdEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsV0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsSUFBSSxZQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxTQUFNLEtBQUssRUFBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQztZQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUM7O0lBQ2xCLENBQUM7SUFDTyxxQ0FBWSxHQUFwQixVQUFxQixPQUFpQixFQUFFLEtBQWE7UUFDakQsRUFBRSxFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxHQUFlLE9BQU8sQ0FBQztZQUM1QixDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbkIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDaEIsRUFBRSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0wsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osRUFBRSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNYLElBQUksQ0FBQyxHQUFpQixPQUFPLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsT0FBTyxDQUFDLDRCQUE0QixHQUFHLGNBQWMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRyxPQUFPLENBQUMsK0JBQStCLEdBQUcsY0FBYyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFDTyx3Q0FBZSxHQUF2QixVQUF3QixPQUFpQjtRQUNyQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNsQixFQUFFLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUNPLG1EQUEwQixHQUFsQyxVQUFtQyxPQUFZO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsRUFBRSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUNPLHlEQUFnQyxHQUF4QyxVQUF5QyxPQUFZO1FBQ2pELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ08sNkNBQW9CLEdBQTVCLFVBQTZCLE9BQVk7UUFDckMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQztZQUNWLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNPLGtDQUFTLEdBQWpCO1FBQ0ksSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFDM0MsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7WUFDN0MsSUFBSSxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsRSxFQUFFLEVBQUMsUUFBUSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxzQkFBVywwQ0FBYzthQUF6QjtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDckIsRUFBRSxFQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDaEUsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyxtQ0FBTzthQUFsQixjQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDM0QsVUFBbUIsS0FBYztZQUM3QixFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQzs7O09BTDBEO0lBTWpELHlDQUFnQixHQUExQjtJQUVBLENBQUM7SUFDRCxzQkFBVyxxQ0FBUzthQUFwQixjQUFtQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDMUcseUNBQWdCLEdBQXZCLFVBQXdCLGlCQUE0QjtRQUNoRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFpQixDQUFDO2dCQUFDLFFBQVEsQ0FBQztZQUNyRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQy9DLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDTSxtQ0FBVSxHQUFqQixVQUFrQixPQUFpQixFQUFFLEtBQWtCO1FBQWxCLGlDQUFpQixDQUFDO1FBQ25ELEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNMLENBQUM7SUFDTSxvQ0FBVyxHQUFsQixVQUFtQixRQUFzQixFQUFFLEtBQWtCO1FBQWxCLGlDQUFpQixDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDTSxpQ0FBUSxHQUFmLFVBQWdCLEtBQWlCLEVBQUUsS0FBa0I7UUFBbEIsaUNBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNNLHVDQUFjLEdBQXJCLFVBQXNCLFlBQW9CLEVBQUUsSUFBWTtRQUNwRCxJQUFJLFFBQVEsR0FBRyx5RUFBZSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ00sb0NBQVcsR0FBbEIsVUFBbUIsSUFBWTtRQUMzQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ1MsdUNBQWMsR0FBeEIsVUFBeUIsSUFBWTtRQUNqQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNNLHNDQUFhLEdBQXBCLFVBQXFCLE9BQWlCO1FBQ2xDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1osR0FBRyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsRUFBRSxFQUFDLEVBQUUsQ0FBQyxPQUFPLElBQTJCLEVBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNyRixDQUFDO1lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNNLHVDQUFjLEdBQXJCLFVBQXNCLFFBQXNCO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNNLHFDQUFZLEdBQW5CLFVBQW9CLE1BQXNCO1FBQ3RDLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7WUFBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksb0VBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDTSx3Q0FBZSxHQUF0QjtRQUNJLEdBQUcsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUU7UUFDdEMsQ0FBQztJQUNMLENBQUM7SUFDTCxxQkFBQztBQUFELENBQUMsQ0FqVG1DLG1EQUFJOztBQUNyQiwyQkFBWSxHQUFHLEdBQUcsQ0FBQztBQWtUdEMsZUFBZTtBQUNmO0lBQWdDLDZFQUFjO0lBUzFDLG9CQUFtQixJQUFpQjtRQUFqQixnQ0FBaUI7UUFBcEMsWUFDSSxrQkFBTSxJQUFJLENBQUMsU0FDZDtRQUZrQixVQUFJLEdBQUosSUFBSSxDQUFhO1FBTDVCLHNCQUFnQixHQUFXLENBQUMsQ0FBQztRQUM3QiwyQkFBcUIsR0FBWSxJQUFJLENBQUM7O0lBTTlDLENBQUM7SUFDTSw0QkFBTyxHQUFkLGNBQTJCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLDRCQUFPLEdBQWQsVUFBZSxRQUFxQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFZLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0Qsc0JBQVcsK0JBQU87YUFBbEIsY0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQzlDLHNCQUFXLG1DQUFXO2FBQXRCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2FBQ2xFLFVBQXVCLEdBQVc7WUFDOUIsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFBQyxNQUFNLENBQUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztZQUM1QixFQUFFLEVBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDO2dCQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFFLENBQUM7OztPQUxpRTtJQU1sRSxzQkFBVyxtQ0FBVzthQUF0QixjQUFtQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzthQUNsRSxVQUF1QixHQUFXO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1lBQzVCLEVBQUUsRUFBQyxJQUFJLENBQUMsMEJBQTBCLENBQUM7Z0JBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUUsQ0FBQzs7O09BTGlFO0lBTWxFLHNCQUFXLHdDQUFnQjthQUEzQixjQUF5QyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzthQUM3RSxVQUE0QixLQUFjO1lBQ3RDLEVBQUUsRUFBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQztZQUMxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLEVBQUUsRUFBQyxJQUFJLENBQUMsK0JBQStCLENBQUM7Z0JBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDcEYsQ0FBQzs7O09BTDRFO0lBTTdFLHNCQUFXLG1DQUFXO2FBQXRCLGNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2FBQ2xFLFVBQXVCLEdBQVc7WUFDOUIsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7WUFDNUIsRUFBRSxFQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQztnQkFBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMxRSxDQUFDOzs7T0FMaUU7SUFNeEQscUNBQWdCLEdBQTFCO1FBQ0ksRUFBRSxFQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztZQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFDTCxpQkFBQztBQUFELENBQUMsQ0E1QytCLGNBQWMsR0E0QzdDOztBQUVELCtEQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO0lBQ3pJLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFO0lBQzdILEVBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLGNBQWMsTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7QUMzWmxFO0FBRTlDO0lBRUksOEJBQW1CLElBQVksRUFBUyxVQUFlO1FBQXBDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxlQUFVLEdBQVYsVUFBVSxDQUFLO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBQ00sMENBQVcsR0FBbEIsVUFBbUIsUUFBbUIsRUFBRSxFQUFPO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDTSwwQ0FBVyxHQUFsQixVQUFtQixRQUFtQixFQUFFLEVBQU87UUFDM0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7WUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNNLG9DQUFLLEdBQVosVUFBYSxRQUFtQjtRQUM1QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUM7O0FBRUQ7SUFBQTtRQUVZLGtCQUFhLEdBQWdDLEVBQUUsQ0FBQztRQUVqRCx3QkFBbUIsR0FBNEQsSUFBSSxvREFBSyxFQUFvRCxDQUFDO0lBb0J4SixDQUFDO0lBbEJHLHNCQUFXLDJDQUFPO2FBQWxCLGNBQW9ELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFDekUsZ0RBQWUsR0FBdEIsVUFBdUIsVUFBZTtRQUNsQyxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNSLElBQUksR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLFlBQVksR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ00sc0NBQUssR0FBWixjQUFpQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFcEMsZ0RBQWUsR0FBdEIsVUFBdUIsUUFBbUI7UUFDdEMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDO1lBQ2xELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCw2QkFBQztBQUFELENBQUM7O0FBdkJpQiwrQkFBUSxHQUEyQixJQUFJLHNCQUFzQixFQUFFLENBQUM7Ozs7Ozs7Ozs7QUNwQjFDO0FBRWpDLElBQUksbUJBQW1CLEdBQUc7SUFDN0IsSUFBSSxFQUFFLEVBQUU7SUFDUixNQUFNLEVBQUUsZUFBZTtJQUN2QixJQUFJLEVBQUUsWUFBWTtJQUNsQixNQUFNLEVBQUUsY0FBYztJQUN0QixnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDdEUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxjQUFjO0lBQzlELFNBQVMsRUFBRSxFQUFFO0lBQ2IsR0FBRyxFQUFFLEVBQUU7SUFDUCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0lBQ3RFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtJQUU3RixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUM5RCxPQUFPLEVBQUUsY0FBYztJQUN2QixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUU7SUFDL0MsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtJQUN6QixjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtJQUN6RSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ3hFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO0lBQ3RELElBQUksRUFBRSxjQUFjO0lBQ3BCLE1BQU0sRUFBRTtRQUNKLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFlBQVk7UUFDekMsTUFBTSxFQUFFO1lBQ0osSUFBSSxFQUFFLDBCQUEwQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLHNCQUFzQjtZQUNwRixjQUFjLEVBQUUsMkNBQTJDLEVBQUUsZUFBZSxFQUFFLDZDQUE2QztTQUM5SDtLQUNKO0NBQ0osQ0FBQztBQUNGLCtEQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaENYO0FBQ0M7QUFDRDtBQUNFO0FBQ0Q7QUFDQTtBQUNEO0FBQ0M7QUFDRTtBQUNEO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1hwQztBQUFBLFNBQVM7QUFDZ0I7QUFFbEIsSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLEtBQUcsUUFBcUIsQ0FBQztBQUtWO0FBQ29DO0FBQ25CO0FBQ21DO0FBQ3ZCO0FBQ3FCO0FBQ25CO0FBQ0M7QUFDb0I7QUFLbkQ7QUFJaUI7QUFDdUQ7QUFDSDtBQUNyQjtBQUNtQjtBQUNwQjtBQUNwQztBQUNHO0FBQ1E7QUFDbUM7QUFDckI7QUFDRjtBQUNFO0FBQ1E7QUFDaEI7QUFDQTtBQUNZO0FBQ1I7QUFDSjtBQUNiO0FBSWxCO0FBQzhCO0FBQ0c7QUFFRjtBQUNnQjtBQUNtQjtBQUV6RixnREFBZ0Q7QUFDaEQsMkVBQTJFOzs7Ozs7Ozs7Ozs7Ozs7QUMxRHJEO0FBQ2dCO0FBQ2M7QUFFcEQ7SUFBb0MsaUZBQVc7SUFHM0Msd0JBQVksT0FBbUI7UUFBbkIsd0NBQW1CO1FBQS9CLFlBQ0ksa0JBQU0sT0FBTyxDQUFDLFNBRWpCO1FBTE8sbUJBQWEsR0FBMkIsRUFBRSxDQUFDO1FBSS9DLEtBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQVEsSUFBSSxZQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQTdDLENBQTZDLENBQUMsQ0FBQzs7SUFDOUYsQ0FBQztJQUNNLCtCQUFNLEdBQWI7UUFDSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFDUyxnREFBdUIsR0FBakM7UUFBQSxpQkFHQztRQUZHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQVEsSUFBSSxrREFBRyxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQXJELENBQXFELENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNTLG1EQUEwQixHQUFwQztRQUNJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0Qsc0JBQUksK0JBQUc7YUFBUDtZQUNJLE1BQU0sQ0FBQywwRUFBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLENBQUM7YUFDRCxVQUFRLEtBQVU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7O09BSEE7SUFJUyxzQ0FBYSxHQUF2QixVQUF3QixJQUFTLEVBQUUsR0FBVztRQUMxQyxpQkFBTSxhQUFhLFlBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxpQ0FBUSxHQUFSLFVBQVMsSUFBWTtRQUNqQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNqRSxNQUFNLENBQUMsaUJBQU0sY0FBYyxZQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxpQ0FBUSxHQUFSLFVBQVMsSUFBWSxFQUFFLFFBQWE7UUFDaEMsaUJBQU0sUUFBUSxZQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNMLHFCQUFDO0FBQUQsQ0FBQyxDQXZDbUMsNERBQVcsR0F1QzlDOzs7Ozs7OztBQzNDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTs7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTs7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTs7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTs7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTs7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTs7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlEQUFpRCxJQUFJO0FBQ3BJLG1DQUFtQzs7QUFFbkM7QUFDQSxZQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsaURBQWlELElBQUk7QUFDcEksbUNBQW1DOztBQUVuQztBQUNBLFlBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7Ozs7Ozs7QUNsQ0EseUM7Ozs7OztBQ0FBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRSw2QkFBNkIsZ0JBQWdCLGtCQUFrQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsNENBQTRDO0FBQ3ZFO0FBQ0EsK0JBQStCLHdCQUF3QixrQkFBa0IsRUFBRTtBQUMzRSwrQkFBK0IseUJBQXlCLEVBQUU7QUFDMUQ7QUFDQSxtQ0FBbUMsOEJBQThCO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQSxtQ0FBbUMscURBQXFEO0FBQ3hGLG1DQUFtQyxpQkFBaUI7QUFDcEQsS0FBSywwQkFBMEI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLHdDQUF3QztBQUN4QywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0dBQW9HO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLHdDQUF3QztBQUN4QywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0NBQXdDO0FBQ3hDLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLHdDQUF3QztBQUN4QywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0NBQXdDO0FBQ3hDLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3Q0FBd0M7QUFDeEMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qyx1QkFBdUI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsMEJBQTBCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QSxzQ0FBc0MsUUFBUTtBQUM5QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7OztBQ3RDQSxnQkFBZ0IsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzFFO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7O0FDNUZBLGdCQUFnQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7OztBQ2JBLGdCQUFnQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDMUU7QUFDQTtBQUNBLEdBQUc7QUFDSDtB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QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7O0FDbERBLGdCQUFnQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7O0FDeEJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJBO0FBQUEsUUFBUTtBQUN1QjtBQUUvQixlQUFlO0FBQ2dCO0FBRS9CLFVBQVU7QUFDd0I7QUFFa0I7QUFDcEQsZUFBZTtBQUM4QztBQUM3RCxnQkFBZ0I7QUFDK0M7QUFFSjtBQUNQO0FBQ0E7QUFDSjtBQUNZO0FBQ0U7QUFDVjtBQUNFO0FBQ0U7QUFDUjtBQUNnQjtBQUNaO0FBQ0k7QUFDUjtBQUNvQjtBQUNoQjtBQUNKO0FBQ2tCO0FBQ1Y7QUFDTjtBQUNKIiwiZmlsZSI6Ii4vcGFja2FnZXMvc3VydmV5LXZ1ZS9zdXJ2ZXkudnVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwidnVlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5XCIsIFtcInZ1ZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVwiXSA9IGZhY3Rvcnkocm9vdFtcIlZ1ZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXykge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMjQpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGRiNGEzZThmMWU0Mjc3OTNkYTMyIiwiZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdFtcImFzc2lnblwiXSB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcykgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7IH1cclxuICAgIHRoaXNDbGFzcy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcykgOiAoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59O1xyXG5cclxuZGVjbGFyZSB2YXIgUmVmbGVjdDtcclxuXHJcbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsImV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xyXG4gICAgY3VycmVudExvY2FsZTogXCJcIixcclxuICAgIGxvY2FsZXM6IHt9LFxyXG4gICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZSA/IHRoaXMubG9jYWxlc1t0aGlzLmN1cnJlbnRMb2NhbGVdIDogc3VydmV5U3RyaW5ncztcclxuICAgICAgICBpZiAoIWxvYyB8fCAhbG9jW3N0ck5hbWVdKSBsb2MgPSBzdXJ2ZXlTdHJpbmdzO1xyXG4gICAgICAgIHJldHVybiBsb2Nbc3RyTmFtZV07XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYWxlczogZnVuY3Rpb24gKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXMgPSBbXTtcclxuICAgICAgICByZXMucHVzaChcIlwiKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5sb2NhbGVzKSB7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcy5zb3J0KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufTtcclxuZXhwb3J0IHZhciBzdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkNvbXBsZXRlXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk90aGVyIChkZXNjcmliZSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIlRoZXJlIGlzIG5vIHZpc2libGUgcGFnZSBvciBxdWVzdGlvbiBpbiB0aGUgc3VydmV5LlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiU3VydmV5IGlzIGxvYWRpbmcuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkNob29zZS4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSBudW1lcmljLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IHN5bWJvbHMuXCIsXHJcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IHN5bWJvbHMuXCIsXHJcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBtb3JlIHRoYW4gezB9IGFuZCBsZXNzIHRoYW4gezF9IHN5bWJvbHMuXCIsXHJcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlBsZWFzZSBmaWxsIGluIGF0IGxlYXN0IHswfSByb3dzLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudHMuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IG5vIG1vcmUgdGhhbiB7MH0gdmFyaWFudHMuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZXJyb3IgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiVGhlIGZpbGUgc2l6ZSBzaG91bGQgbm90IGV4Y2VlZCB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGVudGVyIHRoZSBvdGhlciB2YWx1ZS5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiWW91ciBmaWxlIGlzIHVwbG9hZGluZy4gUGxlYXNlIHdhaXQgc2V2ZXJhbCBzZWNvbmRzIGFuZCB0cnkgYWdhaW4uXCIsXHJcbiAgICBhZGRSb3c6IFwiQWRkIHJvd1wiLFxyXG4gICAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxyXG4gICAgY2hvaWNlc19maXJzdEl0ZW06IFwiZmlyc3QgaXRlbVwiLFxyXG4gICAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlY29uZCBpdGVtXCIsXHJcbiAgICBjaG9pY2VzX3RoaXJkSXRlbTogXCJ0aGlyZCBpdGVtXCIsXHJcbiAgICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtblwiLFxyXG4gICAgbWF0cml4X3JvdzogXCJSb3dcIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVuXCJdID0gc3VydmV5U3RyaW5ncztcclxuXHJcbmlmICghU3RyaW5nLnByb3RvdHlwZVtcImZvcm1hdFwiXSkge1xyXG4gICAgU3RyaW5nLnByb3RvdHlwZVtcImZvcm1hdFwiXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC97KFxcZCspfS9nLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3NbbnVtYmVyXSAhPSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgPyBhcmdzW251bWJlcl1cclxuICAgICAgICAgICAgICAgIDogbWF0Y2hcclxuICAgICAgICAgICAgICAgIDtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwiVnVlXCIsXCJjb21tb25qczJcIjpcInZ1ZVwiLFwiY29tbW9uanNcIjpcInZ1ZVwiLFwiYW1kXCI6XCJ2dWVcIn1cbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgIHByaXZhdGUgdHlwZVZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PGFueT4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzZnVuYzogKCkgPT4gQXJyYXk8YW55PiA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjbGFzc05hbWVQYXJ0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnkgPSBudWxsO1xyXG4gICAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2NhbGl6YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBvbkdldFZhbHVlOiAob2JqOiBhbnkpID0+IGFueSA9IG51bGw7XHJcbiAgICBwdWJsaWMgb25TZXRWYWx1ZTogKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkgPT4gYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwic3RyaW5nXCI7IH1cclxuICAgIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMudHlwZVZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzVG9Vc2VHZXRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMub25HZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTsgfVxyXG4gICAgcHVibGljIGlzRGVmYXVsdFZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGVmYXVsdFZhbHVlKSA/ICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSB2YWx1ZSkgOiAhKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRWYWx1ZShvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25HZXRWYWx1ZSkgcmV0dXJuIHRoaXMub25HZXRWYWx1ZShvYmopO1xyXG4gICAgICAgIGlmKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5KSByZXR1cm4gb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XS5nZXRKc29uKCk7XHJcbiAgICAgICAgcmV0dXJuIG9ialt0aGlzLm5hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb3BlcnR5VmFsdWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmKHRoaXMuaXNMb2NhbGl6YWJsZSkgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUb1VzZVNldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5vblNldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5OyB9XHJcbiAgICBwdWJsaWMgc2V0VmFsdWUob2JqOiBhbnksIHZhbHVlOiBhbnksIGpzb25Db252OiBKc29uT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25TZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2V0VmFsdWUob2JqLCB2YWx1ZSwganNvbkNvbnYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5KSBcclxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgIGVsc2Ugb2JqW3RoaXMubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0T2JqVHlwZShvYmpUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xhc3NOYW1lUGFydCkgcmV0dXJuIG9ialR5cGU7XHJcbiAgICAgICAgcmV0dXJuIG9ialR5cGUucmVwbGFjZSh0aGlzLmNsYXNzTmFtZVBhcnQsIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmNsYXNzTmFtZVBhcnQgJiYgY2xhc3NOYW1lLmluZGV4T2YodGhpcy5jbGFzc05hbWVQYXJ0KSA8IDApID8gY2xhc3NOYW1lICsgdGhpcy5jbGFzc05hbWVQYXJ0IDogY2xhc3NOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKSByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvaWNlc2Z1bmMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMoKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDaG9pY2VzKHZhbHVlOiBBcnJheTxhbnk+LCB2YWx1ZUZ1bmM6ICgpID0+IEFycmF5PGFueT4pIHtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YUNsYXNzIHtcclxuICAgIHN0YXRpYyByZXF1aXJlZFN5bWJvbCA9ICchJztcclxuICAgIHN0YXRpYyB0eXBlU3ltYm9sID0gJzonO1xyXG4gICAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XHJcbiAgICByZXF1aXJlZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHJvcGVydGllczogQXJyYXk8YW55PiwgcHVibGljIGNyZWF0b3I6ICgpID0+IGFueSA9IG51bGwsIHB1YmxpYyBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3AgPSB0aGlzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0pO1xyXG4gICAgICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2gocHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZmluZChuYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVQcm9wZXJ0eShwcm9wSW5mbzogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcclxuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gdHlwZW9mIHByb3BJbmZvID09PSBcInN0cmluZ1wiID8gcHJvcEluZm8gOiBwcm9wSW5mby5uYW1lO1xyXG4gICAgICAgIGlmICghcHJvcGVydHlOYW1lKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHByb3BlcnR5VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIHR5cGVJbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKEpzb25NZXRhZGF0YUNsYXNzLnR5cGVTeW1ib2wpO1xyXG4gICAgICAgIGlmICh0eXBlSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHR5cGVJbmRleCArIDEpO1xyXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHR5cGVJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgdmFyIHByb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICBwcm9wLnR5cGUgPSBwcm9wZXJ0eVR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcEluZm8gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AudHlwZSA9IHByb3BJbmZvLnR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuZGVmYXVsdFZhbHVlID0gcHJvcEluZm8uZGVmYXVsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVByb3BlcnR5UmVxdWlyZWQocHJvcC5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8uY2hvaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNGdW5jID0gdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNWYWx1ZSA9IHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzICE9PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHByb3Auc2V0Q2hvaWNlcyhjaG9pY2VzVmFsdWUsIGNob2ljZXNGdW5jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8ub25HZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5vbkdldFZhbHVlID0gcHJvcEluZm8ub25HZXRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcEluZm8ub25TZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlID0gcHJvcEluZm8ub25TZXRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ID0gcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgdmFyIHM6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LmluZGV4T2YoXCJsb2NcIikgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHRydWU7ICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHByb3BJbmZvLmlzTG9jYWxpemFibGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcC5jbGFzc05hbWUgPSBwcm9wSW5mby5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmJhc2VDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuYmFzZUNsYXNzTmFtZSA9IHByb3BJbmZvLmJhc2VDbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZVBhcnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3AuY2xhc3NOYW1lUGFydCA9IHByb3BJbmZvLmNsYXNzTmFtZVBhcnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcEluZm8uYWx0ZXJuYXRpdmVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wLmFsdGVybmF0aXZlTmFtZSA9IHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lLmxlbmd0aCA9PSAwIHx8IHByb3BlcnR5TmFtZVswXSAhPSBKc29uTWV0YWRhdGFDbGFzcy5yZXF1aXJlZFN5bWJvbCkgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc2xpY2UoMSk7XHJcbiAgICAgICAgdGhpcy5tYWtlUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1ha2VQcm9wZXJ0eVJlcXVpcmVkKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkUHJvcGVydGllcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVxdWlyZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhIHtcclxuICAgIHByaXZhdGUgY2xhc3NlczogSGFzaFRhYmxlPEpzb25NZXRhZGF0YUNsYXNzPiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkNsYXNzZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4+ID0ge307XHJcbiAgICBwcml2YXRlIGNsYXNzUHJvcGVydGllczogSGFzaFRhYmxlPEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4+ID0ge307XHJcbiAgICBwcml2YXRlIGNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzOiBIYXNoVGFibGU8QXJyYXk8c3RyaW5nPj4gPSB7fTtcclxuICAgIHB1YmxpYyBhZGRDbGFzcyhuYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IEFycmF5PGFueT4sIGNyZWF0b3I6ICgpID0+IGFueSA9IG51bGwsIHBhcmVudE5hbWU6IHN0cmluZyA9IG51bGwpOiBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSBuZXcgSnNvbk1ldGFkYXRhQ2xhc3MobmFtZSwgcHJvcGVydGllcywgY3JlYXRvciwgcGFyZW50TmFtZSk7XHJcbiAgICAgICAgdGhpcy5jbGFzc2VzW25hbWVdID0gbWV0YURhdGFDbGFzcztcclxuICAgICAgICBpZiAocGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXS5wdXNoKG1ldGFEYXRhQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWV0YURhdGFDbGFzcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcmUobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcclxuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YUNsYXNzKSB7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciA9IGNyZWF0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV07XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBwcm9wZXJ0aWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBmaW5kUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSA6IEpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYocHJvcGVydGllc1tpXS5uYW1lID09IHByb3BlcnR5TmFtZSkgcmV0dXJuIHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZUNsYXNzKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbkNsYXNzZXMobmFtZTogc3RyaW5nLCBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhuYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSZXF1aXJlZFByb3BlcnRpZXMobmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzW25hbWVdO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzUmVxdWlyZWRQcm9wZXJ0aWVzW25hbWVdID0gcHJvcGVydGllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5SW5mbzogYW55KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuY3JlYXRlUHJvcGVydHkocHJvcGVydHlJbmZvKTtcclxuICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eVRvQ2xhc3MobWV0YURhdGFDbGFzcywgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eVRvQ2xhc3MobWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5maW5kKHByb3BlcnR5Lm5hbWUpICE9IG51bGwpIHJldHVybjtcclxuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaW5kZXggPSBtZXRhRGF0YUNsYXNzLnJlcXVpcmVkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgbWV0YURhdGFDbGFzcy5yZXF1aXJlZFByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XHJcbiAgICAgICAgdmFyIGNoaWxkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKG1ldGFEYXRhQ2xhc3MubmFtZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbY2hpbGRDbGFzc2VzW2ldLm5hbWVdID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZTogc3RyaW5nLCBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4sIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+KSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbmFtZV07XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFjYW5CZUNyZWF0ZWQgfHwgY2hpbGRyZW5baV0uY3JlYXRvcikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZpbmRDbGFzcyhuYW1lOiBzdHJpbmcpOiBKc29uTWV0YWRhdGFDbGFzcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3Nlc1tuYW1lXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZmlsbFByb3BlcnRpZXMobmFtZTogc3RyaW5nLCBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KSB7XHJcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcclxuICAgICAgICBpZiAobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eUNvcmUobWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzW2ldLCBsaXN0LCBsaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eUNvcmUocHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSwgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiwgZW5kSW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kSW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtpXS5uYW1lID09IHByb3BlcnR5Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgbGlzdC5wdXNoKHByb3BlcnR5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxpc3RbaW5kZXhdID0gcHJvcGVydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaWxsUmVxdWlyZWRQcm9wZXJ0aWVzKG5hbWU6IHN0cmluZywgbGlzdDogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGxpc3QsIG1ldGFEYXRhQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxSZXF1aXJlZFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25FcnJvciB7XHJcbiAgICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgYXQ6IE51bWJlciA9IC0xO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEZ1bGxEZXNjcmlwdGlvbigpIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlICsgKHRoaXMuZGVzY3JpcHRpb24gPyBcIlxcblwiICsgdGhpcy5kZXNjcmlwdGlvbiA6IFwiXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihcInVua25vd25wcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSAnXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIicgaW4gY2xhc3MgJ1wiICsgY2xhc3NOYW1lICsgXCInIGlzIHVua25vd24uXCIpO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlOiBcIjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBwcm9wZXJ0aWVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSAnLic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZywgcHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKHR5cGUsIG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGF2YWlsYWJsZTogXCI7XHJcbiAgICAgICAgdmFyIHR5cGVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiJ1wiICsgdHlwZXNbaV0ubmFtZSArIFwiJ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihiYXNlQ2xhc3NOYW1lLCBcIm1pc3Npbmd0eXBlcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBtaXNzaW5nIGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICsgcHJvcGVydHlOYW1lICsgXCInLlwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgSnNvbkluY29ycmVjdFR5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihiYXNlQ2xhc3NOYW1lLCBcImluY29ycmVjdHR5cGVwcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIGluY29ycmVjdCBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArIHByb3BlcnR5TmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihcInJlcXVpcmVkcHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgJ1wiICsgcHJvcGVydHlOYW1lICsgXCInIGlzIHJlcXVpcmVkIGluIGNsYXNzICdcIiArIGNsYXNzTmFtZSArIFwiJy5cIik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uT2JqZWN0IHtcclxuICAgIHByaXZhdGUgc3RhdGljIHR5cGVQcm9wZXJ0eU5hbWUgPSBcInR5cGVcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIHBvc2l0aW9uUHJvcGVydHlOYW1lID0gXCJwb3NcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIG1ldGFEYXRhVmFsdWUgPSBuZXcgSnNvbk1ldGFkYXRhKCk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBtZXRhRGF0YSgpIHsgcmV0dXJuIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZTsgfVxyXG4gICAgcHVibGljIGVycm9ycyA9IG5ldyBBcnJheTxKc29uRXJyb3I+KCk7XHJcbiAgICBwdWJsaWMgdG9Kc29uT2JqZWN0KG9iajogYW55KTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0pzb25PYmplY3RDb3JlKG9iaiwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9PYmplY3QoanNvbk9iajogYW55LCBvYmo6IGFueSkge1xyXG4gICAgICAgIGlmICghanNvbk9iaikgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcclxuICAgICAgICBpZiAob2JqLmdldFR5cGUpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGpzb25PYmopIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09IEpzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIG9ialtrZXldID0ganNvbk9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5maW5kUHJvcGVydHkocHJvcGVydGllcywga2V5KTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdFcnJvcihuZXcgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yKGtleS50b1N0cmluZygpLCBvYmouZ2V0VHlwZSgpKSwganNvbk9iaik7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9PYmooanNvbk9ialtrZXldLCBvYmosIGtleSwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB0b0pzb25PYmplY3RDb3JlKG9iajogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcclxuICAgICAgICBpZiAoIW9iai5nZXRUeXBlKSByZXR1cm4gb2JqO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiAoIXByb3BlcnR5LmNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0W0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eS5nZXRPYmpUeXBlKG9iai5nZXRUeXBlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9Kc29uKG9iaiwgcmVzdWx0LCBwcm9wZXJ0aWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZVRvSnNvbihvYmo6IGFueSwgcmVzdWx0OiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdmFyIGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2godGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlW2ldLCBwcm9wZXJ0eSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbHVlID0gYXJyVmFsdWUubGVuZ3RoID4gMCA/IGFyclZhbHVlIDogbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZSwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVUb09iaih2YWx1ZTogYW55LCBvYmo6IGFueSwga2V5OiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5Lmhhc1RvVXNlU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgcHJvcGVydHkuc2V0VmFsdWUob2JqLCB2YWx1ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUFycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld09iaiA9IHRoaXMuY3JlYXRlTmV3T2JqKHZhbHVlLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKG5ld09iai5uZXdPYmopIHtcclxuICAgICAgICAgICAgdGhpcy50b09iamVjdCh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3T2JqLm5ld09iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFuZXdPYmouZXJyb3IpIHtcclxuICAgICAgICAgICAgb2JqW3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1ZhbHVlQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSk7IH1cclxuICAgIHByaXZhdGUgY3JlYXRlTmV3T2JqKHZhbHVlOiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7IG5ld09iajogbnVsbCwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdmFsdWVbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXTtcclxuICAgICAgICBpZiAoIWNsYXNzTmFtZSAmJiBwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5LmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5jbGFzc05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmdldENsYXNzTmFtZShjbGFzc05hbWUpO1xyXG4gICAgICAgIHJlc3VsdC5uZXdPYmogPSAoY2xhc3NOYW1lKSA/IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoY2xhc3NOYW1lKSA6IG51bGw7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jaGVja05ld09iamVjdE9uRXJyb3JzKHJlc3VsdC5uZXdPYmosIHZhbHVlLCBwcm9wZXJ0eSwgY2xhc3NOYW1lKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja05ld09iamVjdE9uRXJyb3JzKG5ld09iajogYW55LCB2YWx1ZTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LCBjbGFzc05hbWU6IHN0cmluZyk6IEpzb25FcnJvciB7XHJcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcclxuICAgICAgICBpZiAobmV3T2JqKSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICBpZiAocmVxdWlyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVbcmVxdWlyZWRQcm9wZXJ0aWVzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHJlcXVpcmVkUHJvcGVydGllc1tpXSwgY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmJhc2VDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbk1pc3NpbmdUeXBlRXJyb3IocHJvcGVydHkubmFtZSwgcHJvcGVydHkuYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEpzb25JbmNvcnJlY3RUeXBlRXJyb3IocHJvcGVydHkubmFtZSwgcHJvcGVydHkuYmFzZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGROZXdFcnJvcihlcnJvcjogSnNvbkVycm9yLCBqc29uT2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAoanNvbk9iaiAmJiBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgIGVycm9yLmF0ID0ganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXS5zdGFydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHZhbHVlVG9BcnJheSh2YWx1ZTogQXJyYXk8YW55Piwgb2JqOiBhbnksIGtleTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgaWYob2JqW2tleV0gJiYgdmFsdWUubGVuZ3RoID4gMCkgb2JqW2tleV0uc3BsaWNlKDAsIG9ialtrZXldLmxlbmd0aCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUubmV3T2JqKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpba2V5XS5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvT2JqZWN0KHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldLnB1c2godmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kUHJvcGVydHkocHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Piwga2V5OiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgaWYgKHByb3AubmFtZSA9PSBrZXkgfHwgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPT0ga2V5KSByZXR1cm4gcHJvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvanNvbm9iamVjdC50cyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0IChleCkgeyByZXR1cm4gKGV4ICYmICh0eXBlb2YgZXggPT09ICdvYmplY3QnKSAmJiAnZGVmYXVsdCcgaW4gZXgpID8gZXhbJ2RlZmF1bHQnXSA6IGV4OyB9XG5cbnZhciBWdWUgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndnVlJykpO1xudmFyIFZ1ZUNsYXNzQ29tcG9uZW50ID0gcmVxdWlyZSgndnVlLWNsYXNzLWNvbXBvbmVudCcpO1xudmFyIFZ1ZUNsYXNzQ29tcG9uZW50X19kZWZhdWx0ID0gX2ludGVyb3BEZWZhdWx0KFZ1ZUNsYXNzQ29tcG9uZW50KTtcbnJlcXVpcmUoJ3JlZmxlY3QtbWV0YWRhdGEnKTtcblxuLyoqIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgdmVyc29uIDQuMC4wIE1JVCBMSUNFTlNFIGNvcHlyaWdodCAyMDE3IGthb3J1bjM0MyAqL1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYW4gaW5qZWN0XG4gKiBAcGFyYW0ga2V5IGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5mdW5jdGlvbiBJbmplY3Qoa2V5KSB7XG4gICAgcmV0dXJuIFZ1ZUNsYXNzQ29tcG9uZW50LmNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtrXSA9IGtleSB8fCBrO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIGRlY29yYXRvciBvZiBtb2RlbFxuICogQHBhcmFtICBldmVudCBldmVudCBuYW1lXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmZ1bmN0aW9uIE1vZGVsKGV2ZW50KSB7XG4gICAgcmV0dXJuIFZ1ZUNsYXNzQ29tcG9uZW50LmNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgcHJvcCkge1xuICAgICAgICBjb21wb25lbnRPcHRpb25zLm1vZGVsID0geyBwcm9wOiBwcm9wLCBldmVudDogZXZlbnQgfTtcbiAgICB9KTtcbn1cbi8qKlxuICogQGJyaWVmICBNYWtlcyBhIGRlY29yYXRvciBmb3IgcHJvcC5cbiAqXG4gKiBAcGFyYW0gIG9wdGlvbnMgIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0gIHRhcmdldCAgIFRoZSB0YXJnZXRcbiAqIEBwYXJhbSAga2V5ICAgICAgVGhlIGtleVxuICpcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3JcbiAqL1xuZnVuY3Rpb24gbWFrZVByb3BEZWNvcmF0b3Iob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgJiYgdHlwZW9mIG9wdGlvbnMudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFZ1ZUNsYXNzQ29tcG9uZW50LmNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMucHJvcHMgfHwgKGNvbXBvbmVudE9wdGlvbnMucHJvcHMgPSB7fSkpW2tdID0gb3B0aW9ucztcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG5mdW5jdGlvbiBQcm9wKG9wdGlvbnMsIGtleSkge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBWdWUpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VQcm9wRGVjb3JhdG9yKCkob3B0aW9ucywga2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBtYWtlUHJvcERlY29yYXRvcihvcHRpb25zKTtcbiAgICB9XG59XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHdhdGNoIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHBhdGggdGhlIHBhdGggb3IgdGhlIGV4cHJlc3Npb24gdG8gb2JzZXJ2ZVxuICogQHBhcmFtICBXYXRjaE9wdGlvblxuICogQHJldHVybiBNZXRob2REZWNvcmF0b3JcbiAqL1xuZnVuY3Rpb24gV2F0Y2gocGF0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIF9hID0gb3B0aW9ucy5kZWVwLCBkZWVwID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5pbW1lZGlhdGUsIGltbWVkaWF0ZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBWdWVDbGFzc0NvbXBvbmVudC5jcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLndhdGNoICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaFtwYXRoXSA9IHsgaGFuZGxlcjogaGFuZGxlciwgZGVlcDogZGVlcCwgaW1tZWRpYXRlOiBpbW1lZGlhdGUgfTtcbiAgICB9KTtcbn1cbnZhciBwcm9wID0gUHJvcDtcbnZhciB3YXRjaCA9IFdhdGNoO1xudmFyIENvbXBvbmVudCA9IFZ1ZUNsYXNzQ29tcG9uZW50X19kZWZhdWx0O1xuXG5leHBvcnRzLkluamVjdCA9IEluamVjdDtcbmV4cG9ydHMuTW9kZWwgPSBNb2RlbDtcbmV4cG9ydHMuUHJvcCA9IFByb3A7XG5leHBvcnRzLldhdGNoID0gV2F0Y2g7XG5leHBvcnRzLnByb3AgPSBwcm9wO1xuZXhwb3J0cy53YXRjaCA9IHdhdGNoO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvdnVlLXByb3BlcnR5LWRlY29yYXRvci5jb21tb24uanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICByYXdTY3JpcHRFeHBvcnRzLFxuICBjb21waWxlZFRlbXBsYXRlLFxuICBzY29wZUlkLFxuICBjc3NNb2R1bGVzXG4pIHtcbiAgdmFyIGVzTW9kdWxlXG4gIHZhciBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgfHwge31cblxuICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG4gIHZhciB0eXBlID0gdHlwZW9mIHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGVzTW9kdWxlID0gcmF3U2NyaXB0RXhwb3J0c1xuICAgIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcbiAgfVxuXG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAoY29tcGlsZWRUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSBzY29wZUlkXG4gIH1cblxuICAvLyBpbmplY3QgY3NzTW9kdWxlc1xuICBpZiAoY3NzTW9kdWxlcykge1xuICAgIHZhciBjb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQgfHwgKG9wdGlvbnMuY29tcHV0ZWQgPSB7fSlcbiAgICBPYmplY3Qua2V5cyhjc3NNb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtb2R1bGUgPSBjc3NNb2R1bGVzW2tleV1cbiAgICAgIGNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtb2R1bGUgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyLmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydCBpbnRlcmZhY2UgSGFzaFRhYmxlPFQ+IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFQ7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5RGF0YSB7XHJcbiAgICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnk7XHJcbiAgICBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpO1xyXG4gICAgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZyk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5IGV4dGVuZHMgSVN1cnZleURhdGEge1xyXG4gICAgY3VycmVudFBhZ2U6IElQYWdlO1xyXG4gICAgcGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2U6IElQYWdlLCBuZXdWYWx1ZTogYm9vbGVhbik7XHJcbiAgICBxdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBib29sZWFuKTtcclxuICAgIHF1ZXN0aW9uQWRkZWQocXVlc3Rpb246IElRdWVzdGlvbiwgaW5kZXg6IG51bWJlciwgcGFyZW50UGFuZWw6IGFueSwgcm9vdFBhbmVsOiBhbnkpO1xyXG4gICAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KTtcclxuICAgIHF1ZXN0aW9uUmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTtcclxuICAgIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpO1xyXG4gICAgdmFsaWRhdGVRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBTdXJ2ZXlFcnJvcjtcclxuICAgIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZztcclxuICAgIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcclxuICAgIGlzRGlzcGxheU1vZGU6IGJvb2xlYW47XHJcbiAgICBpc0Rlc2lnbk1vZGU6IGJvb2xlYW47XHJcbiAgICBpc0xvYWRpbmdGcm9tSnNvbjogYm9vbGVhbjtcclxuICAgIHJlcXVpcmVkVGV4dDogc3RyaW5nO1xyXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBzdHJpbmc7XHJcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IHN0cmluZztcclxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBib29sZWFuO1xyXG4gICAgdXBsb2FkRmlsZShuYW1lOiBzdHJpbmcsIGZpbGU6IEZpbGUsIHN0b3JlRGF0YUFzVGV4dDogYm9vbGVhbiwgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZykgPT4gYW55KTogYm9vbGVhbjtcclxuICAgIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQpO1xyXG4gICAgYWZ0ZXJSZW5kZXJQYW5lbChwYW5lbDogSUVsZW1lbnQsIGh0bWxFbGVtZW50KTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElDb25kaXRpb25SdW5uZXIge1xyXG4gICAgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVsZW1lbnQgIGV4dGVuZHMgSUNvbmRpdGlvblJ1bm5lcntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICBpc1Zpc2libGU6IGJvb2xlYW47XHJcbiAgICBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSk7XHJcbiAgICByb3dWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJlbmRlcldpZHRoOiBzdHJpbmc7XHJcbiAgICB3aWR0aDogc3RyaW5nO1xyXG4gICAgcmlnaHRJbmRlbnQ6IG51bWJlcjtcclxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IGJvb2xlYW47XHJcbiAgICBpc1BhbmVsOiBib29sZWFuO1xyXG4gICAgb25TdXJ2ZXlMb2FkKCk7XHJcbiAgICBvbkxvY2FsZUNoYW5nZWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUXVlc3Rpb24gZXh0ZW5kcyBJRWxlbWVudCB7XHJcbiAgICBoYXNUaXRsZTogYm9vbGVhbjtcclxuICAgIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKTtcclxuICAgIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpO1xyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKTogYm9vbGVhbjtcclxuICAgIGNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJUGFuZWwgZXh0ZW5kcyBJRWxlbWVudCB7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnZSBleHRlbmRzIElDb25kaXRpb25SdW5uZXIge1xyXG4gICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgIG9uU3VydmV5TG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzZSB7XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBtZXRob2QgaXMgYWJzdHJhY3QnKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBpc1R3b1ZhbHVlRXF1YWxzKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHggPT09IHkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICghKHggaW5zdGFuY2VvZiBPYmplY3QpIHx8ICEoeSBpbnN0YW5jZW9mIE9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHgpIHtcclxuICAgICAgICAgICAgaWYgKCF4Lmhhc093blByb3BlcnR5KHApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKCF5Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4W3BdID09PSB5W3BdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoeFtwXSkgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMoeFtwXSwgeVtwXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChwIGluIHkpIHtcclxuICAgICAgICAgICAgaWYgKHkuaGFzT3duUHJvcGVydHkocCkgJiYgIXguaGFzT3duUHJvcGVydHkocCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleUVycm9yIHtcclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG1ldGhvZCBpcyBhYnN0cmFjdCcpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIFN1cnZleVBhZ2VJZDogc3RyaW5nO1xyXG5TdXJ2ZXlQYWdlSWQgPSBcInNxX3BhZ2VcIjtcclxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnQge1xyXG4gICAgcHVibGljIHN0YXRpYyBTY3JvbGxFbGVtZW50VG9Ub3AoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICAgICAgaWYgKCFlbCB8fCAhZWwuc2Nyb2xsSW50b1ZpZXcpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZWxlbVRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICBpZiAoZWxlbVRvcCA8IDApICBlbC5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIHJldHVybiBlbGVtVG9wIDwgMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0Rmlyc3ROb25UZXh0RWxlbWVudChlbGVtZW50czogYW55KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjdGV4dFwiICYmIGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI2NvbW1lbnRcIikgcmV0dXJuIGVsZW1lbnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgRm9jdXNFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50SWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBlbC5mb2N1cygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXZlbnQ8VCBleHRlbmRzIEZ1bmN0aW9uLCBPcHRpb25zPiAge1xyXG4gICAgcHJpdmF0ZSBjYWxsYmFja3M6IEFycmF5PFQ+O1xyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jYWxsYmFja3MgPT0gbnVsbCB8fCB0aGlzLmNhbGxiYWNrcy5sZW5ndGggPT0gMDsgfVxyXG4gICAgcHVibGljIGZpcmUoc2VuZGVyOiBhbnksIG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsUmVzdWx0ID0gdGhpcy5jYWxsYmFja3NbaV0oc2VuZGVyLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZChmdW5jOiBUKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgQXJyYXk8VD4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MucHVzaChmdW5jKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmUoZnVuYzogVCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jYWxsYmFja3MuaW5kZXhPZihmdW5jLCAwKTtcclxuICAgICAgICBpZiAoaW5kZXggIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jhc2UudHMiLCJpbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSAnLi9xdWVzdGlvbmJhc2UnO1xyXG5pbXBvcnQge0lFbGVtZW50LCBIYXNoVGFibGV9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbi8vVE9ETyByZXBsYWNlIGNvbXBsZXRlbHkgd2l0aCBFbGVtZW50RmFjdG9yeVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GYWN0b3J5IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBRdWVzdGlvbkZhY3RvcnkoKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRDaG9pY2VzKCk6IHN0cmluZ1tdIHsgXHJcbiAgICAgICAgcmV0dXJuIFtcIjF8XCIgKyBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19maXJzdEl0ZW1cIiksIFwiMnxcIiArIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX3NlY29uZEl0ZW1cIiksIFwiM3xcIiArIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX3RoaXJkSXRlbVwiKV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q29sdW1zKCk6IHN0cmluZ1tdIHsgXHJcbiAgICAgICAgdmFyIGNvbE5hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X2NvbHVtblwiKSArIFwiIFwiO1xyXG4gICAgICAgIHJldHVybiBbY29sTmFtZSArIFwiMVwiLCBjb2xOYW1lICsgXCIyXCIsIGNvbE5hbWUgKyBcIjNcIl07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Um93cygpOiBzdHJpbmdbXSB7IFxyXG4gICAgICAgIHZhciByb3dOYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIikgKyBcIiBcIjtcclxuICAgICAgICByZXR1cm4gW3Jvd05hbWUgKyBcIjFcIiwgcm93TmFtZSArIFwiMlwiXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbkJhc2U+ID0ge307XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gUXVlc3Rpb25CYXNlKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2ggPSB7fTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbkJhc2Uge1xyXG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xyXG4gICAgICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRWxlbWVudEZhY3Rvcnkge1xyXG4gICAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRWxlbWVudEZhY3RvcnkgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcclxuICAgIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBJRWxlbWVudD4gPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIGVsZW1lbnRDcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBJRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdID0gZWxlbWVudENyZWF0b3I7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcclxuICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xyXG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XHJcbiAgICAgICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihlbGVtZW50VHlwZSwgbmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzIiwiZXhwb3J0IGludGVyZmFjZSBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBnZXRMb2NhbGUoKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcHVibGljIHN0YXRpYyAgZGVmYXVsdExvY2FsZTogc3RyaW5nID0gXCJkZWZhdWx0XCI7XHJcbiAgICBwcml2YXRlIHZhbHVlcyA9IHt9O1xyXG4gICAgY29uc3RydWN0b3IgKHB1YmxpYyBvd25lcjogSUxvY2FsaXphYmxlT3duZXIpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCkge3JldHVybiB0aGlzLm93bmVyID8gdGhpcy5vd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgdGV4dCgpIDogc3RyaW5nIHsgXHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xyXG4gICAgICAgIGlmKCFsb2MpIGxvYyA9IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgaWYoIXJlcyAmJiBsb2MgIT09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgcmVzID0gdGhpcy52YWx1ZXNbTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLnZhbHVlc1trZXlzWzBdXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KHRoaXMubG9jYWxlLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy52YWx1ZXNbbG9jXTtcclxuICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYoIWxvYykgbG9jID0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICBpZighdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYodGhpcy52YWx1ZXNbbG9jXSkgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlmKGxvYyAhPSBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlICYmIHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0TG9jYWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChsb2MsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tsb2NdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobG9jID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYoa2V5cy5sZW5ndGggPT0gMSAmJiBrZXlzWzBdID09IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRMb2NhbGUpIHJldHVybiB0aGlzLnZhbHVlc1trZXlzWzBdXTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcclxuICAgICAgICBpZighdmFsdWUpIHJldHVybjtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQobnVsbCwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQoa2V5LCB2YWx1ZVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0KGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmKGtleXNbaV0gPT0gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudmFsdWVzW2tleXNbaV1dID09IGRlZmF1bHRWYWx1ZSkgZGVsZXRlIHRoaXMudmFsdWVzW2tleXNbaV1dO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XHJcbmltcG9ydCB7UXVlc3Rpb24gYXMgUXVlc3Rpb25Nb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb24nO1xyXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcH0gZnJvbSAndnVlLXByb3BlcnR5LWRlY29yYXRvcic7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXN0aW9uPFQgZXh0ZW5kcyBRdWVzdGlvbk1vZGVsPiBleHRlbmRzIFZ1ZSB7XHJcbiAgICBAUHJvcFxyXG4gICAgcXVlc3Rpb246IFRcclxuICAgIEBQcm9wXHJcbiAgICBjc3M6IGFueVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy92dWUvcXVlc3Rpb24udHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSAnLi9zdXJ2ZXlTdHJpbmdzJztcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpICB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEVycm9yXCIpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRXhjZWVkU2l6ZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xyXG4gICAgcHJpdmF0ZSBtYXhTaXplOiBudW1iZXI7XHJcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplOiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVtcImZvcm1hdFwiXSh0aGlzLmdldFRleHRTaXplKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcclxuICAgICAgICB2YXIgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICAgICAgdmFyIGZpeGVkID0gWzAsIDAsIDIsIDMsIDNdO1xyXG4gICAgICAgIGlmICh0aGlzLm1heFNpemUgPT0gMCkgcmV0dXJuICcwIEJ5dGUnO1xyXG4gICAgICAgIHZhciBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyh0aGlzLm1heFNpemUpIC8gTWF0aC5sb2coMTAyNCkpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMubWF4U2l6ZSAvIE1hdGgucG93KDEwMjQsIGkpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKGZpeGVkW2ldKSArICcgJyArIHNpemVzW2ldO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XHJcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lcnJvci50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSAnLi9qc29ub2JqZWN0JztcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gJy4vcXVlc3Rpb25iYXNlJztcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvciwgU3VydmV5RWxlbWVudH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0Fuc3dlclJlcXVpcmVkRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7U3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lcn0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7VGV4dFByZVByb2Nlc3Nvcn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbiBleHRlbmRzIFF1ZXN0aW9uQmFzZSBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciB7XHJcbiAgICBwcml2YXRlIGxvY1RpdGxlVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NDb21tZW50VGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbkNvbW1lbnQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc0NvbW1lbnRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBoYXNPdGhlclZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcclxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+ID0gW107XHJcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+ID0gbmV3IEFycmF5PFN1cnZleVZhbGlkYXRvcj4oKTtcclxuICAgIHZhbHVlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29tbWVudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGVycm9yc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHRpdGxlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NDb21tZW50VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuaWQgKyBcImlcIjsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyBcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5sb2NUaXRsZS50ZXh0O1xyXG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLm5hbWU7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZS50ZXh0ID0gbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy50aXRsZUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTsgfSBcclxuICAgIHB1YmxpYyBnZXQgbG9jQ29tbWVudFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21tZW50VGV4dFZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHsgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5wcm9jZXNzVGV4dCh0aGlzLnRpdGxlKSA6IHRoaXMudGl0bGU7IH1cclxuICAgIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGV4dFByZVByb2Nlc3Nvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vbkhhc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5jYW5Qcm9jZXNzZWRUZXh0VmFsdWVzKG5hbWUudG9Mb3dlckNhc2UoKSk7IH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzKHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMucmVxdWlyZWRUZXh0O1xyXG4gICAgICAgIGlmIChyZXF1aXJlVGV4dCkgcmVxdWlyZVRleHQgKz0gXCIgXCI7XHJcbiAgICAgICAgdmFyIG5vID0gdGhpcy5ubztcclxuICAgICAgICBpZiAobm8pIG5vICs9IFwiLiBcIjtcclxuICAgICAgICByZXR1cm4gbm8gKyByZXF1aXJlVGV4dCArIHRoaXMucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AodGhpcy5pZCk7XHJcbiAgICAgICAgdmFyIGlkID0gIW9uRXJyb3IgPyB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKSA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XHJcbiAgICAgICAgaWYgKFN1cnZleUVsZW1lbnQuRm9jdXNFbGVtZW50KGlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmZvY3VzQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRJZDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY2FuUHJvY2Vzc2VkVGV4dFZhbHVlcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbmFtZSA9PSBcIm5vXCIgfHwgbmFtZSA9PSBcInRpdGxlXCIgfHwgbmFtZSA9PSBcInJlcXVpcmVcIjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRQcm9jZXNzZWRUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAobmFtZSA9PSBcIm5vXCIpIHJldHVybiB0aGlzLm5vO1xyXG4gICAgICAgIGlmIChuYW1lID09IFwidGl0bGVcIikgcmV0dXJuIHRoaXMucHJvY2Vzc2VkVGl0bGU7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJyZXF1aXJlXCIpIHJldHVybiB0aGlzLnJlcXVpcmVkVGV4dDtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXF1aXJlZCA9PSB2YWwpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUmVxdWlyZWRWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnRpdGxlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzQ29tbWVudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGhhc0NvbW1lbnQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRDb21tZW50KCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhc0NvbW1lbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb21tZW50KSB0aGlzLmhhc090aGVyID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbW1lbnRUZXh0KCk6IHN0cmluZyB7IFxyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmxvY0NvbW1lbnRUZXh0LnRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY29tbWVudFRleHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jQ29tbWVudFRleHQudGV4dCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNPdGhlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzT3RoZXJWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBoYXNPdGhlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydE90aGVyKCkgfHwgdGhpcy5oYXNPdGhlciA9PSB2YWwpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhc090aGVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzT3RoZXIpIHRoaXMuaGFzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzT3RoZXJDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkgeyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLnJlYWRPbmx5IHx8ICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlKTt9XHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5yZWFkT25seVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICAgIGlmKHRoaXMucmVhZE9ubHkgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlYWRPbmx5VmFsdWUgPSB2YWx1ZTsgXHJcbiAgICAgICAgdGhpcy5yZWFkT25seUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZWFkT25seUNoYW5nZWQoKSB7IFxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldCBubygpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGVJbmRleCA8IDApIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gMTtcclxuICAgICAgICB2YXIgaXNOdW1lcmljID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc3RyID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHRoaXMuc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleDtcclxuICAgICAgICAgICAgaWYgKHBhcnNlSW50KHN0cikpIHN0YXJ0SW5kZXggPSBwYXJzZUludChzdHIpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChzdHIubGVuZ3RoID09IDEpIGlzTnVtZXJpYyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOdW1lcmljKSByZXR1cm4gKHRoaXMudmlzaWJsZUluZGV4ICsgc3RhcnRJbmRleCkudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdCgwKSArIHRoaXMudmlzaWJsZUluZGV4KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblNldERhdGEoKSB7XHJcbiAgICAgICAgc3VwZXIub25TZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZyb21EYXRhKHRoaXMuZ2V0VmFsdWVDb3JlKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc3ZhbHVlQ2hhbmdlZENhbGxiYWNrRmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB0aGlzLmlzdmFsdWVDaGFuZ2VkQ2FsbGJhY2tGaXJpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY29tbWVudCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDb21tZW50KCk7IH1cclxuICAgIHB1YmxpYyBzZXQgY29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCA9PSBuZXdWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRDb21tZW50KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgIT0gbnVsbCA/IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMubmFtZSkgOiB0aGlzLnF1ZXN0aW9uQ29tbWVudDsgfVxyXG4gICAgcHJvdGVjdGVkIHNldENvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmFsdWUgPT0gbnVsbDsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ZvckVycm9ycyhmaXJlQ2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdXJ2ZXkgIT0gbnVsbCAmJiB0aGlzLmlzUmVxdWlyZWQgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiOyB9XHJcbiAgICBwdWJsaWMgYWRkRXJyb3IoZXJyb3I6IFN1cnZleUVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja0ZvckVycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgZXJyb3JMZW5ndGggPSB0aGlzLmVycm9ycyA/IHRoaXMuZXJyb3JzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tGb3JFcnJvcnModGhpcy5lcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPT0gMCAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMucnVuVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLmVycm9ycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLnN1cnZleS52YWxpZGF0ZVF1ZXN0aW9uKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayAmJiAoZXJyb3JMZW5ndGggIT0gdGhpcy5lcnJvcnMubGVuZ3RoIHx8IGVycm9yTGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVxdWlyZWRFcnJvcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGhhc1JlcXVpcmVkRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmlzRW1wdHkoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBydW5WYWxpZGF0b3JzKCk6IFN1cnZleUVycm9yIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJ1bm5lcigpLnJ1bih0aGlzKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5KSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZVRvRGF0YShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFZhbHVlQ29yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhICE9IG51bGwgPyB0aGlzLmRhdGEuZ2V0VmFsdWUodGhpcy5uYW1lKSA6IHRoaXMucXVlc3Rpb25WYWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKHRoaXMubmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHsgcmV0dXJuIHZhbDsgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHsgcmV0dXJuIHZhbDsgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KHRoaXMubmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy9JUXVlc3Rpb25cclxuICAgIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvL0lWYWxpZGF0b3JPd25lclxyXG4gICAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIG51bGw7IH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicXVlc3Rpb25cIiwgW3sgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXHJcbiAgICB7IG5hbWU6IFwiY29tbWVudFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIgfSxcclxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsIFwicmVhZE9ubHk6Ym9vbGVhblwiLCB7IG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCJ9XSwgbnVsbCwgXCJxdWVzdGlvbmJhc2VcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uLnRzIiwiZXhwb3J0IHZhciBzdXJ2ZXlDc3MgPSB7XHJcbiAgICBjdXJyZW50VHlwZTogXCJcIixcclxuICAgIGdldENzczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRUeXBlID8gdGhpc1t0aGlzLmN1cnJlbnRUeXBlXSA6IGRlZmF1bHRTdGFuZGFyZENzcztcclxuICAgICAgICBpZiAoIWxvYykgbG9jID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4gICAgICAgIHJldHVybiBsb2M7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IHZhciBkZWZhdWx0U3RhbmRhcmRDc3MgPSB7XHJcbiAgICByb290OiBcInN2X21haW5cIixcclxuICAgIGhlYWRlcjogXCJcIixcclxuICAgIGJvZHk6IFwic3ZfYm9keVwiLFxyXG4gICAgZm9vdGVyOiBcInN2X25hdlwiLFxyXG4gICAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIiwgbmF2aWdhdGlvbjogeyBjb21wbGV0ZTogXCJcIiwgcHJldjpcIlwiLCBuZXh0OiBcIlwifSxcclxuICAgIHByb2dyZXNzOiBcInN2X3Byb2dyZXNzXCIsIHByb2dyZXNzQmFyOiBcIlwiLFxyXG4gICAgcGFnZVRpdGxlOiBcInN2X3BfdGl0bGVcIixcclxuICAgIHJvdzogXCJzdl9yb3dcIixcclxuICAgIHF1ZXN0aW9uOiB7IHJvb3Q6IFwic3ZfcVwiLCB0aXRsZTogXCJzdl9xX3RpdGxlXCIsIGNvbW1lbnQ6IFwiXCIsIGluZGVudDogMjAgfSxcclxuICAgIGVycm9yOiB7IHJvb3Q6IFwic3ZfcV9lcmJveFwiLCBpY29uOiBcIlwiLCBpdGVtOiBcIlwiIH0sXHJcblxyXG4gICAgY2hlY2tib3g6IHsgcm9vdDogXCJzdl9xY2JjXCIsIGl0ZW06IFwic3ZfcV9jaGVja2JveFwiLCBvdGhlcjogXCJzdl9xX290aGVyXCIgfSxcclxuICAgIGNvbW1lbnQ6IFwiXCIsXHJcbiAgICBkcm9wZG93bjogeyByb290OiBcIlwiLCBjb250cm9sOiBcIlwiIH0sXHJcbiAgICBtYXRyaXg6IHsgcm9vdDogXCJzdl9xX21hdHJpeFwiIH0sXHJcbiAgICBtYXRyaXhkcm9wZG93bjogeyByb290OiBcInN2X3FfbWF0cml4XCIgfSxcclxuICAgIG1hdHJpeGR5bmFtaWM6IHsgcm9vdDogXCJ0YWJsZVwiLCBidXR0b246IFwiXCIgfSxcclxuICAgIG11bHRpcGxldGV4dDogeyByb290OiBcIlwiLCBpdGVtVGl0bGU6IFwiXCIsIGl0ZW1WYWx1ZTogXCJcIiB9LFxyXG4gICAgcmFkaW9ncm91cDogeyByb290OiBcInN2X3FjYmNcIiwgaXRlbTogXCJzdl9xX3JhZGlvZ3JvdXBcIiwgbGFiZWw6IFwiXCIsIG90aGVyOiBcInN2X3Ffb3RoZXJcIiB9LFxyXG4gICAgcmF0aW5nOiB7IHJvb3Q6IFwic3ZfcV9yYXRpbmdcIiwgaXRlbTogXCJzdl9xX3JhdGluZ19pdGVtXCIgfSxcclxuICAgIHRleHQ6IFwiXCIsXHJcbiAgICB3aW5kb3c6IHtcclxuICAgICAgICByb290OiBcInN2X3dpbmRvd1wiLCBib2R5OiBcInN2X3dpbmRvd19jb250ZW50XCIsXHJcbiAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgIHJvb3Q6IFwic3Zfd2luZG93X3RpdGxlXCIsIHRpdGxlOiBcIlwiLCBidXR0b246IFwiXCIsIGJ1dHRvbkV4cGFuZGVkOiBcIlwiLCBidXR0b25Db2xsYXBzZWQ6IFwiXCJcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5zdXJ2ZXlDc3NbXCJzdGFuZGFyZFwiXSA9IGRlZmF1bHRTdGFuZGFyZENzcztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyIsImltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1WYWx1ZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNlcGFyYXRvciA9ICd8JztcclxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlQXJyYXkobG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyKTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgdmFyIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+ID0gW107XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldHVwQXJyYXkoaXRlbXMsIGxvY093bmVyKTtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHNldHVwQXJyYXkoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIGxvY093bmVyOiBJTG9jYWxpemFibGVPd25lcikge1xyXG4gICAgICAgIGl0ZW1zLnB1c2ggPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgdmFsdWUubG9jT3duZXIgPSBsb2NPd25lcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGl0ZW1zLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBJdGVtVmFsdWVbXSk6IEl0ZW1WYWx1ZVtdIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0aGlzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLiBpdGVtcyk7XHJcbiAgICAgICAgICAgIGlmKCFpdGVtcykgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbaV0ubG9jT3duZXIgPSBsb2NPd25lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHNldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbHVlczogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIGl0ZW1zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBJdGVtVmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXREYXRhKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5oYXNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IHZhbHVlOiBpdGVtLnZhbHVlLCB0ZXh0OiBpdGVtLmxvY1RleHQuZ2V0SnNvbigpIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbUJ5VmFsdWUoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbDogYW55KTogSXRlbVZhbHVlIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNbaV0udmFsdWUgPT0gdmFsKSByZXR1cm4gaXRlbXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXRlbVZhbHVlUHJvcCA9IFsgXCJ0ZXh0XCIsIFwidmFsdWVcIiwgXCJoYXNUZXh0XCIsIFwibG9jT3duZXJcIiwgXCJsb2NUZXh0XCJdO1xyXG4gICAgcHJpdmF0ZSBpdGVtVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnksIHRleHQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyhudWxsKTtcclxuICAgICAgICBpZih0ZXh0KSB0aGlzLmxvY1RleHQudGV4dCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiaXRlbXZhbHVlXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPd25lcigpIDogSUxvY2FsaXphYmxlT3duZXIgeyByZXR1cm4gdGhpcy5sb2NUZXh0Lm93bmVyOyB9XHJcbiAgICBwdWJsaWMgc2V0IGxvY093bmVyKHZhbHVlOiBJTG9jYWxpemFibGVPd25lcikgeyB0aGlzLmxvY1RleHQub3duZXIgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5pdGVtVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1WYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IHRoaXMuaXRlbVZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gc3RyLmluZGV4T2YoSXRlbVZhbHVlLlNlcGFyYXRvcik7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtVmFsdWUgPSBzdHIuc2xpY2UoMCwgaW5kZXgpO1xyXG4gICAgICAgICAgICB0aGlzLnRleHQgPSBzdHIuc2xpY2UoaW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc1RleHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmxvY1RleHQudGV4dCA/IHRydWUgOiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVGV4dCkgcmV0dXJuIHRoaXMubG9jVGV4dC50ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0ZXh0KG5ld1RleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gbmV3VGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodHlwZW9mICh2YWx1ZS52YWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHZhciBleGNlcHRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc09iakl0ZW1WYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLml0ZW1WYWx1ZSA9IHZhbHVlLml0ZW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jVGV4dC5zZXRKc29uKHZhbHVlLmxvY1RleHQuZ2V0SnNvbigpKTtcclxuICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEl0ZW1WYWx1ZS5pdGVtVmFsdWVQcm9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29weUF0dHJpYnV0ZXModmFsdWUsIGV4Y2VwdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgIGlzT2JqSXRlbVZhbHVlKG9iajogYW55KSB7IHJldHVybiB0eXBlb2YgKG9iai5nZXRUeXBlKSAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqLmdldFR5cGUoKSA9PSAnaXRlbXZhbHVlJ31cclxuICAgIHByaXZhdGUgY29weUF0dHJpYnV0ZXMoc3JjOiBhbnksIGV4Y2VwdG9uczogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKCh0eXBlb2Ygc3JjW2tleV0gPT0gJ2Z1bmN0aW9uJykpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoZXhjZXB0b25zICYmIGV4Y2VwdG9ucy5pbmRleE9mKGtleSkgPiAtMSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmKGtleSA9PSBcInRleHRcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NUZXh0LnNldEpzb24oc3JjW2tleV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc1trZXldID0gc3JjW2tleV07ICAgIFxyXG4gICAgICAgICAgICB9ICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2l0ZW12YWx1ZS50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtDaG9pY2VzUmVzdGZ1bGx9IGZyb20gXCIuL2Nob2ljZXNSZXN0ZnVsbFwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uU2VsZWN0QmFzZSBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHByaXZhdGUgdmlzaWJsZUNob2ljZXNDYWNoZTogQXJyYXk8SXRlbVZhbHVlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNvbW1lbnRWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBvdGhlckl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm90aGVyXCIsIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpKTtcclxuICAgIHByaXZhdGUgbG9jT3RoZXJUZXh0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NPdGhlckVycm9yVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByb3RlY3RlZCBjYWNoZWRWYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzRnJvbVVybDogQXJyYXk8SXRlbVZhbHVlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdGlvbjogYW55ID0gbnVsbDtcclxuICAgIHByaXZhdGUgY2hvaWNlc1ZhbHVlczogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHB1YmxpYyBjaG9pY2VzQnlVcmw6IENob2ljZXNSZXN0ZnVsbDtcclxuICAgIHB1YmxpYyBzdG9yZU90aGVyc0FzQ29tbWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIGNob2ljZXNPcmRlclZhbHVlOiBzdHJpbmcgPSBcIm5vbmVcIjtcclxuICAgIGNob2ljZXNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZXMgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzQnlVcmwgPSB0aGlzLmNyZWF0ZVJlc3RmdWxsKCk7XHJcbiAgICAgICAgdGhpcy5sb2NPdGhlclRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY090aGVyRXJyb3JUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsLmdldFJlc3VsdENhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSB7IHNlbGYub25Mb2FkQ2hvaWNlc0Zyb21VcmwoaXRlbXMpIH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG90aGVySXRlbSgpOiBJdGVtVmFsdWUge1xyXG4gICAgICAgIHRoaXMub3RoZXJJdGVtVmFsdWUudGV4dCA9IHRoaXMub3RoZXJUZXh0ID8gdGhpcy5vdGhlclRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW1WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzT3RoZXJTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpID8gdGhpcy5nZXRIYXNPdGhlcih0aGlzLnZhbHVlKSA6IHRoaXMuZ2V0SGFzT3RoZXIodGhpcy5jYWNoZWRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0SGFzT3RoZXIodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJlc3RmdWxsKCk6IENob2ljZXNSZXN0ZnVsbCB7IHJldHVybiBuZXcgQ2hvaWNlc1Jlc3RmdWxsKCk7IH1cclxuICAgIHByb3RlY3RlZCBnZXRDb21tZW50KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHN1cGVyLmdldENvbW1lbnQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU2V0dGluZ0NvbW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBzZXRDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKVxyXG4gICAgICAgICAgICBzdXBlci5zZXRDb21tZW50KG5ld1ZhbHVlKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2V0dGluZ0NvbW1lbnQgJiYgbmV3VmFsdWUgIT0gdGhpcy5jb21tZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPdGhlclNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZUluRGF0YSh0aGlzLmNhY2hlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUpIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uID0gbmV3VmFsdWU7ICAgICAgICBcclxuICAgICAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHN1cGVyLnZhbHVlRnJvbURhdGEodmFsKTtcclxuICAgICAgICB0aGlzLmNhY2hlZFZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhQ29yZSh2YWwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSByZXR1cm4gc3VwZXIudmFsdWVUb0RhdGEodmFsKTtcclxuICAgICAgICB0aGlzLmNhY2hlZFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlVG9EYXRhQ29yZSh2YWwpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCkpIHJldHVybiB2YWw7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkgcmV0dXJuIHZhbDtcclxuICAgICAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSAmJiB0aGlzLmdldENvbW1lbnQoKSkge1xyXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmdldENvbW1lbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBoYXNVbmtub3duVmFsdWUodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuYWN0aXZlQ2hvaWNlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtc1tpXS52YWx1ZSA9PSB2YWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlczsgfVxyXG4gICAgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZXMsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIGdldCBjaG9pY2VzT3JkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY2hvaWNlc09yZGVyVmFsdWU7IH1cclxuICAgIHNldCBjaG9pY2VzT3JkZXIobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSB0aGlzLmNob2ljZXNPcmRlclZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzT3JkZXJWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3RoZXJUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY090aGVyVGV4dC50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IG90aGVyVGV4dCh2YWx1ZTogc3RyaW5nKSB7IFxyXG4gICAgICAgIHRoaXMubG9jT3RoZXJUZXh0LnRleHQgPSB2YWx1ZTsgXHJcbiAgICAgICAgdGhpcy51cGRhdGVPdGhlckl0ZW0oKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3RoZXJFcnJvclRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3RoZXJFcnJvclRleHQudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBvdGhlckVycm9yVGV4dCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jT3RoZXJFcnJvclRleHQudGV4dCA9IHZhbHVlOyAgfVxyXG4gICAgcHVibGljIGdldCBsb2NPdGhlclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlclRleHRWYWx1ZTsgfSBcclxuICAgIHB1YmxpYyBnZXQgbG9jT3RoZXJFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NPdGhlckVycm9yVGV4dFZhbHVlOyB9IFxyXG4gICAgXHJcbiAgICBnZXQgdmlzaWJsZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc090aGVyICYmIHRoaXMuY2hvaWNlc09yZGVyID09IFwibm9uZVwiKSByZXR1cm4gdGhpcy5hY3RpdmVDaG9pY2VzO1xyXG4gICAgICAgIGlmKCF0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGUpIHtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlID0gdGhpcy5zb3J0VmlzaWJsZUNob2ljZXModGhpcy5hY3RpdmVDaG9pY2VzLnNsaWNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNPdGhlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlLnB1c2godGhpcy5vdGhlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVDaG9pY2VzQ2FjaGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBhY3RpdmVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4geyByZXR1cm4gdGhpcy5jaG9pY2VzRnJvbVVybCA/IHRoaXMuY2hvaWNlc0Zyb21VcmwgOiB0aGlzLmNob2ljZXM7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xyXG4gICAgICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNPdGhlclNlbGVjdGVkIHx8IHRoaXMuY29tbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciB0ZXh0ID0gdGhpcy5vdGhlckVycm9yVGV4dDtcclxuICAgICAgICBpZiAoIXRleHQpIHtcclxuICAgICAgICAgICAgdGV4dCA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlclJlcXVpcmVkRXJyb3JcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBDdXN0b21FcnJvcih0ZXh0KSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHN1cGVyLm9uTG9jYWxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT3RoZXJJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZU90aGVySXRlbSgpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHRoaXMub3RoZXJJdGVtOyAvLyBzZXQgdGhlIGNvcnJlY3QgdGV4dFxyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY2hvaWNlc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSB7IHJldHVybiB0aGlzLnN0b3JlT3RoZXJzQXNDb21tZW50ICYmICh0aGlzLnN1cnZleSAhPSBudWxsID8gdGhpcy5zdXJ2ZXkuc3RvcmVPdGhlcnNBc0NvbW1lbnQgOiB0cnVlKTsgfVxyXG4gICAgb25TdXJ2ZXlMb2FkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNCeVVybCkgdGhpcy5jaG9pY2VzQnlVcmwucnVuKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uTG9hZENob2ljZXNGcm9tVXJsKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KSB7XHJcbiAgICAgICAgdmFyIGVycm9yQ291bnQgPSB0aGlzLmVycm9ycy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwgJiYgdGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh0aGlzLmNob2ljZXNCeVVybC5lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvckNvdW50ID4gMCB8fCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZXJyb3JzQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld0Nob2ljZXMgPSBudWxsO1xyXG4gICAgICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG5ld0Nob2ljZXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xyXG4gICAgICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YShuZXdDaG9pY2VzLCBhcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hvaWNlc0Zyb21VcmwgPSBuZXdDaG9pY2VzO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NhY2hlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNob2ljZXNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzb3J0VmlzaWJsZUNob2ljZXMoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICB2YXIgb3JkZXIgPSB0aGlzLmNob2ljZXNPcmRlci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChvcmRlciA9PSBcImFzY1wiKSByZXR1cm4gdGhpcy5zb3J0QXJyYXkoYXJyYXksIDEpO1xyXG4gICAgICAgIGlmIChvcmRlciA9PSBcImRlc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAtMSk7XHJcbiAgICAgICAgaWYgKG9yZGVyID09IFwicmFuZG9tXCIpIHJldHVybiB0aGlzLnJhbmRvbWl6ZUFycmF5KGFycmF5KTtcclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNvcnRBcnJheShhcnJheTogQXJyYXk8SXRlbVZhbHVlPiwgbXVsdDogbnVtYmVyKTogQXJyYXk8SXRlbVZhbHVlPiB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgaWYgKGEudGV4dCA8IGIudGV4dCkgcmV0dXJuIC0xICogbXVsdDtcclxuICAgICAgICAgICAgaWYgKGEudGV4dCA+IGIudGV4dCkgcmV0dXJuIDEgKiBtdWx0O1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmFuZG9taXplQXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcclxuICAgICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpICsgMSkpO1xyXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xyXG4gICAgICAgICAgICBhcnJheVtqXSA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH1cclxuICAgIGNsZWFyVW51c2VkVmFsdWVzKCkge1xyXG4gICAgICAgIHN1cGVyLmNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuaXNPdGhlclNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveEJhc2UgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2Uge1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAxO1xyXG4gICAgY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInNlbGVjdGJhc2VcIiwgW1wiaGFzQ29tbWVudDpib29sZWFuXCIsIFwiaGFzT3RoZXI6Ym9vbGVhblwiLFxyXG4gICAgeyBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jaG9pY2VzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzID0gdmFsdWU7IH19LFxyXG4gICAgeyBuYW1lOiBcImNob2ljZXNPcmRlclwiLCBkZWZhdWx0OiBcIm5vbmVcIiwgY2hvaWNlczogW1wibm9uZVwiLCBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIl0gfSxcclxuICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIiwgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIG9iai5jaG9pY2VzQnlVcmwuaXNFbXB0eSA/IG51bGwgOiBvYmouY2hvaWNlc0J5VXJsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTsgfSB9LFxyXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJUZXh0XCIgfSwge25hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY090aGVyRXJyb3JUZXh0XCJ9LFxyXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZX1dLCBudWxsLCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNoZWNrYm94YmFzZVwiLCBbeyBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAxLCBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNF0gfV0sIG51bGwsIFwic2VsZWN0YmFzZVwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsImltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuL2Jhc2UnO1xyXG5pbXBvcnQge0NvbmRpdGlvbnNQYXJzZXJ9IGZyb20gJy4vY29uZGl0aW9uc1BhcnNlcic7XHJcbmltcG9ydCB7UHJvY2Vzc1ZhbHVlfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb24ge1xyXG4gICAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcclxuICAgIHN0YXRpYyBnZXQgb3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGlmIChDb25kaXRpb24ub3BlcmF0b3JzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIENvbmRpdGlvbi5vcGVyYXRvcnNWYWx1ZTtcclxuICAgICAgICBDb25kaXRpb24ub3BlcmF0b3JzVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuICFsZWZ0OyB9LFxyXG4gICAgICAgICAgICBub3RlbXB0eTogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiAhKCFsZWZ0KTsgfSxcclxuICAgICAgICAgICAgZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCA9PSByaWdodDsgfSxcclxuICAgICAgICAgICAgbm90ZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCAhPSByaWdodDsgfSxcclxuICAgICAgICAgICAgY29udGFpbnM6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeyByZXR1cm4gbGVmdCAmJiBsZWZ0W1wiaW5kZXhPZlwiXSAmJiBsZWZ0LmluZGV4T2YocmlnaHQpID4gLTE7IH0sXHJcbiAgICAgICAgICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuICFsZWZ0IHx8ICFsZWZ0W1wiaW5kZXhPZlwiXSB8fCBsZWZ0LmluZGV4T2YocmlnaHQpID09IC0xOyB9LFxyXG4gICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPiByaWdodDsgfSxcclxuICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7IHJldHVybiBsZWZ0IDwgcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPj0gcmlnaHQ7IH0sXHJcbiAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsgcmV0dXJuIGxlZnQgPD0gcmlnaHQ7IH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBDb25kaXRpb24ub3BlcmF0b3JzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wVmFsdWU6IHN0cmluZyA9IFwiZXF1YWxcIjtcclxuICAgIHB1YmxpYyBsZWZ0OiBhbnk7XHJcbiAgICBwdWJsaWMgcmlnaHQ6IGFueTtcclxuICAgIHB1YmxpYyBnZXQgb3BlcmF0b3IoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMub3BWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoIUNvbmRpdGlvbi5vcGVyYXRvcnNbdmFsdWVdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vcFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcGVyZm9ybShsZWZ0OiBhbnkgPSBudWxsLCByaWdodDogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbGVmdCkgbGVmdCA9IHRoaXMubGVmdDtcclxuICAgICAgICBpZiAoIXJpZ2h0KSByaWdodCA9IHRoaXMucmlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBDb25kaXRpb24ub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHRoaXMuZ2V0UHVyZVZhbHVlKGxlZnQpLCB0aGlzLmdldFB1cmVWYWx1ZShyaWdodCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRQdXJlVmFsdWUodmFsOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdmFsIHx8ICh0eXBlb2YgdmFsICE9IFwic3RyaW5nXCIpKSByZXR1cm4gdmFsO1xyXG4gICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gMCAmJiAodmFsWzBdID09IFwiJ1wiIHx8IHZhbFswXSA9PSAnXCInKSkgIHZhbCA9IHZhbC5zdWJzdHIoMSk7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxlbiA+IDAgJiYgKHZhbFtsZW4gLSAxXSA9PSBcIidcIiB8fCB2YWxbbGVuIC0gMV0gPT0gJ1wiJykpICB2YWwgPSB2YWwuc3Vic3RyKDAsIGxlbiAtIDEpO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbk5vZGUge1xyXG4gICAgcHJpdmF0ZSBjb25uZWN0aXZlVmFsdWU6IHN0cmluZyA9IFwiYW5kXCI7XHJcbiAgICBwdWJsaWMgY2hpbGRyZW46IEFycmF5PGFueT4gPSBbXTtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIGdldCBjb25uZWN0aXZlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbm5lY3RpdmVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjb25uZWN0aXZlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIiZcIiB8fCB2YWx1ZSA9PSBcIiYmXCIpIHZhbHVlID0gXCJhbmRcIjtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdmFsdWUgPT0gXCJ8fFwiKSB2YWx1ZSA9IFwib3JcIjtcclxuICAgICAgICBpZiAodmFsdWUgIT0gXCJhbmRcIiAmJiB2YWx1ZSAhPSBcIm9yXCIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbm5lY3RpdmVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCkgeyByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMDsgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RpdmUgPSBcImFuZFwiO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25SdW5uZXIge1xyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcHJvY2Vzc1ZhbHVlOiBQcm9jZXNzVmFsdWU7XHJcbiAgICBwcml2YXRlIHJvb3Q6IENvbmRpdGlvbk5vZGU7XHJcbiAgICBwcml2YXRlIHZhbHVlczogSGFzaFRhYmxlPGFueT47XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gbmV3IENvbmRpdGlvbk5vZGUoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmV4cHJlc3Npb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBuZXcgQ29uZGl0aW9uc1BhcnNlcigpLnBhcnNlKHRoaXMuZXhwcmVzc2lvblZhbHVlLCB0aGlzLnJvb3QpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJ1bih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuTm9kZSh0aGlzLnJvb3QpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Ob2RlKG5vZGU6IENvbmRpdGlvbk5vZGUpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgb25GaXJzdEZhaWwgPSBub2RlLmNvbm5lY3RpdmUgPT0gXCJhbmRcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMucnVuTm9kZUNvbmRpdGlvbihub2RlLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgaWYgKCFyZXMgJiYgb25GaXJzdEZhaWwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiAhb25GaXJzdEZhaWwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb25GaXJzdEZhaWw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bk5vZGVDb25kaXRpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodmFsdWVbXCJjaGlsZHJlblwiXSkgcmV0dXJuIHRoaXMucnVuTm9kZSh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlW1wibGVmdFwiXSkgcmV0dXJuIHRoaXMucnVuQ29uZGl0aW9uKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bkNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7XHJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZShsZWZ0KTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc1ZhbHVlLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKSkgcmV0dXJuIGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJlbXB0eVwiO1xyXG4gICAgICAgICAgICBsZWZ0ID0gdGhpcy5wcm9jZXNzVmFsdWUuZ2V0VmFsdWUobmFtZSwgdGhpcy52YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmlnaHQgPSBjb25kaXRpb24ucmlnaHQ7XHJcbiAgICAgICAgbmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKHJpZ2h0KTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc1ZhbHVlLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByaWdodCA9IHRoaXMucHJvY2Vzc1ZhbHVlLmdldFZhbHVlKG5hbWUsIHRoaXMudmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmRpdGlvbi5wZXJmb3JtKGxlZnQsIHJpZ2h0KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVOYW1lKG5vZGVWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFub2RlVmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZVZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKG5vZGVWYWx1ZS5sZW5ndGggPCAzIHx8IG5vZGVWYWx1ZVswXSAhPSAneycgfHwgbm9kZVZhbHVlW25vZGVWYWx1ZS5sZW5ndGggLSAxXSAhPSAnfScpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBub2RlVmFsdWUuc3Vic3RyKDEsIG5vZGVWYWx1ZS5sZW5ndGggLSAyKTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zLnRzIiwiaW1wb3J0IHtCYXNlLCBTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENob2ljZXNSZXN0ZnVsbCBleHRlbmRzIEJhc2Uge1xyXG4gICAgcHVibGljIHVybDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHZhbHVlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyB0aXRsZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgZ2V0UmVzdWx0Q2FsbGJhY2s6IChpdGVtczogQXJyYXk8SXRlbVZhbHVlPikgPT4gdm9pZDtcclxuICAgIHB1YmxpYyBlcnJvcjogU3VydmV5RXJyb3IgPSBudWxsO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBydW4oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVybCB8fCAhdGhpcy5nZXRSZXN1bHRDYWxsYmFjaykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkxvYWQoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGYub25FcnJvcih4aHIuc3RhdHVzVGV4dCwgeGhyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJjaG9pY2VzQnlVcmxcIjsgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy51cmwgJiYgIXRoaXMucGF0aCAmJiAhdGhpcy52YWx1ZU5hbWUgJiYgIXRoaXMudGl0bGVOYW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldERhdGEoanNvbjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIGlmIChqc29uLnVybCkgdGhpcy51cmwgPSBqc29uLnVybDtcclxuICAgICAgICBpZiAoanNvbi5wYXRoKSB0aGlzLnBhdGggPSBqc29uLnBhdGg7XHJcbiAgICAgICAgaWYgKGpzb24udmFsdWVOYW1lKSB0aGlzLnZhbHVlTmFtZSA9IGpzb24udmFsdWVOYW1lO1xyXG4gICAgICAgIGlmIChqc29uLnRpdGxlTmFtZSkgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLnVybCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5wYXRoID0gXCJcIjtcclxuICAgICAgICB0aGlzLnZhbHVlTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy50aXRsZU5hbWUgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZChyZXN1bHQ6IGFueSkge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHRbXCJsZW5ndGhcIl0pIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtVmFsdWUgPSByZXN1bHRbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1WYWx1ZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGl0ZW1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKG5ldyBJdGVtVmFsdWUodmFsdWUsIHRpdGxlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEN1c3RvbUVycm9yKHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cmxHZXRDaG9pY2VzRXJyb3JcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb25FcnJvcihzdGF0dXM6IHN0cmluZywgcmVzcG9uc2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3Ioc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVybFJlcXVlc3RFcnJvclwiKVtcImZvcm1hdFwiXShzdGF0dXMsIHJlc3BvbnNlKSk7XHJcbiAgICAgICAgdGhpcy5nZXRSZXN1bHRDYWxsYmFjayhbXSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFJlc3VsdEFmdGVyUGF0aChyZXN1bHQ6IGFueSkge1xyXG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGlmICghdGhpcy5wYXRoKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHZhciBwYXRoZXMgPSB0aGlzLmdldFBhdGhlcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoZXNbaV1dO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFBhdGhlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcGF0aGVzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pbmRleE9mKCc7JykgPiAtMSkge1xyXG4gICAgICAgICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoJzsnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoJywnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhdGhlcy5sZW5ndGggPT0gMCkgcGF0aGVzLnB1c2godGhpcy5wYXRoKTtcclxuICAgICAgICByZXR1cm4gcGF0aGVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIGl0ZW1bdGhpcy52YWx1ZU5hbWVdO1xyXG4gICAgICAgIHZhciBsZW4gPSBPYmplY3Qua2V5cyhpdGVtKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxlbiA8IDEpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBpdGVtW09iamVjdC5rZXlzKGl0ZW0pWzBdXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VGl0bGUoaXRlbTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMudGl0bGVOYW1lKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLnRpdGxlTmFtZV07XHJcbiAgICB9XHJcbn1cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNob2ljZXNCeVVybFwiLCBbXCJ1cmxcIiwgXCJwYXRoXCIsIFwidmFsdWVOYW1lXCIsIFwidGl0bGVOYW1lXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ2hvaWNlc1Jlc3RmdWxsKCk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jaG9pY2VzUmVzdGZ1bGwudHMiLCJpbXBvcnQge0hhc2hUYWJsZX0gZnJvbSAnLi9iYXNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9jZXNzVmFsdWUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuICAgIHB1YmxpYyBnZXRGaXJzdE5hbWUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIHZhciByZXMgPSBcIlwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2ggPSB0ZXh0W2ldO1xyXG4gICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdbJykgYnJlYWs7XHJcbiAgICAgICAgICAgIHJlcyArPSBjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNWYWx1ZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogSGFzaFRhYmxlPGFueT4pOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcclxuICAgICAgICByZXR1cm4gcmVzLmhhc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55Pik6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XHJcbiAgICAgICAgcmV0dXJuIHJlcy52YWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVDb3JlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHZhciByZXMgPSB7IGhhc1ZhbHVlOiBmYWxzZSwgdmFsdWU6IG51bGwgfTtcclxuICAgICAgICB2YXIgY3VyVmFsdWUgPSB2YWx1ZXM7XHJcbiAgICAgICAgaWYgKCFjdXJWYWx1ZSkgcmV0dXJuIHJlcztcclxuICAgICAgICB2YXIgaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgd2hpbGUgKHRleHQgJiYgdGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0FycmF5ID0gIWlzRmlyc3QgJiYgdGV4dFswXSA9PSAnWyc7XHJcbiAgICAgICAgICAgIGlmICghaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KSB0ZXh0ID0gdGV4dC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3ROYW1lKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJOYW1lKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJWYWx1ZVtjdXJOYW1lXSkgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIGN1clZhbHVlID0gY3VyVmFsdWVbY3VyTmFtZV1cclxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VyVmFsdWUpKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGggJiYgdGV4dFtpbmRleF0gIT0gJ10nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IHRleHRbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gaW5kZXggPCB0ZXh0Lmxlbmd0aCA/IHRleHQuc3Vic3RyKGluZGV4ICsgMSkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldEludFZhbHVlKHN0cik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGN1clZhbHVlLmxlbmd0aCkgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIGN1clZhbHVlID0gY3VyVmFsdWVbaW5kZXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzLnZhbHVlID0gY3VyVmFsdWU7XHJcbiAgICAgICAgcmVzLmhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRJbnRWYWx1ZShzdHI6IGFueSkge1xyXG4gICAgICAgIGlmIChzdHIgPT0gXCIwXCIgfHwgKChzdHIgfCAwKSA+IDAgJiYgc3RyICUgMSA9PSAwKSlcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzdHIpO1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtCYXNlLCBJU3VydmV5RGF0YSwgSGFzaFRhYmxlfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtRdWVzdGlvblNlbGVjdEJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkRyb3Bkb3duTW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25DaGVja2JveE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9jaGVja2JveFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tIFwiLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25UZXh0TW9kZWx9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSBcIi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5pbXBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxsXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgb25Sb3dDaGFuZ2VkKGNlbGw6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBuZXdSb3dWYWx1ZTogYW55KTtcclxuICAgIGNvbHVtbnM6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPjtcclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbjtcclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93bkNvbHVtbiBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc090aGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWluV2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY2VsbFR5cGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG4gICAgcHVibGljIGlucHV0VHlwZTogc3RyaW5nID0gXCJ0ZXh0XCI7XHJcbiAgICBwdWJsaWMgY2hvaWNlc09yZGVyOiBzdHJpbmcgPSBcIm5vbmVcIjtcclxuICAgIHB1YmxpYyBjaG9pY2VzQnlVcmw6IENob2ljZXNSZXN0ZnVsbDtcclxuICAgIHB1YmxpYyBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb2xDb3VudFZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmNob2ljZXNCeVVybCA9IG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCkgeyByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiIH1cclxuICAgIFxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dCA/IHRoaXMubG9jVGl0bGUudGV4dCA6IHRoaXMubmFtZTsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbih2YWx1ZTogc3RyaW5nKXsgdGhpcy5sb2NPcHRpb25zQ2FwdGlvbi50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNob2ljZXNWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAtMSB8fCB2YWx1ZSA+IDQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNvbENvdW50VmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlID0gZGF0YS5jcmVhdGVRdWVzdGlvbih0aGlzLnJvdywgdGhpcy5jb2x1bW4pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZS5zZXREYXRhKHJvdyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5xdWVzdGlvbi52YWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RGF0YSwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaWRDb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWQoKTogc3RyaW5nIHsgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrOyB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YTtcclxuICAgIHByaXZhdGUgcm93VmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSByb3dDb21tZW50czogSGFzaFRhYmxlPGFueT4gPSB7fTtcclxuICAgIHByaXZhdGUgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaWRWYWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5nZXRJZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRDZWxscygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5yb3dWYWx1ZXM7IH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm93VmFsdWVzID0ge307XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1ZhbHVlc1trZXldID0gdmFsdWVba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5jZWxsc1tpXS5xdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLmdldFZhbHVlKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93VmFsdWVzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiKSBuZXdWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dWYWx1ZXNbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yb3dWYWx1ZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQodGhpcywgdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NvbW1lbnRzW25hbWVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDb21tZW50c1tuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VtcHR5KCkge1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO31cclxuICAgIHByaXZhdGUgYnVpbGRDZWxscygpIHtcclxuICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZGF0YS5jb2x1bW5zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIGV4dGVuZHMgUXVlc3Rpb24gaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgIGFkZERlZmF1bHRDb2x1bW5zKG1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSkge1xyXG4gICAgICAgIHZhciBjb2xOYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkgKyspXHJcbiAgICAgICAgICAgIG1hdHJpeC5hZGRDb2x1bW4oY29sTmFtZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIGxvY09wdGlvbnNDYXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNlbGxUeXBlVmFsdWU6IHN0cmluZyA9IFwiZHJvcGRvd25cIjtcclxuICAgIHByaXZhdGUgY29sdW1uQ29sQ291bnRWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb2x1bW5NaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29sdW1uc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHB1YmxpYyB1cGRhdGVDZWxsc0NhbGxiYWs6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlID0gSXRlbVZhbHVlLmNyZWF0ZUFycmF5KHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29sdW1uc01ldGhvZHMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHsgcmV0dXJuIHRoaXMuY29sdW1uc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbHVtbnModmFsdWU6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPikge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vdmVycmlkZUNvbHVtbnNNZXRob2RzKCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVDb2x1bW5zTWV0aG9kcygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlLmxvY093bmVyID0gc2VsZjtcclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNWYWx1ZS5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQ/OiBudW1iZXIsIGRlbGV0ZUNvdW50PzogbnVtYmVyLCAuLi5pdGVtczogTWF0cml4RHJvcGRvd25Db2x1bW5bXSk6IE1hdHJpeERyb3Bkb3duQ29sdW1uW10ge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uIGl0ZW1zKTtcclxuICAgICAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IHNlbGY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbHVtbnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY2VsbFR5cGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjZWxsVHlwZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2VsbFR5cGUgPT0gbmV3VmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNlbGxUeXBlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnVwZGF0ZUNlbGxzQ2FsbGJhayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbHVtbkNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sdW1uQ29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Db2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy51cGRhdGVDZWxsc0NhbGxiYWspO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENvbHVtblRpdGxlKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5pc1JlcXVpcmVkICYmIHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHZhciByZXF1aXJlVGV4dCA9IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dDtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVUZXh0KSByZXF1aXJlVGV4dCArPSBcIiBcIjtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVxdWlyZVRleHQgKyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5taW5XaWR0aCA/IGNvbHVtbi5taW5XaWR0aCA6IHRoaXMuY29sdW1uTWluV2lkdGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNob2ljZXNWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5jaG9pY2VzVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7IHJldHVybiB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIik7IH1cclxuICAgIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24obmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY09wdGlvbnNDYXB0aW9uLnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZTsgfVxyXG4gICAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xyXG4gICAgICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1ZhbHVlLnB1c2goY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3cobmFtZTogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoY3VyVmFsdWU6IGFueSk6IGFueSB7IHJldHVybiAhY3VyVmFsdWUgPyB7fSA6IGN1clZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgcXVlc3Rpb25WYWx1ZTogYW55LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7fTtcclxuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV0gPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZighKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xyXG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgICAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiYgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBlcnJvc0luQ29sdW1ucyA9IHRoaXMuaGFzRXJyb3JJbkNvbHVtbnMoZmlyZUNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJbkNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc0Vycm9ySW5Db2x1bW5zKGZpcmVDYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBjZWxscyAmJiBjZWxsc1tjb2xJbmRleF0gJiYgY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uICYmIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKSB8fCByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0Q2VsbFF1ZXN0aW9uKHRydWUpO1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uLmN1cnJlbnRFcnJvckNvdW50ID4gMCkgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy9JTWF0cml4RHJvcGRvd25EYXRhXHJcbiAgICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uQ29yZShyb3csIGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24ubmFtZSA9IGNvbHVtbi5uYW1lO1xyXG4gICAgICAgIHF1ZXN0aW9uLmlzUmVxdWlyZWQgPSBjb2x1bW4uaXNSZXF1aXJlZDtcclxuICAgICAgICBxdWVzdGlvbi5oYXNPdGhlciA9IGNvbHVtbi5oYXNPdGhlcjtcclxuICAgICAgICBxdWVzdGlvbi5yZWFkT25seSA9IHRoaXMucmVhZE9ubHk7XHJcbiAgICAgICAgcXVlc3Rpb24uc2V0RGF0YSh0aGlzLnN1cnZleSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5oYXNPdGhlcikge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24gaW5zdGFuY2VvZiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcclxuICAgICAgICAgICAgICAgICg8UXVlc3Rpb25TZWxlY3RCYXNlPnF1ZXN0aW9uKS5zdG9yZU90aGVyc0FzQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcclxuICAgICAgICB2YXIgY2VsbFR5cGUgPSBjb2x1bW4uY2VsbFR5cGUgPT0gXCJkZWZhdWx0XCIgPyB0aGlzLmNlbGxUeXBlIDogY29sdW1uLmNlbGxUeXBlO1xyXG4gICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXRRdWVzdGlvbk5hbWUocm93LCBjb2x1bW4pO1xyXG4gICAgICAgIGlmIChjZWxsVHlwZSA9PSBcImNoZWNrYm94XCIpIHJldHVybiB0aGlzLmNyZWF0ZUNoZWNrYm94KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwicmFkaW9ncm91cFwiKSByZXR1cm4gdGhpcy5jcmVhdGVSYWRpb2dyb3VwKG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwidGV4dFwiKSByZXR1cm4gdGhpcy5jcmVhdGVUZXh0KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgaWYgKGNlbGxUeXBlID09IFwiY29tbWVudFwiKSByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5hbWUsIGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRHJvcGRvd24obmFtZSwgY29sdW1uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRRdWVzdGlvbk5hbWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7IHJldHVybiByb3cucm93TmFtZSArIFwiX1wiICsgY29sdW1uLm5hbWU7IH1cclxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBBcnJheTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLmNob2ljZXMgJiYgY29sdW1uLmNob2ljZXMubGVuZ3RoID4gMCA/IGNvbHVtbi5jaG9pY2VzIDogdGhpcy5jaG9pY2VzO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW4ub3B0aW9uc0NhcHRpb24gPyBjb2x1bW4ub3B0aW9uc0NhcHRpb24gOiB0aGlzLm9wdGlvbnNDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURyb3Bkb3duKG5hbWU6IHN0cmluZywgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxLCBjb2x1bW4pO1xyXG4gICAgICAgIHEub3B0aW9uc0NhcHRpb24gPSB0aGlzLmdldENvbHVtbk9wdGlvbnNDYXB0aW9uKGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2hlY2tib3gobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcclxuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbkNoZWNrYm94TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJjaGVja2JveFwiLCBuYW1lKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdEJhc2VQcm9wZXJ0aWVzKHEsIGNvbHVtbik7XHJcbiAgICAgICAgcS5jb2xDb3VudCA9IGNvbHVtbi5jb2xDb3VudCA+IC0gMSA/IGNvbHVtbi5jb2xDb3VudCA6IHRoaXMuY29sdW1uQ29sQ291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUmFkaW9ncm91cChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIG5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0QmFzZVByb3BlcnRpZXMocSwgY29sdW1uKTtcclxuICAgICAgICBxLmNvbENvdW50ID0gY29sdW1uLmNvbENvdW50ID4gLSAxID8gY29sdW1uLmNvbENvdW50IDogdGhpcy5jb2x1bW5Db2xDb3VudDtcclxuICAgICAgICByZXR1cm4gcTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRTZWxlY3RCYXNlUHJvcGVydGllcyhxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc09yZGVyID0gY29sdW1uLmNob2ljZXNPcmRlcjtcclxuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5nZXRDb2x1bW5DaG9pY2VzKGNvbHVtbik7XHJcbiAgICAgICAgcXVlc3Rpb24uY2hvaWNlc0J5VXJsLnNldERhdGEoY29sdW1uLmNob2ljZXNCeVVybCk7XHJcbiAgICAgICAgaWYoIXF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGV4dChuYW1lOiBzdHJpbmcsIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvblRleHRNb2RlbCB7XHJcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25UZXh0TW9kZWw+dGhpcy5jcmVhdGVDZWxsUXVlc3Rpb24oXCJ0ZXh0XCIsIG5hbWUpO1xyXG4gICAgICAgIHEuaW5wdXRUeXBlID0gY29sdW1uLmlucHV0VHlwZTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbW1lbnQobmFtZTogc3RyaW5nLCBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb25Db21tZW50TW9kZWwge1xyXG4gICAgICAgIHZhciBxID0gPFF1ZXN0aW9uQ29tbWVudE1vZGVsPnRoaXMuY3JlYXRlQ2VsbFF1ZXN0aW9uKFwiY29tbWVudFwiLCBuYW1lKTtcclxuICAgICAgICBxLnBsYWNlSG9sZGVyID0gY29sdW1uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNlbGxRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xyXG4gICAgICAgIHJldHVybiA8UXVlc3Rpb24+UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUobmV3VmFsdWU6IGFueSwgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XHJcbiAgICAgICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwID8gbnVsbCA6IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25Sb3dDaGFuZ2VkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIG5ld1Jvd1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCBuZXdWYWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSBkZWxldGUgcm93VmFsdWVba2V5XTtcclxuICAgICAgICBpZiAobmV3Um93VmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuZXdSb3dWYWx1ZSkgcm93VmFsdWVba2V5XSA9IG5ld1Jvd1ZhbHVlW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKG5ld1ZhbHVlLCByb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIiwgW1wibmFtZVwiLCB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLmNob2ljZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICAgICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwifSAsIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sQ291bnRcIiwgZGVmYXVsdDogLTEsIGNob2ljZXM6IFstMSwgMCwgMSwgMiwgMywgNF0gfSwgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIiwgXCJoYXNPdGhlcjpib29sZWFuXCIsIFwibWluV2lkdGhcIiwgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifSxcclxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc09yZGVyXCIsIGRlZmF1bHQ6IFwibm9uZVwiLCBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIiwgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIG9iai5jaG9pY2VzQnlVcmwuaXNFbXB0eSA/IG51bGwgOiBvYmouY2hvaWNlc0J5VXJsOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTsgfSB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJpbnB1dFR5cGVcIiwgZGVmYXVsdDogXCJ0ZXh0XCIsIGNob2ljZXM6IFtcImNvbG9yXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIiwgXCJlbWFpbFwiLCBcIm1vbnRoXCIsIFwibnVtYmVyXCIsIFwicGFzc3dvcmRcIiwgXCJyYW5nZVwiLCBcInRlbFwiLCBcInRleHRcIiwgXCJ0aW1lXCIsIFwidXJsXCIsIFwid2Vla1wiXSB9XSxcclxuICAgICAgICBcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTsgfSk7XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25iYXNlXCIsIFt7IG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIiwgY2xhc3NOYW1lOiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCJ9LFxyXG4gICAgICAgIFwiaG9yaXpvbnRhbFNjcm9sbDpib29sZWFuXCIsXHJcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlc1wiLCBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnkpIHsgcmV0dXJuIEl0ZW1WYWx1ZS5nZXREYXRhKG9iai5jaG9pY2VzKTsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7IG9iai5jaG9pY2VzID0gdmFsdWU7IH19LFxyXG4gICAgICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJjZWxsVHlwZVwiLCBkZWZhdWx0OiBcImRyb3Bkb3duXCIsIGNob2ljZXM6IFtcImRyb3Bkb3duXCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCIsIFwidGV4dFwiLCBcImNvbW1lbnRcIl0gfSxcclxuICAgICAgICB7IG5hbWU6IFwiY29sdW1uQ29sQ291bnRcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDMsIDRdIH0sIFwiY29sdW1uTWluV2lkdGhcIl0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwiaW1wb3J0IHtCYXNlLCBJUXVlc3Rpb24sIElDb25kaXRpb25SdW5uZXIsIElTdXJ2ZXlEYXRhLCBJU3VydmV5LCBIYXNoVGFibGV9IGZyb20gJy4vYmFzZSc7XHJcbmltcG9ydCB7UXVlc3Rpb25DdXN0b21XaWRnZXR9IGZyb20gJy4vcXVlc3Rpb25DdXN0b21XaWRnZXRzJztcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tICcuL2pzb25vYmplY3QnO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSAnLi9jb25kaXRpb25zJztcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lcn0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJhc2UgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSVF1ZXN0aW9uLCBJQ29uZGl0aW9uUnVubmVyLCBJTG9jYWxpemFibGVPd25lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBxdWVzdGlvbkNvdW50ZXIgPSAxMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbkJhc2UucXVlc3Rpb25Db3VudGVyKys7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGF0YTogSVN1cnZleURhdGE7XHJcbiAgICBwcml2YXRlIHN1cnZleVZhbHVlOiBJU3VydmV5O1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XHJcbiAgICBwdWJsaWMgY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldDtcclxuICAgIHB1YmxpYyB2aXNpYmxlSWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgc3RhcnRXaXRoTmV3TGluZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgdmlzaWJsZUluZGV4VmFsdWU6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSByZW5kZXJXaWR0aFZhbHVlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSByaWdodEluZGVudFZhbHVlOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGluZGVudDogbnVtYmVyID0gMDtcclxuICAgIGZvY3VzQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICByZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgdmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHZpc2libGVJbmRleENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkOyAgICBcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvbkJhc2UuZ2V0UXVlc3Rpb25JZCgpO1xyXG4gICAgICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnZpc2libGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucm93VmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQoPElRdWVzdGlvbj50aGlzLCB0aGlzLnZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlIHx8ICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVJbmRleCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy52aXNpYmxlSW5kZXhWYWx1ZTsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gMDsgfVxyXG4gICAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmlkVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhcnRXaXRoTmV3TGluZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHsgXHJcbiAgICAgICAgaWYodGhpcy5zdGFydFdpdGhOZXdMaW5lID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGFydFdpdGhOZXdMaW5lVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZih0aGlzLnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByZW5kZXJXaWR0aCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5yZW5kZXJXaWR0aFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlbmRlcldpZHRoKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnJlbmRlcldpZHRoKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZW5kZXJXaWR0aFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yaWdodEluZGVudFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnJpZ2h0SW5kZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yaWdodEluZGVudFZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyV2lkdGhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzKG9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZSkgeyB9XHJcbiAgICBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIGlmKG5ld1ZhbHVlICYmIG5ld1ZhbHVlW1wicXVlc3Rpb25BZGRlZFwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleVZhbHVlID0gPElTdXJ2ZXk+bmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25TZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHByb3RlY3RlZCBmaXJlQ2FsbGJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25TZXREYXRhKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHsgfVxyXG4gICAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGVJZikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25SdW5uZXIpIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgLy9JUXVlc3Rpb25cclxuICAgIHB1YmxpYyBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZUluZGV4VmFsdWUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZpc2libGVJbmRleFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy52aXNpYmxlSW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBjbGVhclVudXNlZFZhbHVlcygpIHt9XHJcbiAgICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkKCkge31cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gKDxJTG9jYWxpemFibGVPd25lcj48YW55PnRoaXMuZGF0YSkuZ2V0TG9jYWxlKCkgOiBcIlwiOyBcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicXVlc3Rpb25iYXNlXCIsIFtcIiFuYW1lXCIsIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcInZpc2libGVJZjpleHByZXNzaW9uXCIsXHJcbiAgICB7IG5hbWU6IFwid2lkdGhcIiB9LCB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWV9LCB7bmFtZTogXCJpbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXX1dKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25iYXNlLnRzIiwiaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7QmFzZSwgSVN1cnZleSwgSGFzaFRhYmxlLCBJUXVlc3Rpb24sIElFbGVtZW50LCBJQ29uZGl0aW9uUnVubmVyLCBJUGFnZSwgU3VydmV5RXJyb3IsIEV2ZW50fSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7SVN1cnZleVRyaWdnZXJPd25lciwgU3VydmV5VHJpZ2dlcn0gZnJvbSBcIi4vdHJpZ2dlclwiO1xyXG5pbXBvcnQge1BhZ2VNb2RlbH0gZnJvbSBcIi4vcGFnZVwiO1xyXG5pbXBvcnQge1RleHRQcmVQcm9jZXNzb3J9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtQcm9jZXNzVmFsdWV9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xyXG5pbXBvcnQge2R4U3VydmV5U2VydmljZX0gZnJvbSBcIi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SnNvbkVycm9yfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtDdXN0b21FcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtDdXN0b21XaWRnZXRDb2xsZWN0aW9ufSBmcm9tICcuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cyc7XHJcbmltcG9ydCB7SUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleU1vZGVsIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElTdXJ2ZXksIElTdXJ2ZXlUcmlnZ2VyT3duZXIsIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICAgIHB1YmxpYyBzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBzdXJ2ZXlQb3N0SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2xpZW50SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY29va2llTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBzZW5kUmVzdWx0T25QYWdlTmV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb21tZW50UHJlZml4OiBzdHJpbmcgPSBcIi1Db21tZW50XCI7XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd1BhZ2VUaXRsZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dDb21wbGV0ZWRQYWdlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyByZXF1aXJlZFRleHQ6IHN0cmluZyA9IFwiKlwiO1xyXG4gICAgcHVibGljIHF1ZXN0aW9uU3RhcnRJbmRleDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBzaG93UHJvZ3Jlc3NCYXI6IHN0cmluZyA9IFwib2ZmXCI7XHJcbiAgICBwdWJsaWMgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwYWdlczogQXJyYXk8UGFnZU1vZGVsPiA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XHJcbiAgICBwdWJsaWMgdHJpZ2dlcnM6IEFycmF5PFN1cnZleVRyaWdnZXI+ID0gbmV3IEFycmF5PFN1cnZleVRyaWdnZXI+KCk7XHJcbiAgICBwdWJsaWMgY2xlYXJJbnZpc2libGVWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGxvY1RpdGxlVmFsdWUgOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jQ29tcGxldGVkSHRtbFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1BhZ2VQcmV2VGV4dFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1BhZ2VOZXh0VGV4dFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY0NvbXBsZXRlVGV4dFZhbHVlIDogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRQYWdlVmFsdWU6IFBhZ2VNb2RlbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHZhbHVlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHZhcmlhYmxlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XHJcbiAgICBwcml2YXRlIHBhZ2VQcmV2VGV4dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHBhZ2VOZXh0VGV4dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNvbXBsZXRlVGV4dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHNob3dQYWdlTnVtYmVyc1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHNob3dRdWVzdGlvbk51bWJlcnNWYWx1ZTogc3RyaW5nID0gXCJvblwiO1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZTogc3RyaW5nID0gXCJ0b3BcIjtcclxuICAgIHByaXZhdGUgbG9jYWxlVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGlzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBwcm9jZXNzZWRUZXh0VmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IHt9O1xyXG4gICAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBUZXh0UHJlUHJvY2Vzc29yO1xyXG4gICAgcHJpdmF0ZSBpc1ZhbGlkYXRpbmdPblNlcnZlclZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG1vZGVWYWx1ZTogc3RyaW5nID0gXCJlZGl0XCI7XHJcbiAgICBwcml2YXRlIGlzRGVzaWduTW9kZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG9uQ29tcGxldGU6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFydGlhbFNlbmQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQ3VycmVudFBhZ2VDaGFuZ2VkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblZpc2libGVDaGFuZ2VkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25QYWdlVmlzaWJsZUNoYW5nZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblF1ZXN0aW9uQWRkZWQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblF1ZXN0aW9uUmVtb3ZlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFuZWxBZGRlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUGFuZWxSZW1vdmVkOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25WYWxpZGF0ZVF1ZXN0aW9uOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uczogKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55O1xyXG4gICAgcHVibGljIG9uUHJvY2Vzc0h0bWw6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblNlbmRSZXN1bHQ6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkdldFJlc3VsdDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uVXBsb2FkRmlsZTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJTdXJ2ZXk6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFnZTogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbjogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uQWZ0ZXJSZW5kZXJQYW5lbDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIGpzb25FcnJvcnM6IEFycmF5PEpzb25FcnJvcj4gPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY0NvbXBsZXRlZEh0bWxWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1BhZ2VQcmV2VGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jUGFnZU5leHRUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NDb21wbGV0ZVRleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgVGV4dFByZVByb2Nlc3NvcigpO1xyXG4gICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vbkhhc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykgeyByZXR1cm4gc2VsZi5oYXNQcm9jZXNzZWRUZXh0VmFsdWUobmFtZSk7IH07XHJcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uUHJvY2VzcyA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHsgcmV0dXJuIHNlbGYuZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWUpOyB9O1xyXG4gICAgICAgIHRoaXMucGFnZXMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhID0gc2VsZjtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50cmlnZ2Vycy5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLnNldE93bmVyKHNlbGYpO1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2Nlc3NlZFRleHRWYWx1ZXMoKTtcclxuICAgICAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcclxuICAgICAgICBpZiAoanNvbk9iaikge1xyXG4gICAgICAgICAgICB0aGlzLnNldEpzb25PYmplY3QoanNvbk9iaik7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cnZleUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInN1cnZleVwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NhbGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9jYWxlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uY3VycmVudExvY2FsZSA9IHZhbHVlO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLm9uTG9jYWxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKSB7IHJldHVybiB0aGlzLmxvY2FsZTsgfVxyXG4gICAgcHVibGljIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykgeyByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpOyB9XHJcblxyXG4gICAgcHVibGljIGdldCBlbXB0eVN1cnZleVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwiZW1wdHlTdXJ2ZXlcIik7IH1cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGUudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jVGl0bGUudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBjb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlZEh0bWwudGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IGNvbXBsZXRlZEh0bWwodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0NvbXBsZXRlZEh0bWwudGV4dCA9IHZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgbG9jQ29tcGxldGVkSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlZEh0bWxWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IHBhZ2VQcmV2VGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQYWdlUHJldlRleHQudGV4dCA/IHRoaXMubG9jUGFnZVByZXZUZXh0LnRleHQgOiB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTsgfVxyXG4gICAgcHVibGljIHNldCBwYWdlUHJldlRleHQobmV3VmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BhZ2VQcmV2VGV4dC50ZXh0ID0gbmV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGFnZVByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZVByZXZUZXh0VmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBwYWdlTmV4dFRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGFnZU5leHRUZXh0LnRleHQgPyB0aGlzLmxvY1BhZ2VOZXh0VGV4dC50ZXh0IDogdGhpcy5nZXRMb2NTdHJpbmcoXCJwYWdlTmV4dFRleHRcIik7IH1cclxuICAgIHB1YmxpYyBzZXQgcGFnZU5leHRUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQYWdlTmV4dFRleHQudGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BhZ2VOZXh0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BhZ2VOZXh0VGV4dFZhbHVlO31cclxuICAgIHB1YmxpYyBnZXQgY29tcGxldGVUZXh0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY0NvbXBsZXRlVGV4dC50ZXh0ID8gdGhpcy5sb2NDb21wbGV0ZVRleHQudGV4dCA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbXBsZXRlVGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jQ29tcGxldGVUZXh0LnRleHQgPSBuZXdWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NDb21wbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NDb21wbGV0ZVRleHRWYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUudGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7IHJldHVybiB0aGlzLmxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVZhbHVlOyB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93UGFnZU51bWJlcnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnNob3dQYWdlTnVtYmVyc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dQYWdlTnVtYmVycyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5zaG93UGFnZU51bWJlcnMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNob3dQYWdlTnVtYmVyc1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnNWYWx1ZTsgfTtcclxuICAgIHB1YmxpYyBzZXQgc2hvd1F1ZXN0aW9uTnVtYmVycyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgIH07XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkgeyByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dCh0aGlzLnRpdGxlKTsgfVxyXG4gICAgcHVibGljIGdldCBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uVmFsdWU7IH07XHJcbiAgICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb25WYWx1ZSA9IHZhbHVlO1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBnZXQgbW9kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5tb2RlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMubW9kZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBcImVkaXRcIiAmJiB2YWx1ZSAhPSBcImRpc3BsYXlcIikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubW9kZVZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFsdWVzSGFzaCkge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMudmFsdWVzSGFzaFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXREYXRhVmFsdWUoZGF0YTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzSGFzaFtrZXldID0gZGF0YVtrZXldO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkYXRhKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzSGFzaCA9IHt9O1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhVmFsdWUoZGF0YSwga2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhrZXksIGRhdGFba2V5XSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNba2V5LnRvTG93ZXJDYXNlKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2tleS50b0xvd2VyQ2FzZSgpXSA9IFwidmFsdWVcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbW1lbnRzKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlc0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuY29tbWVudFByZWZpeCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMudmFsdWVzSGFzaFtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBnZXQgdmlzaWJsZVBhZ2VzKCk6IEFycmF5PFBhZ2VNb2RlbD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucGFnZXM7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5wYWdlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoID09IDA7IH1cclxuICAgIHB1YmxpYyBnZXQgUGFnZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlUGFnZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFBhZ2UoKTogUGFnZU1vZGVsIHtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBudWxsICYmIHZQYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRQYWdlKHZhbHVlOiBQYWdlTW9kZWwpIHtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdlBhZ2VzLmluZGV4T2YodmFsdWUpIDwgMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDdXN0b21XaWRnZXRzKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlQ2hhbmdlZCh2YWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBjdXJyZW50UGFnZU5vKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRQYWdlTm8odmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IHRoaXMudmlzaWJsZVBhZ2VzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1t2YWx1ZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlLnNjcm9sbFRvVG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VWYWx1ZS5mb2N1c0ZpcnN0UXVlc3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKSByZXR1cm4gXCJsb2FkaW5nXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQpIHJldHVybiBcImNvbXBsZXRlZFwiO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSkgPyBcInJ1bm5pbmdcIiA6IFwiZW1wdHlcIlxyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKGNsZWFyRGF0YTogYm9vbGVhbiA9IHRydWUsIGdvdG9GaXJzdFBhZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGNsZWFyRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc0hhc2ggPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChnb3RvRmlyc3RQYWdlICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VzWzBdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBtZXJnZVZhbHVlcyhzcmM6IGFueSwgZGVzdDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0IHx8ICFzcmMpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNyY1trZXldO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkZXN0W2tleV0pIGRlc3Rba2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgZGVzdFtrZXldKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUN1c3RvbVdpZGdldHMocGFnZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwYWdlLnF1ZXN0aW9uc1tpXS5jdXN0b21XaWRnZXQgPSBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmdldEN1c3RvbVdpZGdldChwYWdlLnF1ZXN0aW9uc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdlZChuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ29sZEN1cnJlbnRQYWdlJzogb2xkVmFsdWUsICduZXdDdXJyZW50UGFnZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCgoaW5kZXggKiAxMDAgLyB0aGlzLnZpc2libGVQYWdlQ291bnQpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xyXG4gICAgICAgIGlmICghcGFnZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSA9PSBcInNob3dcIiB8fFxyXG4gICAgICAgICAgICAocGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgIT0gXCJoaWRlXCIgJiYgdGhpcy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0VkaXRNb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5tb2RlID09IFwiZWRpdFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm1vZGUgPT0gXCJkaXNwbGF5XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc0Rlc2lnbk1vZGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldERlc2lnbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzRGVzaWduTW9kZVZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0Nvb2tpZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llO1xyXG4gICAgICAgIHJldHVybiBjb29raWVzICYmIGNvb2tpZXMuaW5kZXhPZih0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlXCIpID4gLTE7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Q29va2llKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm47XHJcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gdGhpcy5jb29raWVOYW1lICsgXCI9dHJ1ZTsgZXhwaXJlcz1GcmksIDMxIERlYyA5OTk5IDA6MDowIEdNVFwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRlbGV0ZUNvb2tpZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPTtcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBuZXh0UGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLmlzQ3VycmVudFBhZ2VIYXNFcnJvcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24oKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZG9OZXh0UGFnZSgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzQ3VycmVudFBhZ2VIYXNFcnJvcnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UuaGFzRXJyb3JzKHRydWUsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHByZXZQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbaW5kZXggLSAxXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjb21wbGV0ZUxhc3RQYWdlKCkgOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuaXNDdXJyZW50UGFnZUhhc0Vycm9ycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRvU2VydmVyVmFsaWRhdGlvbigpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4geyBcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSA9PSAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICByZXR1cm4gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgPT0gdlBhZ2VzLmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9Db21wbGV0ZSgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyVW51c2VkVmFsdWVzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb29raWUoKTtcclxuICAgICAgICB0aGlzLnNldENvbXBsZXRlZCgpO1xyXG4gICAgICAgIHRoaXMub25Db21wbGV0ZS5maXJlKHRoaXMsIG51bGwpO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleVBvc3RJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRSZXN1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGluZ09uU2VydmVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlclZhbHVlOyB9XHJcbiAgICBwcml2YXRlIHNldElzVmFsaWRhdGluZ09uU2VydmVyKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXJWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLm9uSXNWYWxpZGF0aW5nT25TZXJ2ZXJDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKSB7IH1cclxuICAgIHByb3RlY3RlZCBkb1NlcnZlclZhbGlkYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGRhdGE6IHt9LCBlcnJvcnM6IHt9LCBzdXJ2ZXk6IHRoaXMsIGNvbXBsZXRlIDogZnVuY3Rpb24gKCkgeyBzZWxmLmNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zKTsgfSB9O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocXVlc3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgb3B0aW9ucy5kYXRhW3F1ZXN0aW9uLm5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjb21wbGV0ZVNlcnZlclZhbGlkYXRpb24ob3B0aW9uczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZXRJc1ZhbGlkYXRpbmdPblNlcnZlcihmYWxzZSk7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zICYmICFvcHRpb25zLnN1cnZleSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBzZWxmID0gb3B0aW9ucy5zdXJ2ZXk7XHJcbiAgICAgICAgdmFyIGhhc0Vycm9ycyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmVycm9ycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBzZWxmLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uW1wiZXJyb3JzXCJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbltcImFkZEVycm9yXCJdKG5ldyBDdXN0b21FcnJvcihvcHRpb25zLmVycm9yc1tuYW1lXSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGFzRXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmlzTGFzdFBhZ2UpIHNlbGYuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICBlbHNlIHNlbGYuZG9OZXh0UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBkb05leHRQYWdlKCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tPblBhZ2VUcmlnZ2VycygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbmRSZXN1bHRPblBhZ2VOZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFJlc3VsdCh0aGlzLnN1cnZleVBvc3RJZCwgdGhpcy5jbGllbnRJZCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcclxuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4ICsgMV07XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0Q29tcGxldGVkKCkge1xyXG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkSHRtbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbCh0aGlzLmNvbXBsZXRlZEh0bWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI8aDM+XCIgKyB0aGlzLmdldExvY1N0cmluZyhcImNvbXBsZXRpbmdTdXJ2ZXlcIikgKyBcIjwvaDM+XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb2Nlc3NlZExvYWRpbmdIdG1sKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJsb2FkaW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgKyAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInByb2dyZXNzVGV4dFwiKVtcImZvcm1hdFwiXShpbmRleCwgdlBhZ2VzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXJTdXJ2ZXkoaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkuZmlyZSh0aGlzLCB7IHN1cnZleTogdGhpcywgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50IH0pO1xyXG4gICAgfVxyXG4gICAgYWZ0ZXJSZW5kZXJQYWdlKGh0bWxFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25BZnRlclJlbmRlclBhZ2UuaXNFbXB0eSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclBhZ2UuZmlyZSh0aGlzLCB7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCB9KTtcclxuICAgIH1cclxuICAgIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbi5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcbiAgICBhZnRlclJlbmRlclBhbmVsKHBhbmVsOiBJRWxlbWVudCwgaHRtbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYW5lbC5maXJlKHRoaXMsIHsgcGFuZWw6IHBhbmVsLCBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZEZpbGUobmFtZTogc3RyaW5nLCBmaWxlOiBGaWxlLCBzdG9yZURhdGFBc1RleHQ6IGJvb2xlYW4sIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcpPT5hbnkpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgYWNjZXB0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uVXBsb2FkRmlsZS5maXJlKHRoaXMsIHsgbmFtZTogbmFtZSwgZmlsZTogZmlsZSwgYWNjZXB0OiBhY2NlcHQgfSk7XHJcbiAgICAgICAgaWYgKCFhY2NlcHQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIXN0b3JlRGF0YUFzVGV4dCAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb3JlKG5hbWUsIGZpbGUsIHVwbG9hZGluZ0NhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBsb2FkRmlsZUNvcmUobmFtZTogc3RyaW5nLCBmaWxlOiBGaWxlLCB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nKSA9PiBhbnkpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInVwbG9hZGluZ1wiKTtcclxuICAgICAgICBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCkuc2VuZEZpbGUodGhpcy5zdXJ2ZXlQb3N0SWQsIGZpbGUsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaykgdXBsb2FkaW5nQ2FsbGJhY2soc3VjY2VzcyA/IFwic3VjY2Vzc1wiIDogXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2V0VmFsdWUobmFtZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBnZXRQYWdlKGluZGV4OiBudW1iZXIpOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGFkZFBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBhZGROZXdQYWdlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jcmVhdGVOZXdQYWdlKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuYWRkUGFnZShwYWdlKTtcclxuICAgICAgICByZXR1cm4gcGFnZTtcclxuICAgIH1cclxuICAgIHJlbW92ZVBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBwYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZywgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UpOiBJUXVlc3Rpb24ge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25OYW1lID0gcXVlc3Rpb25zW2ldLm5hbWU7XHJcbiAgICAgICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHF1ZXN0aW9uTmFtZSA9IHF1ZXN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZihxdWVzdGlvbk5hbWUgPT0gbmFtZSkgcmV0dXJuIHF1ZXN0aW9uc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UXVlc3Rpb25zQnlOYW1lcyhuYW1lczogc3RyaW5nW10sIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVF1ZXN0aW9uW10ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoIW5hbWVzKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lc1tpXSwgY2FzZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uKSByZXN1bHQucHVzaChxdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0UGFnZUJ5RWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IFBhZ2VNb2RlbCB7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xyXG4gICAgICAgICAgICBpZihwYWdlLmNvbnRhaW5zRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VCeVF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBQYWdlTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeUVsZW1lbnQocXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VCeU5hbWUobmFtZTogc3RyaW5nKTogUGFnZU1vZGVsIHtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiB0aGlzLnBhZ2VzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlc0J5TmFtZXMobmFtZXM6IHN0cmluZ1tdKTogUGFnZU1vZGVsW117XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghbmFtZXNbaV0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMuZ2V0UGFnZUJ5TmFtZShuYW1lc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChwYWdlKSByZXN1bHQucHVzaChwYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRBbGxRdWVzdGlvbnModmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElRdWVzdGlvbj4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8SVF1ZXN0aW9uPigpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0uYWRkUXVlc3Rpb25zVG9MaXN0KHJlc3VsdCwgdmlzaWJsZU9ubHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhZ2UobmFtZTogc3RyaW5nKSB7IHJldHVybiBuZXcgUGFnZU1vZGVsKG5hbWUpOyB9XHJcbiAgICBwcml2YXRlIG5vdGlmeVF1ZXN0aW9uT25WYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV0ubmFtZSAhPSBuYW1lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuZG9TdXJ2ZXlWYWx1ZUNoYW5nZWQocXVlc3Rpb24sIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ25hbWUnOiBuYW1lLCAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ3ZhbHVlJzogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5kb1N1cnZleVZhbHVlQ2hhbmdlZChxdWVzdGlvbnNbaV0sIHRoaXMuZ2V0VmFsdWUocXVlc3Rpb25zW2ldLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZG9TdXJ2ZXlWYWx1ZUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHF1ZXN0aW9uLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tPblBhZ2VUcmlnZ2VycygpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZShxdWVzdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RyaWdnZXJzKHF1ZXN0aW9uLm5hbWUsIHZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uQmFzZT4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcGFnZS5xdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24ubmFtZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hlY2tUcmlnZ2VycyhuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnksIGlzT25OZXh0UGFnZTogYm9vbGVhbikge1xyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0cmlnZ2VyID0gdGhpcy50cmlnZ2Vyc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRyaWdnZXIubmFtZSA9PSBuYW1lICYmIHRyaWdnZXIuaXNPbk5leHRQYWdlID09IGlzT25OZXh0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlci5jaGVjayhuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvRWxlbWVudHNPbkxvYWQoKSB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ub25TdXJ2ZXlMb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBydW5Db25kaXRpb25zKCkge1xyXG4gICAgICAgIHZhciBwYWdlcyA9IHRoaXMucGFnZXM7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBwYWdlc1tpXS5ydW5Db25kaXRpb24odGhpcy52YWx1ZXNIYXNoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2VuZFJlc3VsdChwb3N0SWQ6IHN0cmluZyA9IG51bGwsIGNsaWVudElkOiBzdHJpbmcgPSBudWxsLCBpc1BhcnRpYWxDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCAmJiB0aGlzLm9uUGFydGlhbFNlbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5vblBhcnRpYWxTZW5kLmZpcmUodGhpcywgbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXBvc3RJZCAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xyXG4gICAgICAgICAgICBwb3N0SWQgPSB0aGlzLnN1cnZleVBvc3RJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwb3N0SWQpIHJldHVybjtcclxuICAgICAgICBpZiAoY2xpZW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmICF0aGlzLmNsaWVudElkKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5zZW5kUmVzdWx0KHBvc3RJZCwgdGhpcy5kYXRhLCBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBzZWxmLm9uU2VuZFJlc3VsdC5maXJlKHNlbGYsIHsgc3VjY2Vzczogc3VjY2VzcywgcmVzcG9uc2U6IHJlc3BvbnNlfSk7XHJcbiAgICAgICAgfSwgdGhpcy5jbGllbnRJZCwgaXNQYXJ0aWFsQ29tcGxldGVkKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRSZXN1bHQocmVzdWx0SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIG5ldyBkeFN1cnZleVNlcnZpY2UoKS5nZXRSZXN1bHQocmVzdWx0SWQsIG5hbWUsIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCBkYXRhOiBhbnksIGRhdGFMaXN0OiBhbnlbXSwgcmVzcG9uc2U6IGFueSkge1xyXG4gICAgICAgICAgICBzZWxmLm9uR2V0UmVzdWx0LmZpcmUoc2VsZiwgeyBzdWNjZXNzOiBzdWNjZXNzLCBkYXRhOiBkYXRhLCBkYXRhTGlzdDogZGF0YUxpc3QsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkU3VydmV5RnJvbVNlcnZpY2Uoc3VydmV5SWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBpZiAoc3VydmV5SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKTtcclxuICAgICAgICBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCkubG9hZFN1cnZleSh0aGlzLnN1cnZleUlkLCBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldEpzb25PYmplY3QocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHNlbGYubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHNlbGYub25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCkge1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja1BhZ2VWaXNpYmlsaXR5KHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9sZFF1ZXN0aW9uVmlzaWJsZTogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlRdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKCFwYWdlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gcGFnZS5pc1Zpc2libGU7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IHBhZ2UuZ2V0SXNQYWdlVmlzaWJsZShxdWVzdGlvbikgfHwgb2xkUXVlc3Rpb25WaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2UsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZVZpc2libGVJbmRleGVzKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVZpc2libGVJbmRleGVzKHRoaXMuc2hvd1BhZ2VOdW1iZXJzKTtcclxuICAgICAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25QYWdlXCIpIHtcclxuICAgICAgICAgICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25WaXNpYmxlSW5kZXhlcyh2aXNQYWdlc1tpXS5xdWVzdGlvbnMsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvblZpc2libGVJbmRleGVzKHRoaXMuZ2V0QWxsUXVlc3Rpb25zKGZhbHNlKSwgdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXMoc2hvd0luZGV4OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS52aXNpYmxlSW5kZXggPSB0aGlzLnBhZ2VzW2ldLnZpc2libGUgPyAoaW5kZXgrKykgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5udW0gPSBzaG93SW5kZXggJiYgdGhpcy5wYWdlc1tpXS52aXNpYmxlID8gdGhpcy5wYWdlc1tpXS52aXNpYmxlSW5kZXggKyAxIDogLTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblZpc2libGVJbmRleGVzKHF1ZXN0aW9uczogSVF1ZXN0aW9uW10sIHNob3dJbmRleDogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLnNldFZpc2libGVJbmRleChzaG93SW5kZXggJiYgcXVlc3Rpb25zW2ldLnZpc2libGUgJiYgcXVlc3Rpb25zW2ldLmhhc1RpdGxlID8gKGluZGV4KyspIDogLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBpc0xvYWRpbmdGcm9tSnNvbigpIHsgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBzZXRKc29uT2JqZWN0KGpzb25PYmo6IGFueSkge1xyXG4gICAgICAgIGlmICghanNvbk9iaikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuanNvbkVycm9ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB2YXIganNvbkNvbnZlcnRlciA9IG5ldyBKc29uT2JqZWN0KCk7XHJcbiAgICAgICAganNvbkNvbnZlcnRlci50b09iamVjdChqc29uT2JqLCB0aGlzKTtcclxuICAgICAgICBpZiAoanNvbkNvbnZlcnRlci5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25FcnJvcnMgPSBqc29uQ29udmVydGVyLmVycm9ycztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9jZXNzZWRUZXh0VmFsdWVzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29va2llKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRvRWxlbWVudHNPbkxvYWQoKTtcclxuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGluZygpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQ3JlYXRpbmcoKSB7IH1cclxuICAgIHByaXZhdGUgdXBkYXRlUHJvY2Vzc2VkVGV4dFZhbHVlcygpIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXMgPSB7fTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW1wicGFnZW5vXCJdID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHNlbGYuY3VycmVudFBhZ2UgIT0gbnVsbCA/IHNlbGYudmlzaWJsZVBhZ2VzLmluZGV4T2Yoc2VsZi5jdXJyZW50UGFnZSkgKyAxIDogMDsgfVxyXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tcInBhZ2Vjb3VudFwiXSA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBzZWxmLnZpc2libGVQYWdlQ291bnQ7IH1cclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uVG9Qcm9jZXNzZWRUZXh0VmFsdWVzKHF1ZXN0aW9uc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRRdWVzdGlvblRvUHJvY2Vzc2VkVGV4dFZhbHVlcyhxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW3F1ZXN0aW9uLm5hbWUudG9Mb3dlckNhc2UoKV0gPSBcInF1ZXN0aW9uXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGhhc1Byb2Nlc3NlZFRleHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZShuYW1lKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRUZXh0VmFsdWVzW2ZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRGaXJzdE5hbWUobmFtZSk7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMucHJvY2Vzc2VkVGV4dFZhbHVlc1tmaXJzdE5hbWUudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh2YWwgPT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlKG5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWwgPT0gXCJxdWVzdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoZmlyc3ROYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIG5hbWUgPSBxdWVzdGlvbi5uYW1lICsgbmFtZS5zdWJzdHIoZmlyc3ROYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUobmFtZSwgdGhpcy52YWx1ZXNIYXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbCA9PSBcInZhbHVlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhbHVlc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjbGVhclVudXNlZFZhbHVlcygpIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclVudXNlZFZhbHVlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jbGVhckludmlzaWJsZVZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zW2ldLnZpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUocXVlc3Rpb25zW2ldLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnZhcmlhYmxlc0hhc2hbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IFwidmFyaWFibGVcIjtcclxuICAgIH1cclxuICAgIC8vSVN1cnZleSBkYXRhXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VW5iaW5kVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIC8vZG8gbm90IHJldHVybiB0aGUgc2FtZSBvYmplY3QgaW5zdGFuY2UhISFcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVzSGFzaFtuYW1lXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVxdWFsKG5hbWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJcIiB8fCBuZXdWYWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNIYXNoW25hbWVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFRleHRWYWx1ZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IFwidmFsdWVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmNoZWNrVHJpZ2dlcnMobmFtZSwgbmV3VmFsdWUsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzVmFsdWVFcXVhbChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPT0gXCJcIikgbmV3VmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSBudWxsKSByZXR1cm4gbmV3VmFsdWUgPT09IG9sZFZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIG9sZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB0cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5nb05leHRQYWdlQXV0b21hdGljIHx8ICF0aGlzLmN1cnJlbnRQYWdlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcclxuICAgICAgICBpZiAocXVlc3Rpb24gJiYgKCFxdWVzdGlvbi52aXNpYmxlIHx8ICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpKSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5oYXNJbnB1dCAmJiAhdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0ubmFtZSkpIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQYWdlLmhhc0Vycm9ycyh0cnVlLCBmYWxzZSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhW25hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXhdO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbmFtZSA9IG5hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXg7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcIlwiIHx8IG5ld1ZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc0hhc2hbbmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2xlYXJWYWx1ZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldFZhbHVlKG5hbWUsIG51bGwpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29tbWVudChuYW1lLCBudWxsKTtcclxuICAgIH1cclxuICAgIHF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywgeyAncXVlc3Rpb24nOiBxdWVzdGlvbiwgJ25hbWUnOiBxdWVzdGlvbi5uYW1lLCAndmlzaWJsZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgICAgIHRoaXMuY2hlY2tQYWdlVmlzaWJpbGl0eShxdWVzdGlvbiwgIW5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgJ3BhZ2UnOiBwYWdlLCAndmlzaWJsZSc6IG5ld1ZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb25BZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uVG9Qcm9jZXNzZWRUZXh0VmFsdWVzKHF1ZXN0aW9uKTtcclxuICAgICAgICB0aGlzLm9uUXVlc3Rpb25BZGRlZC5maXJlKHRoaXMsIHsgJ3F1ZXN0aW9uJzogcXVlc3Rpb24sICduYW1lJzogcXVlc3Rpb24ubmFtZSwgJ2luZGV4JzogaW5kZXgsICdwYXJlbnRQYW5lbCc6IHBhcmVudFBhbmVsLCAncm9vdFBhbmVsJzogcm9vdFBhbmVsIH0pO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb25SZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XHJcbiAgICAgICAgdGhpcy5vblF1ZXN0aW9uUmVtb3ZlZC5maXJlKHRoaXMsIHsgJ3F1ZXN0aW9uJzogcXVlc3Rpb24sICduYW1lJzogcXVlc3Rpb24ubmFtZSB9KTtcclxuICAgIH1cclxuICAgIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUGFuZWxBZGRlZC5maXJlKHRoaXMsIHsgJ3BhbmVsJzogcGFuZWwsICduYW1lJzogcGFuZWwubmFtZSwgJ2luZGV4JzogaW5kZXgsICdwYXJlbnRQYW5lbCc6IHBhcmVudFBhbmVsLCAncm9vdFBhbmVsJzogcm9vdFBhbmVsIH0pO1xyXG4gICAgfVxyXG4gICAgcGFuZWxSZW1vdmVkKHBhbmVsOiBJRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcclxuICAgICAgICB0aGlzLm9uUGFuZWxSZW1vdmVkLmZpcmUodGhpcywgeyAncGFuZWwnOiBwYW5lbCwgJ25hbWUnOiBwYW5lbC5uYW1lIH0pO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGVRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBTdXJ2ZXlFcnJvciB7XHJcbiAgICAgICAgaWYgKHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmlzRW1wdHkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBvcHRpb25zID0geyBuYW1lOiBuYW1lLCB2YWx1ZTogdGhpcy5nZXRWYWx1ZShuYW1lKSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB0aGlzLm9uVmFsaWRhdGVRdWVzdGlvbi5maXJlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3IpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGh0bWw6IGh0bWwgfTtcclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0h0bWwuZmlyZSh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dChvcHRpb25zLmh0bWwpO1xyXG4gICAgfVxyXG4gICAgcHJvY2Vzc1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGV4dCk7XHJcbiAgICB9XHJcbiAgICAvL0lTdXJ2ZXlUcmlnZ2VyT3duZXJcclxuICAgIGdldE9iamVjdHMocGFnZXM6IHN0cmluZ1tdLCBxdWVzdGlvbnM6IHN0cmluZ1tdKTogYW55W117XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRQYWdlc0J5TmFtZXMocGFnZXMpKTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc1ZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFyaWFibGUobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy9NYWtlIGxvY2FsaXphYmxlOiBjb21wbGV0ZWRIdG1sLCBwYWdlUHJldlRleHQsIHBhZ2VOZXh0VGV4dCwgY29tcGxldGVUZXh0XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic3VydmV5XCIsIFt7IG5hbWU6IFwibG9jYWxlXCIsIGNob2ljZXM6ICgpID0+IHsgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRMb2NhbGVzKCkgfSB9LFxyXG4gICAge25hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCJ9LCB7IG5hbWU6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZX0sIFxyXG4gICAge25hbWU6IFwiY29tcGxldGVkSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRIdG1sXCJ9LCB7IG5hbWU6IFwicGFnZXNcIiwgY2xhc3NOYW1lOiBcInBhZ2VcIiwgdmlzaWJsZTogZmFsc2UgfSxcclxuICAgIHsgbmFtZTogXCJxdWVzdGlvbnNcIiwgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLCB2aXNpYmxlOiBmYWxzZSwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gbnVsbDsgfSwgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsdWUsIGpzb25Db252ZXJ0ZXIpIHsgdmFyIHBhZ2UgPSBvYmouYWRkTmV3UGFnZShcIlwiKTsganNvbkNvbnZlcnRlci50b09iamVjdCh7IHF1ZXN0aW9uczogdmFsdWUgfSwgcGFnZSk7IH0gfSxcclxuICAgIHsgbmFtZTogXCJ0cmlnZ2Vyczp0cmlnZ2Vyc1wiLCBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXRyaWdnZXJcIiwgY2xhc3NOYW1lUGFydDogXCJ0cmlnZ2VyXCIgfSxcclxuICAgIFwic3VydmV5SWRcIiwgXCJzdXJ2ZXlQb3N0SWRcIiwgXCJjb29raWVOYW1lXCIsIFwic2VuZFJlc3VsdE9uUGFnZU5leHQ6Ym9vbGVhblwiLFxyXG4gICAgeyBuYW1lOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgeyBuYW1lOiBcInNob3dUaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgXHJcbiAgICB7IG5hbWU6IFwic2hvd1BhZ2VUaXRsZXM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sIHsgbmFtZTogXCJzaG93Q29tcGxldGVkUGFnZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcclxuICAgIFwic2hvd1BhZ2VOdW1iZXJzOmJvb2xlYW5cIiwgeyBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgZGVmYXVsdDogXCJvblwiLCBjaG9pY2VzOiBbXCJvblwiLCBcIm9uUGFnZVwiLCBcIm9mZlwiXSB9LFxyXG4gICAgeyBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCBkZWZhdWx0OiBcInRvcFwiLCBjaG9pY2VzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0gfSxcclxuICAgIHsgbmFtZTogXCJzaG93UHJvZ3Jlc3NCYXJcIiwgZGVmYXVsdDogXCJvZmZcIiwgY2hvaWNlczogW1wib2ZmXCIsIFwidG9wXCIsIFwiYm90dG9tXCJdIH0sXHJcbiAgICB7IG5hbWU6IFwibW9kZVwiLCBkZWZhdWx0OiBcImVkaXRcIiwgY2hvaWNlczogW1wiZWRpdFwiLCBcImRpc3BsYXlcIl0gfSxcclxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSwgXCJnb05leHRQYWdlQXV0b21hdGljOmJvb2xlYW5cIiwgXCJjbGVhckludmlzaWJsZVZhbHVlczpib29sZWFuXCIsXHJcbiAgICB7IG5hbWU6IFwicGFnZVByZXZUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlUHJldlRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlTmV4dFRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwiY29tcGxldGVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZVRleHRcIn0sXHJcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRUZXh0XCIsIGRlZmF1bHQ6IFwiKlwiIH0sIFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHtuYW1lOiBcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCJ9XSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleS50cyIsImV4cG9ydCBjbGFzcyBUZXh0UHJlUHJvY2Vzc29ySXRlbSB7XHJcbiAgICBwdWJsaWMgc3RhcnQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBlbmQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3Ige1xyXG4gICAgcHVibGljIG9uUHJvY2VzczogKG5hbWU6IHN0cmluZykgPT4gYW55O1xyXG4gICAgcHVibGljIG9uSGFzVmFsdWU6IChuYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgcHVibGljIHByb2Nlc3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIGlmICghdGhpcy5vblByb2Nlc3MpIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZ2V0SXRlbXModGV4dCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKHRleHQuc3Vic3RyaW5nKGl0ZW0uc3RhcnQgKyAxLCBpdGVtLmVuZCkpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuUHJvY2Vzc05hbWUobmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkhhc1ZhbHVlICYmICF0aGlzLm9uSGFzVmFsdWUobmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLm9uUHJvY2VzcyhuYW1lKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDAsIGl0ZW0uc3RhcnQpICsgdmFsdWUgKyB0ZXh0LnN1YnN0cihpdGVtLmVuZCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0SXRlbXModGV4dDogc3RyaW5nKTogQXJyYXk8VGV4dFByZVByb2Nlc3Nvckl0ZW0+IHtcclxuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gLTE7XHJcbiAgICAgICAgdmFyIGNoID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjaCA9IHRleHRbaV07XHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAneycpIHN0YXJ0ID0gaTtcclxuICAgICAgICAgICAgaWYgKGNoID09ICd9Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RhcnQgPSBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVuZCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgcmV0dXJuIG5hbWUudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjYW5Qcm9jZXNzTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoID0gbmFtZVtpXTtcclxuICAgICAgICAgICAgLy9UT0RPXHJcbiAgICAgICAgICAgIGlmIChjaCA9PSAnICcgfHwgY2ggPT0gJy0nIHx8IGNoID09ICcmJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzIiwiaW1wb3J0IHtCYXNlLCBTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSAnLi9qc29ub2JqZWN0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBhbnksIHB1YmxpYyBlcnJvcjogU3VydmV5RXJyb3IgPSBudWxsKSB7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlIHtcclxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRFcnJvclRleHQobmFtZTogc3RyaW5nKSA6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMudGV4dCkgcmV0dXJuIHRoaXMudGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0RXJyb3JUZXh0KG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0b3JPd25lciB7XHJcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+O1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZztcclxufVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUnVubmVyIHtcclxuICAgIHB1YmxpYyBydW4ob3duZXI6IElWYWxpZGF0b3JPd25lcik6IFN1cnZleUVycm9yIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG93bmVyLnZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvclJlc3VsdCA9IG93bmVyLnZhbGlkYXRvcnNbaV0udmFsaWRhdGUob3duZXIudmFsdWUsIG93bmVyLmdldFZhbGlkYXRvclRpdGxlKCkpO1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yUmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3JSZXN1bHQuZXJyb3IpIHJldHVybiB2YWxpZGF0b3JSZXN1bHQuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yUmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3duZXIudmFsdWUgPSB2YWxpZGF0b3JSZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBtaW5WYWx1ZTogbnVtYmVyID0gbnVsbCwgcHVibGljIG1heFZhbHVlOiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcIm51bWVyaWN2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICghdmFsdWUgfHwgIXRoaXMuaXNOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIG5ldyBSZXF1cmVOdW1lcmljRXJyb3IoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgVmFsaWRhdG9yUmVzdWx0KHBhcnNlRmxvYXQodmFsdWUpKTtcclxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAmJiB0aGlzLm1pblZhbHVlID4gcmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvciA9IG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heFZhbHVlICYmIHRoaXMubWF4VmFsdWUgPCByZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yID0gbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSA/IG51bGwgOiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgdk5hbWUgPSBuYW1lID8gbmFtZSA6IFwidmFsdWVcIjtcclxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAmJiB0aGlzLm1heFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY01pbk1heFwiKVtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWluVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY01pblwiKVtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJudW1lcmljTWF4XCIpW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1heFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzTnVtYmVyKHZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgJiYgaXNGaW5pdGUodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbWluTGVuZ3RoOiBudW1iZXIgPSAwLCBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInRleHR2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoIDwgdGhpcy5taW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB0aGlzLm1heExlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidGV4dE1pbk1heExlbmd0aFwiKVtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCwgdGhpcy5tYXhMZW5ndGgpO1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDApIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidGV4dE1pbkxlbmd0aFwiKVtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0ZXh0TWF4TGVuZ3RoXCIpW1wiZm9ybWF0XCJdKHRoaXMubWF4TGVuZ3RoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFuc3dlckNvdW50VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBtaW5Db3VudDogbnVtYmVyID0gbnVsbCwgcHVibGljIG1heENvdW50OiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCI7IH1cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVmFsaWRhdG9yUmVzdWx0IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5jb25zdHJ1Y3RvciAhPSBBcnJheSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGNvdW50ID0gdmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLm1pbkNvdW50ICYmIGNvdW50IDwgdGhpcy5taW5Db3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQoc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1pblNlbGVjdEVycm9yXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluQ291bnQpKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXhDb3VudCAmJiBjb3VudCA+IHRoaXMubWF4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXhTZWxlY3RFcnJvclwiKVtcImZvcm1hdFwiXSh0aGlzLm1heENvdW50KSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlZ2V4VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWdleDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJyZWdleHZhbGlkYXRvclwiOyB9XHJcbiAgICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nID0gbnVsbCk6IFZhbGlkYXRvclJlc3VsdCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlZ2V4IHx8ICF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCh0aGlzLnJlZ2V4KTtcclxuICAgICAgICBpZiAocmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSkpKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xyXG4gICAgcHJpdmF0ZSByZSA9IC9eKChbXjw+KClcXFtcXF1cXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiZW1haWx2YWxpZGF0b3JcIjsgfVxyXG4gICAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyA9IG51bGwpOiBWYWxpZGF0b3JSZXN1bHQge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnJlLnRlc3QodmFsdWUpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdCh2YWx1ZSwgbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpKSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImludmFsaWRFbWFpbFwiKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInN1cnZleXZhbGlkYXRvclwiLCBbXCJ0ZXh0XCJdKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm51bWVyaWN2YWxpZGF0b3JcIiwgW1wibWluVmFsdWU6bnVtYmVyXCIsIFwibWF4VmFsdWU6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTnVtZXJpY1ZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRleHR2YWxpZGF0b3JcIiwgW1wibWluTGVuZ3RoOm51bWJlclwiLCBcIm1heExlbmd0aDpudW1iZXJcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBUZXh0VmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIiwgW1wibWluQ291bnQ6bnVtYmVyXCIsIFwibWF4Q291bnQ6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQW5zd2VyQ291bnRWYWxpZGF0b3IoKTsgfSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJyZWdleHZhbGlkYXRvclwiLCBbXCJyZWdleFwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlZ2V4VmFsaWRhdG9yKCk7IH0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiZW1haWx2YWxpZGF0b3JcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbWFpbFZhbGlkYXRvcigpOyB9LCBcInN1cnZleXZhbGlkYXRvclwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdmFsaWRhdG9yLnRzIiwiaW1wb3J0IHtRdWVzdGlvbiBhcyBRdWVzdGlvbk1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbidcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzID0ge1xyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGdldEluZGVudFNpemU6IGZ1bmN0aW9uIChxdWVzdGlvbjogUXVlc3Rpb25Nb2RlbCwgaW5kZW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICBpZiAoaW5kZW50IDwgMSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb25bXCJkYXRhXCJdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgdmFyIGNzcyA9IHF1ZXN0aW9uW1wiZGF0YVwiXVtcImNzc1wiXTtcclxuICAgICAgICAgICAgaWYgKCFjc3MpIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5kZW50ICogY3NzLnF1ZXN0aW9uLmluZGVudCArIFwicHhcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Z1ZS9oZWxwZXJzLnRzIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7Q29uZGl0aW9uLCBDb25kaXRpb25Ob2RlfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uc1BhcnNlciB7XHJcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgcm9vdDogQ29uZGl0aW9uTm9kZTtcclxuICAgIHByaXZhdGUgZXhwcmVzc2lvbk5vZGVzOiBBcnJheTxDb25kaXRpb25Ob2RlPjtcclxuICAgIHByaXZhdGUgbm9kZTogQ29uZGl0aW9uTm9kZTtcclxuICAgIHByaXZhdGUgYXQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgbGVuZ3RoOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFyc2UodGV4dDogc3RyaW5nLCByb290OiBDb25kaXRpb25Ob2RlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcclxuICAgICAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgICAgIHRoaXMucm9vdC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuYXQgPSAwO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy50ZXh0Lmxlbmd0aDtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5wYXJzZVRleHQoKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHRvU3RyaW5nKHJvb3Q6IENvbmRpdGlvbk5vZGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZVRvU3RyaW5nKHJvb3QpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB0b1N0cmluZ0NvcmUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgaWYgKHZhbHVlW1wiY2hpbGRyZW5cIl0pIHJldHVybiB0aGlzLm5vZGVUb1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlW1wibGVmdFwiXSkgcmV0dXJuIHRoaXMuY29uZGl0aW9uVG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBub2RlVG9TdHJpbmcobm9kZTogQ29uZGl0aW9uTm9kZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG5vZGUuaXNFbXB0eSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgdmFyIHJlcyA9IFwiXCI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlVGV4dCA9IHRoaXMudG9TdHJpbmdDb3JlKG5vZGUuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICBpZiAobm9kZVRleHQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHJlcyArPSAnICcgKyBub2RlLmNvbm5lY3RpdmUgKyAnICc7XHJcbiAgICAgICAgICAgICAgICByZXMgKz0gbm9kZVRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUgIT0gdGhpcy5yb290ICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXMgPSAnKCcgKyByZXMgKyAnKSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvblRvU3RyaW5nKGNvbmRpdGlvbjogQ29uZGl0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWNvbmRpdGlvbi5yaWdodCB8fCAhY29uZGl0aW9uLm9wZXJhdG9yKSByZXR1cm4gXCJcIjtcclxuICAgICAgICB2YXIgbGVmdCA9IGNvbmRpdGlvbi5sZWZ0O1xyXG4gICAgICAgIGlmIChsZWZ0ICYmICF0aGlzLmlzTnVtZXJpYyhsZWZ0KSkgbGVmdCA9IFwiJ1wiICsgbGVmdCArIFwiJ1wiO1xyXG4gICAgICAgIHZhciByZXMgPSBsZWZ0ICsgJyAnICsgdGhpcy5vcGVyYXRpb25Ub1N0cmluZyhjb25kaXRpb24ub3BlcmF0b3IpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzTm9SaWdodE9wZXJhdGlvbihjb25kaXRpb24ub3BlcmF0b3IpKSByZXR1cm4gcmVzO1xyXG4gICAgICAgIHZhciByaWdodCA9IGNvbmRpdGlvbi5yaWdodDtcclxuICAgICAgICBpZiAocmlnaHQgJiYgIXRoaXMuaXNOdW1lcmljKHJpZ2h0KSkgcmlnaHQgPSBcIidcIiArIHJpZ2h0ICsgXCInXCI7XHJcbiAgICAgICAgcmV0dXJuIHJlcyArICcgJyArIHJpZ2h0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvcGVyYXRpb25Ub1N0cmluZyhvcDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAob3AgPT0gXCJlcXVhbFwiKSByZXR1cm4gXCI9XCI7XHJcbiAgICAgICAgaWYgKG9wID09IFwibm90ZXF1YWxcIikgcmV0dXJuIFwiIT1cIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJncmVhdGVyXCIpIHJldHVybiBcIj5cIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJsZXNzXCIpIHJldHVybiBcIjxcIjtcclxuICAgICAgICBpZiAob3AgPT0gXCJncmVhdGVyb3JlcXVhbFwiKSByZXR1cm4gXCI+PVwiO1xyXG4gICAgICAgIGlmIChvcCA9PSBcImxlc3NvcmVxdWFsXCIpIHJldHVybiBcIjw9XCI7XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc051bWVyaWModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciB2YWwgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWwpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBwYXJzZVRleHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5yb290O1xyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbk5vZGVzID0gW107XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTm9kZXMucHVzaCh0aGlzLm5vZGUpO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlYWRDb25kaXRpb25zKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlcyAmJiB0aGlzLmF0ID49IHRoaXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWFkQ29uZGl0aW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5yZWFkQ29uZGl0aW9uKCk7XHJcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiByZXM7XHJcbiAgICAgICAgdmFyIGNvbm5lY3RpdmUgPSB0aGlzLnJlYWRDb25uZWN0aXZlKCk7XHJcbiAgICAgICAgaWYgKGNvbm5lY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDb25uZWN0aXZlKGNvbm5lY3RpdmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkQ29uZGl0aW9ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZENvbmRpdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgZXhwUmVzID0gdGhpcy5yZWFkRXhwcmVzc2lvbigpO1xyXG4gICAgICAgIGlmIChleHBSZXMgPCAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoZXhwUmVzID09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHZhciBsZWZ0ID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKCFsZWZ0KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIG9wID0gdGhpcy5yZWFkT3BlcmF0b3IoKTtcclxuICAgICAgICBpZiAoIW9wKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGMgPSBuZXcgQ29uZGl0aW9uKCk7XHJcbiAgICAgICAgYy5sZWZ0ID0gbGVmdDsgYy5vcGVyYXRvciA9IG9wO1xyXG4gICAgICAgIGlmICghdGhpcy5pc05vUmlnaHRPcGVyYXRpb24ob3ApKSB7XHJcbiAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMucmVhZFN0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoIXJpZ2h0KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGMucmlnaHQgPSByaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRDb25kaXRpb24oYyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRFeHByZXNzaW9uKCk6IG51bWJlciB7XHJcbiAgICAgICAgdGhpcy5za2lwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXQgPj0gdGhpcy5sZW5ndGggfHwgdGhpcy5jaCAhPSAnKCcpIHJldHVybiAwO1xyXG4gICAgICAgIHRoaXMuYXQrKztcclxuICAgICAgICB0aGlzLnB1c2hFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMucmVhZENvbmRpdGlvbnMoKTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xyXG4gICAgICAgICAgICByZXMgPSB0aGlzLmNoID09IDxzdHJpbmc+JyknO1xyXG4gICAgICAgICAgICB0aGlzLmF0Kys7XHJcbiAgICAgICAgICAgIHRoaXMucG9wRXhwcmVzc2lvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgY2goKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGV4dC5jaGFyQXQodGhpcy5hdCk7IH1cclxuICAgIHByaXZhdGUgc2tpcCgpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5hdCA8IHRoaXMubGVuZ3RoICYmIHRoaXMuaXNTcGFjZSh0aGlzLmNoKSkgdGhpcy5hdCsrO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc1NwYWNlKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcXG4nIHx8IGMgPT0gJ1xcdCcgfHwgYyA9PSAnXFxyJztcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNRdW90ZXMoYzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGMgPT0gXCInXCIgfHwgYyA9PSAnXCInXHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzT3BlcmF0b3JDaGFyKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjID09ICc+JyB8fCBjID09ICc8JyB8fCBjID09ICc9JyB8fCBjID09ICchJztcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNCcmFja2V0cyhjOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYyA9PSAnKCcgfHwgYyA9PSAnKSc7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICB0aGlzLnNraXAoKTtcclxuICAgICAgICBpZiAodGhpcy5hdCA+PSB0aGlzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5hdDtcclxuICAgICAgICB2YXIgaGFzUXVvdGVzID0gdGhpcy5pc1F1b3Rlcyh0aGlzLmNoKTtcclxuICAgICAgICBpZiAoaGFzUXVvdGVzKSB0aGlzLmF0Kys7XHJcbiAgICAgICAgdmFyIGlzRmlyc3RPcENoID0gdGhpcy5pc09wZXJhdG9yQ2hhcih0aGlzLmNoKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5hdCA8IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICghaGFzUXVvdGVzICYmIHRoaXMuaXNTcGFjZSh0aGlzLmNoKSkgYnJlYWs7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUXVvdGVzKHRoaXMuY2gpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzUXVvdGVzKSB0aGlzLmF0Kys7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWhhc1F1b3Rlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3RPcENoICE9IHRoaXMuaXNPcGVyYXRvckNoYXIodGhpcy5jaCkpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNCcmFja2V0cyh0aGlzLmNoKSkgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hdCA8PSBzdGFydCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMudGV4dC5zdWJzdHIoc3RhcnQsIHRoaXMuYXQgLSBzdGFydCk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDEgJiYgdGhpcy5pc1F1b3RlcyhyZXNbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gcmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1F1b3RlcyhyZXNbcmVzLmxlbmd0aCAtIDFdKSkgbGVuLS07XHJcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc3Vic3RyKDEsIGxlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNOb1JpZ2h0T3BlcmF0aW9uKG9wOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3AgPT0gXCJlbXB0eVwiIHx8IG9wID09IFwibm90ZW1wdHlcIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZE9wZXJhdG9yKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIG9wID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKCFvcCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgb3AgPSBvcC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPicpIG9wID0gXCJncmVhdGVyXCI7XHJcbiAgICAgICAgaWYgKG9wID09ICc8Jykgb3AgPSBcImxlc3NcIjtcclxuICAgICAgICBpZiAob3AgPT0gJz49JyB8fCBvcCA9PSAnPT4nKSBvcCA9IFwiZ3JlYXRlcm9yZXF1YWxcIjtcclxuICAgICAgICBpZiAob3AgPT0gJzw9JyB8fCBvcCA9PSAnPTwnKSBvcCA9IFwibGVzc29yZXF1YWxcIjtcclxuICAgICAgICBpZiAob3AgPT0gJz0nIHx8IG9wID09ICc9PScpIG9wID0gXCJlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnPD4nIHx8IG9wID09ICchPScpIG9wID0gXCJub3RlcXVhbFwiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnY29udGFpbicpIG9wID0gXCJjb250YWluc1wiO1xyXG4gICAgICAgIGlmIChvcCA9PSAnbm90Y29udGFpbicpIG9wID0gXCJub3Rjb250YWluc1wiO1xyXG4gICAgICAgIHJldHVybiBvcDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZENvbm5lY3RpdmUoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgY29uID0gdGhpcy5yZWFkU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKCFjb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbiA9IGNvbi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChjb24gPT0gXCImXCIgfHwgY29uID09IFwiJiZcIikgY29uID0gXCJhbmRcIjtcclxuICAgICAgICBpZiAoY29uID09IFwifFwiIHx8IGNvbiA9PSBcInx8XCIpIGNvbiA9IFwib3JcIjtcclxuICAgICAgICBpZiAoY29uICE9IFwiYW5kXCIgJiYgY29uICE9IFwib3JcIikgY29uID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gY29uO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBwdXNoRXhwcmVzc2lvbigpIHtcclxuICAgICAgICB2YXIgbm9kZSA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTm9kZXMucHVzaChub2RlKTtcclxuICAgICAgICB0aGlzLm5vZGUgPSBub2RlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBwb3BFeHByZXNzaW9uKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gdGhpcy5leHByZXNzaW9uTm9kZXMucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5leHByZXNzaW9uTm9kZXNbdGhpcy5leHByZXNzaW9uTm9kZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgdGhpcy5ub2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFkZENvbmRpdGlvbihjOiBDb25kaXRpb24pIHtcclxuICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChjKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkQ29ubmVjdGl2ZShjb246IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUuY2hpbGRyZW4ubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdGl2ZSA9IGNvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlLmNvbm5lY3RpdmUgIT0gY29uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uID0gdGhpcy5ub2RlLmNvbm5lY3RpdmU7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ2hpbGRyZW4gPSB0aGlzLm5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5jb25uZWN0aXZlID0gY29uO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZE5vZGUgPSBuZXcgQ29uZGl0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgb2xkTm9kZS5jb25uZWN0aXZlID0gb2xkQ29uO1xyXG4gICAgICAgICAgICAgICAgb2xkTm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNoaWxkcmVuLnB1c2gob2xkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3Tm9kZSA9IG5ldyBDb25kaXRpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uZGl0aW9uc1BhcnNlci50cyIsImV4cG9ydCBjbGFzcyBkeFN1cnZleVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXJ2aWNlVXJsOiBzdHJpbmcgPSBcImh0dHBzOi8vZHhzdXJ2ZXlhcGkuYXp1cmV3ZWJzaXRlcy5uZXQvYXBpL1N1cnZleVwiO1xyXG4gICAgLy9wdWJsaWMgc3RhdGljIHNlcnZpY2VVcmw6IHN0cmluZyA9IFwiaHR0cDovL2xvY2FsaG9zdDo1MDQ4OC9hcGkvU3VydmV5XCI7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkU3VydmV5KHN1cnZleUlkOiBzdHJpbmcsIG9uTG9hZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArICcvZ2V0U3VydmV5P3N1cnZleUlkPScgKyBzdXJ2ZXlJZCk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2VuZFJlc3VsdChwb3N0SWQ6IHN0cmluZywgcmVzdWx0OiBKU09OLCBvblNlbmRSZXN1bHQ6IChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KT0+IHZvaWQsIGNsaWVudElkOiBzdHJpbmcgPSBudWxsLCBpc1BhcnRpYWxDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbignUE9TVCcsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy9wb3N0LycpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpO1xyXG4gICAgICAgIHZhciBkYXRhID0geyBwb3N0SWQ6IHBvc3RJZCwgc3VydmV5UmVzdWx0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQpIH07XHJcbiAgICAgICAgaWYgKGNsaWVudElkKSBkYXRhWydjbGllbnRJZCddID0gY2xpZW50SWQ7XHJcbiAgICAgICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCkgZGF0YVsnaXNQYXJ0aWFsQ29tcGxldGVkJ10gPSB0cnVlO1xyXG4gICAgICAgIHZhciBkYXRhU3RyaW5naWZ5OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIW9uU2VuZFJlc3VsdCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBvblNlbmRSZXN1bHQoeGhyLnN0YXR1cyA9PSAyMDAsIHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIuc2VuZChkYXRhU3RyaW5naWZ5KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZW5kRmlsZShwb3N0SWQ6IHN0cmluZywgZmlsZTogRmlsZSwgb25TZW5kRmlsZTogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIW9uU2VuZEZpbGUpIHJldHVybjtcclxuICAgICAgICAgICAgb25TZW5kRmlsZSh4aHIuc3RhdHVzID09IDIwMCwgSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArICcvdXBsb2FkLycsIHRydWUpO1xyXG4gICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwicG9zdElkXCIsIHBvc3RJZCk7XHJcbiAgICAgICAgeGhyLnNlbmQoZm9ybURhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFJlc3VsdChyZXN1bHRJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG9uR2V0UmVzdWx0OiAoc3VjY2VzczogYm9vbGVhbiwgZGF0YTogYW55LCBkYXRhTGlzdDogQXJyYXk8YW55PiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB2YXIgZGF0YSA9ICdyZXN1bHRJZD0nICsgcmVzdWx0SWQgKyAnJm5hbWU9JyArIG5hbWU7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgJy9nZXRSZXN1bHQ/JyArIGRhdGEpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgbGlzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgbGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlc3VsdC5RdWVzdGlvblJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHsgbmFtZToga2V5LCB2YWx1ZTogcmVzdWx0LlF1ZXN0aW9uUmVzdWx0W2tleV0gfTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9uR2V0UmVzdWx0KHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIGxpc3QsIHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzQ29tcGxldGVkKHJlc3VsdElkOiBzdHJpbmcsIGNsaWVudElkOiBzdHJpbmcsIG9uSXNDb21wbGV0ZWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB2YXIgZGF0YSA9ICdyZXN1bHRJZD0nICsgcmVzdWx0SWQgKyAnJmNsaWVudElkPScgKyBjbGllbnRJZDtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyAnL2lzQ29tcGxldGVkPycgKyBkYXRhKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25Jc0NvbXBsZXRlZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9keFN1cnZleVNlcnZpY2UudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtCYXNlLCBJUGFnZSwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleSwgSUVsZW1lbnQsIElRdWVzdGlvbiwgSGFzaFRhYmxlLCBTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlQYWdlSWR9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkJhc2V9IGZyb20gXCIuL3F1ZXN0aW9uYmFzZVwiO1xyXG5pbXBvcnQge0NvbmRpdGlvblJ1bm5lcn0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWx9IGZyb20gXCIuL3BhbmVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFnZU1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJUGFnZSB7XHJcbiAgICBwcml2YXRlIG51bVZhbHVlOiBudW1iZXIgPSAtMTtcclxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IHN0cmluZyA9IFwiaW5oZXJpdFwiO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInBhZ2VcIjsgfVxyXG4gICAgcHVibGljIGdldCBudW0oKSB7IHJldHVybiB0aGlzLm51bVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IG51bSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubnVtVmFsdWUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLm51bVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbk51bUNoYW5nZWQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLmhhc0lucHV0KSBjb250aW51ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNbaV0uZm9jdXMoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGZvY3VzRmlyc3RFcnJvclF1ZXN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uc1tpXS52aXNpYmxlIHx8IHRoaXMucXVlc3Rpb25zW2ldLmN1cnJlbnRFcnJvckNvdW50ID09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpXS5mb2N1cyh0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHNjcm9sbFRvVG9wKCkge1xyXG4gICAgICAgIFN1cnZleUVsZW1lbnQuU2Nyb2xsRWxlbWVudFRvVG9wKFN1cnZleVBhZ2VJZCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25OdW1DaGFuZ2VkKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHN1cGVyLm9uVmlzaWJsZUNoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLnZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJwYWdlXCIsIFt7IG5hbWU6IFwibmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5XCIsIGRlZmF1bHQ6IFwiaW5oZXJpdFwiLCBjaG9pY2VzOiBbXCJpaGVyaXRcIiwgXCJzaG93XCIsIFwiaGlkZVwiXSB9XSwgXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUGFnZU1vZGVsKCk7IH0sIFwicGFuZWxcIik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BhZ2UudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtCYXNlLCBJUGFnZSwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleSwgSVN1cnZleURhdGEsIElFbGVtZW50LCBJUXVlc3Rpb24sIEhhc2hUYWJsZSwgU3VydmV5RWxlbWVudCwgU3VydmV5UGFnZUlkfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi9xdWVzdGlvbmJhc2VcIjtcclxuaW1wb3J0IHtDb25kaXRpb25SdW5uZXJ9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge0lMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJvd01vZGVsIHtcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuO1xyXG4gICAgdmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYW5lbDogUGFuZWxNb2RlbEJhc2UpIHtcclxuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHBhbmVsLmRhdGEgJiYgcGFuZWwuZGF0YS5pc0Rlc2lnbk1vZGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZWxlbWVudHM6IEFycmF5PElFbGVtZW50PiA9IFtdO1xyXG4gICAgLy9UT0RPIHJlbW92ZSBhZnRlciB1cGRhdGluZyByZWFjdCBhbmQgdnVlXHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxJRWxlbWVudD4geyByZXR1cm4gdGhpcy5lbGVtZW50czt9IFxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gdmFsO1xyXG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHVwZGF0ZVZpc2libGUoKSB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5jYWxjVmlzaWJsZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRFbGVtZW50KHE6IElFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKHEpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaykgdGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldFdpZHRoKCkge1xyXG4gICAgICAgIHZhciB2aXNDb3VudCA9IHRoaXMuZ2V0VmlzaWJsZUNvdW50KCk7XHJcbiAgICAgICAgaWYgKHZpc0NvdW50ID09IDApIHJldHVybjtcclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBxID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHEucmVuZGVyV2lkdGggPSBxLndpZHRoID8gcS53aWR0aCA6IE1hdGguZmxvb3IoMTAwIC8gdmlzQ291bnQpICsgJyUnO1xyXG4gICAgICAgICAgICAgICAgcS5yaWdodEluZGVudCA9IGNvdW50ZXIgPCB2aXNDb3VudCAtIDEgPyAxIDogMDtcclxuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWaXNpYmxlQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICB2YXIgcmVzID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKSByZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2FsY1Zpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmdldFZpc2libGVDb3VudCgpID4gMDsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGFuZWxNb2RlbEJhc2UgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSUNvbmRpdGlvblJ1bm5lciwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcGFuZWxDb3VudGVyID0gMTAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFuZWxJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcInNwX1wiICsgUGFuZWxNb2RlbEJhc2UucGFuZWxDb3VudGVyKys7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkYXRhVmFsdWU6IElTdXJ2ZXkgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJvd1ZhbHVlczogQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XHJcbiAgICBwcml2YXRlIGVsZW1lbnRzVmFsdWU6IEFycmF5PElFbGVtZW50PiA9IG5ldyBBcnJheTxJRWxlbWVudD4oKTtcclxuICAgIHByaXZhdGUgaXNRdWVzdGlvbnNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbnNWYWx1ZTogQXJyYXk8UXVlc3Rpb25CYXNlPiA9IG5ldyBBcnJheTxRdWVzdGlvbkJhc2U+KCk7XHJcbiAgICBwdWJsaWMgcGFyZW50OiBQYW5lbE1vZGVsQmFzZSA9IG51bGw7XHJcbiAgICBwdWJsaWMgdmlzaWJsZUlmOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcm93c0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwdWJsaWMgdmlzaWJsZUluZGV4OiBudW1iZXIgPSAtMTtcclxuICAgIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlkVmFsdWUgPSBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkKCk7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmVsZW1lbnRzVmFsdWUucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSk6IG51bWJlciB7IHJldHVybiBzZWxmLmRvT25QdXNoRWxlbWVudCh0aGlzLCB2YWx1ZSk7IH07XHJcbiAgICAgICAgdGhpcy5lbGVtZW50c1ZhbHVlLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBRdWVzdGlvbkJhc2VbXSk6IFF1ZXN0aW9uQmFzZVtdIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZG9TcGxpY2VFbGVtZW50cyh0aGlzLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IElTdXJ2ZXkgeyByZXR1cm4gdGhpcy5kYXRhVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogSVN1cnZleSkge1xyXG4gICAgICAgIGlmKHRoaXMuZGF0YVZhbHVlID09PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0uc2V0RGF0YSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmxvY1RpdGxlLnRleHQgPSBuZXdWYWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NUaXRsZVZhbHVlOyB9IFxyXG4gICAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPyAoPElMb2NhbGl6YWJsZU93bmVyPjxhbnk+dGhpcy5kYXRhKS5nZXRMb2NhbGUoKSA6IFwiXCI7IFxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHVibGljIGdldCBxdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb25CYXNlPiB7IFxyXG4gICAgICAgIGlmKCF0aGlzLmlzUXVlc3Rpb25zUmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZihlbC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHFzID0gKDxQYW5lbE1vZGVsPmVsKS5xdWVzdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IHFzLmxlbmd0aDsgaiArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlLnB1c2gocXNbal0pOyAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaCg8UXVlc3Rpb25CYXNlPmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIH0gXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtYXJrUXVlc3Rpb25MaXN0RGlydHkoKSB7XHJcbiAgICAgICAgdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50Lm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4geyByZXR1cm4gdGhpcy5lbGVtZW50c1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgY29udGFpbnNFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbDogYW55ID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgaWYoZWwgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGlmKGVsLmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmKCg8UGFuZWxNb2RlbEJhc2U+ZWwpLmNvbnRhaW5zRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCBmb2N1c2VPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgZmlyc3RFcnJvclF1ZXN0aW9uID0gbnVsbDtcclxuICAgICAgICB2YXIgdmlzaWJsZVF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkUXVlc3Rpb25zVG9MaXN0KHZpc2libGVRdWVzdGlvbnMsIHRydWUpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB2aXNpYmxlUXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZihxdWVzdGlvbi5pc1JlYWRPbmx5KSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlT25GaXJzdEVycm9yICYmIGZpcnN0RXJyb3JRdWVzdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaXJzdEVycm9yUXVlc3Rpb24pIGZpcnN0RXJyb3JRdWVzdGlvbi5mb2N1cyh0cnVlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFF1ZXN0aW9uc1RvTGlzdChsaXN0OiBBcnJheTxJUXVlc3Rpb24+LCB2aXNpYmxlT25seTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHZpc2libGVPbmx5ICYmICF0aGlzLnZpc2libGUpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgaWYgKHZpc2libGVPbmx5ICYmICFlbC52aXNpYmxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5hZGRRdWVzdGlvbnNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgeyBcclxuICAgICAgICAgICAgICAgIGxpc3QucHVzaCg8SVF1ZXN0aW9uPmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XHJcbiAgICAgICAgaWYoIXRoaXMucm93VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93VmFsdWVzID0gdGhpcy5idWlsZFJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm93VmFsdWVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpc0FjdGl2ZSgpIHsgcmV0dXJuICghdGhpcy5kYXRhKSB8fCB0aGlzLmRhdGEuY3VycmVudFBhZ2UgPT0gdGhpcy5yb290OyB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHJvb3QoKTogUGFuZWxNb2RlbEJhc2Uge1xyXG4gICAgICAgIHZhciByZXMgPSA8UGFuZWxNb2RlbEJhc2U+dGhpcztcclxuICAgICAgICB3aGlsZShyZXMucGFyZW50KSByZXMgPSByZXMucGFyZW50O1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUm93TW9kZWwodGhpcyk7IH1cclxuICAgIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25TdXJ2ZXlMb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucm93c0NoYW5nZWRDYWxsYmFjaykgdGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGlzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pc0xvYWRpbmdGcm9tSnNvbjsgfVxyXG4gICAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3dWYWx1ZXMgPSBudWxsO1xyXG4gICAgICAgIGlmKHRoaXMucm93c0NoYW5nZWRDYWxsYmFjayAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgdGhpcy5yb3dzQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBpc0Rlc2lnbk1vZGUoKSB7IHJldHVybiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlzRGVzaWduTW9kZTsgfVxyXG4gICAgcHJpdmF0ZSBkb09uUHVzaEVsZW1lbnQobGlzdDogQXJyYXk8SUVsZW1lbnQ+LCB2YWx1ZTogSUVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChsaXN0LCB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcclxuICAgICAgICB0aGlzLm9uQWRkRWxlbWVudCh2YWx1ZSwgbGlzdC5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvU3BsaWNlRWxlbWVudHMobGlzdDogQXJyYXk8SUVsZW1lbnQ+LCBzdGFydD86IG51bWJlciwgZGVsZXRlQ291bnQ/OiBudW1iZXIsIC4uLml0ZW1zOiBJRWxlbWVudFtdKSB7XHJcbiAgICAgICAgaWYoIXN0YXJ0KSBzdGFydCA9IDA7XHJcbiAgICAgICAgaWYoIWRlbGV0ZUNvdW50KSBkZWxldGVDb3VudCA9IDA7XHJcbiAgICAgICAgdmFyIGRlbGV0ZWRRdWVzdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGVsZXRlQ291bnQ7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYoaSArIHN0YXJ0ID49IGxpc3QubGVuZ3RoKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZGVsZXRlZFF1ZXN0aW9ucy5wdXNoKGxpc3RbaSArIHN0YXJ0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwobGlzdCwgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi4gaXRlbXMpO1xyXG4gICAgICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XHJcbiAgICAgICAgaWYoIWl0ZW1zKSBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkZWxldGVkUXVlc3Rpb25zLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlRWxlbWVudChkZWxldGVkUXVlc3Rpb25zW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25BZGRFbGVtZW50KGl0ZW1zW2ldLCBzdGFydCArIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZihlbGVtZW50LmlzUGFuZWwpIHtcclxuICAgICAgICAgICAgdmFyIHAgPSA8UGFuZWxNb2RlbD5lbGVtZW50O1xyXG4gICAgICAgICAgICBwLmRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgICAgIHAucGFyZW50ID0gdGhpcztcclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucGFuZWxBZGRlZChwLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb25CYXNlPmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBxLnNldERhdGEodGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5xdWVzdGlvbkFkZGVkKHEsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBlbGVtZW50LnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudCk7IH1cclxuICAgICAgICBlbGVtZW50LnN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25FbGVtZW50U3RhcnRXaXRoTmV3TGluZUNoYW5nZWQoZWxlbWVudCk7IH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgb25SZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XHJcbiAgICAgICAgaWYoIWVsZW1lbnQuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHRoaXMuZGF0YS5xdWVzdGlvblJlbW92ZWQoPFF1ZXN0aW9uQmFzZT5lbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEpIHRoaXMuZGF0YS5wYW5lbFJlbW92ZWQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yb3dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlUm93c1Zpc2liaWxpdHkoZWxlbWVudDogYW55KSAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMucm93VmFsdWVzW2ldO1xyXG4gICAgICAgICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBidWlsZFJvd3MoKTogQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4oKTtcclxuICAgICAgICB2YXIgbGFzdFJvd1Zpc2libGVJbmRleCA9IC0xO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgdmFyIGlzTmV3Um93ID0gaSA9PSAwIHx8IGVsLnN0YXJ0V2l0aE5ld0xpbmU7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSBpc05ld1JvdyA/IHRoaXMuY3JlYXRlUm93KCkgOiByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBpZihpc05ld1JvdykgcmVzdWx0LnB1c2gocm93KTtcclxuICAgICAgICAgICAgcm93LmFkZEVsZW1lbnQoZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHRbaV0udXBkYXRlVmlzaWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHsgXHJcbiAgICAgICAgdmFyIHN0ciA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgaWYoIXN0ciAmJiB0aGlzLmlzUGFuZWwgJiYgdGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBcIltcIiArIHRoaXMubmFtZSArIFwiXVwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgIT0gbnVsbCA/IHRoaXMuZGF0YS5wcm9jZXNzVGV4dChzdHIpIDogc3RyOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcclxuXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHsgIHJldHVybiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pc0Rlc2lnbk1vZGUpIHx8IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTsgfVxyXG4gICAgcHVibGljIGdldElzUGFnZVZpc2libGUoZXhjZXB0aW9uUXVlc3Rpb246IElRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNbaV0gPT0gZXhjZXB0aW9uUXVlc3Rpb24pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNbaV0udmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb25CYXNlLCBpbmRleDogbnVtYmVyID0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZEVsZW1lbnQocXVlc3Rpb24sIGluZGV4KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRQYW5lbChwYW5lbDogUGFuZWxNb2RlbCwgaW5kZXg6IG51bWJlciA9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFbGVtZW50KHBhbmVsLCBpbmRleCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkTmV3UXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uQmFzZSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XHJcbiAgICAgICAgdGhpcy5hZGRRdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZE5ld1BhbmVsKG5hbWU6IHN0cmluZyk6IFBhbmVsTW9kZWwge1xyXG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3UGFuZWwobmFtZSk7XHJcbiAgICAgICAgdGhpcy5hZGRQYW5lbChwYW5lbCk7XHJcbiAgICAgICAgcmV0dXJuIHBhbmVsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKG5hbWU6IHN0cmluZyk6IFBhbmVsTW9kZWwge1xyXG4gICAgICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbChuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCAmJiAoPFBhbmVsTW9kZWxCYXNlPig8YW55PmVsKSkucmVtb3ZlRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChxdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5ydW5Db25kaXRpb24odmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGVJZikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25SdW5uZXIpIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uTG9jYWxlQ2hhbmdlZCgpIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5vbkxvY2FsZUNoYW5nZWQoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy9leHBvcnQgY2xhc3MgXHJcbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJRWxlbWVudCB7XHJcbiAgICBwcml2YXRlIHJlbmRlcldpZHRoVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmlnaHRJbmRlbnRWYWx1ZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGlubmVySW5kZW50VmFsdWU6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHN0YXJ0V2l0aE5ld0xpbmVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICByZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBzdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInBhbmVsXCI7IH1cclxuICAgIHB1YmxpYyBzZXREYXRhKG5ld1ZhbHVlOiBJU3VydmV5RGF0YSkgeyBcclxuICAgICAgICB0aGlzLmRhdGEgPSA8SVN1cnZleT5uZXdWYWx1ZTsgXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlubmVySW5kZW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmlubmVySW5kZW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgaW5uZXJJbmRlbnQodmFsOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMuaW5uZXJJbmRlbnRWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW5uZXJJbmRlbnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZih0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnJlbmRlcldpZHRoQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnJlbmRlcldpZHRoVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMucmVuZGVyV2lkdGgpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlbmRlcldpZHRoVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYodGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaykgdGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzdGFydFdpdGhOZXdMaW5lKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGFydFdpdGhOZXdMaW5lVmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc3RhcnRXaXRoTmV3TGluZSh2YWx1ZTogYm9vbGVhbikgeyBcclxuICAgICAgICBpZih0aGlzLnN0YXJ0V2l0aE5ld0xpbmUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXJ0V2l0aE5ld0xpbmVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZUNoYW5nZWRDYWxsYmFjaykgdGhpcy5zdGFydFdpdGhOZXdMaW5lQ2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnJpZ2h0SW5kZW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsID09IHRoaXMucmlnaHRJbmRlbnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJpZ2h0SW5kZW50VmFsdWUgPSB2YWw7XHJcbiAgICAgICAgaWYodGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaykgdGhpcy5yZW5kZXJXaWR0aENoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYodGhpcy5yb3dWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKSB0aGlzLnJvd1Zpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInBhbmVsXCIsIFtcIm5hbWVcIiwgIHsgbmFtZTogXCJlbGVtZW50c1wiLCBhbHRlcm5hdGl2ZU5hbWU6IFwicXVlc3Rpb25zXCIsIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcclxuICAgIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LCBcInZpc2libGVJZjpleHByZXNzaW9uXCIsIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXHJcbiAgICB7bmFtZTogXCJpbm5lckluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdfV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKCk7IH0pO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGFuZWwudHMiLCJpbXBvcnQge0Jhc2UsIElRdWVzdGlvbiwgRXZlbnR9IGZyb20gXCIuL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XHJcbiAgICBwdWJsaWMgaHRtbFRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgd2lkZ2V0SnNvbjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5odG1sVGVtcGxhdGUgPSB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA/IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZnRlclJlbmRlcihxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcikgdGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKHF1ZXN0aW9uLCBlbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgd2lsbFVubW91bnQocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQpIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRml0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmlzRml0KSByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRml0KHF1ZXN0aW9uKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IEN1c3RvbVdpZGdldENvbGxlY3Rpb24gPSBuZXcgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbigpO1xyXG4gICAgcHJpdmF0ZSB3aWRnZXRzVmFsdWVzOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgb25DdXN0b21XaWRnZXRBZGRlZDogRXZlbnQ8KGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldCkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICAgICAgXHJcbiAgICBwdWJsaWMgZ2V0IHdpZGdldHMoKTogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+IHsgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlczsgfVxyXG4gICAgcHVibGljIGFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmFtZSA9IHdpZGdldEpzb24ubmFtZTtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgbmFtZSA9IFwid2lkZ2V0X1wiICsgdGhpcy53aWRnZXRzLmxlbmd0aCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXN0b21XaWRnZXQgPSBuZXcgUXVlc3Rpb25DdXN0b21XaWRnZXQobmFtZSwgd2lkZ2V0SnNvbik7XHJcbiAgICAgICAgdGhpcy53aWRnZXRzVmFsdWVzLnB1c2goY3VzdG9tV2lkZ2V0KTtcclxuICAgICAgICB0aGlzLm9uQ3VzdG9tV2lkZ2V0QWRkZWQuZmlyZShjdXN0b21XaWRnZXQsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkgeyB0aGlzLndpZGdldHNWYWx1ZXMgPSBbXTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXN0b21XaWRnZXQocXVlc3Rpb246IElRdWVzdGlvbik6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMud2lkZ2V0c1ZhbHVlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0c1ZhbHVlc1tpXS5pc0ZpdChxdWVzdGlvbikpIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsImltcG9ydCB7c3VydmV5Q3NzfSBmcm9tIFwiLi9jc3NzdGFuZGFyZFwiO1xyXG5cclxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwQ3NzID0ge1xyXG4gICAgcm9vdDogXCJcIixcclxuICAgIGhlYWRlcjogXCJwYW5lbC1oZWFkaW5nXCIsXHJcbiAgICBib2R5OiBcInBhbmVsLWJvZHlcIixcclxuICAgIGZvb3RlcjogXCJwYW5lbC1mb290ZXJcIixcclxuICAgIG5hdmlnYXRpb25CdXR0b246IFwiXCIsIG5hdmlnYXRpb246IHsgY29tcGxldGU6IFwiXCIsIHByZXY6IFwiXCIsIG5leHQ6IFwiXCIgfSxcclxuICAgIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9ja1wiLCBwcm9ncmVzc0JhcjogXCJwcm9ncmVzcy1iYXJcIixcclxuICAgIHBhZ2VUaXRsZTogXCJcIixcclxuICAgIHJvdzogXCJcIixcclxuICAgIHF1ZXN0aW9uOiB7IHJvb3Q6IFwiXCIsIHRpdGxlOiBcIlwiLCBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLCBpbmRlbnQ6IDIwIH0sXHJcbiAgICBlcnJvcjogeyByb290OiBcImFsZXJ0IGFsZXJ0LWRhbmdlclwiLCBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLCBpdGVtOiBcIlwiIH0sXHJcblxyXG4gICAgY2hlY2tib3g6IHsgcm9vdDogXCJmb3JtLWlubGluZVwiLCBpdGVtOiBcImNoZWNrYm94XCIsIG90aGVyOiBcIlwiIH0sXHJcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxyXG4gICAgZHJvcGRvd246IHsgcm9vdDogXCJcIiwgY29udHJvbDogXCJmb3JtLWNvbnRyb2xcIiB9LFxyXG4gICAgbWF0cml4OiB7IHJvb3Q6IFwidGFibGVcIiB9LFxyXG4gICAgbWF0cml4ZHJvcGRvd246IHsgcm9vdDogXCJ0YWJsZVwiIH0sXHJcbiAgICBtYXRyaXhkeW5hbWljOiB7IHJvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcImJ1dHRvblwiIH0sXHJcbiAgICBtdWx0aXBsZXRleHQ6IHsgcm9vdDogXCJ0YWJsZVwiLCBpdGVtVGl0bGU6IFwiXCIsIGl0ZW1WYWx1ZTogXCJmb3JtLWNvbnRyb2xcIiB9LFxyXG4gICAgcmFkaW9ncm91cDogeyByb290OiBcImZvcm0taW5saW5lXCIsIGl0ZW06IFwicmFkaW9cIiwgbGFiZWw6IFwiXCIsIG90aGVyOiBcIlwiIH0sXHJcbiAgICByYXRpbmc6IHsgcm9vdDogXCJidG4tZ3JvdXBcIiwgaXRlbTogXCJidG4gYnRuLWRlZmF1bHRcIiB9LFxyXG4gICAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcclxuICAgIHdpbmRvdzoge1xyXG4gICAgICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLCBib2R5OiBcIm1vZGFsLWJvZHlcIixcclxuICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIiwgdGl0bGU6IFwicHVsbC1sZWZ0XCIsIGJ1dHRvbjogXCJnbHlwaGljb24gcHVsbC1yaWdodFwiLFxyXG4gICAgICAgICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLCBidXR0b25Db2xsYXBzZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tZG93blwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5zdXJ2ZXlDc3NbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9kZWZhdWx0Q3NzL2Nzc2Jvb3RzdHJhcC50cyIsImltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL2N6ZWNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZGFuaXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZHV0Y2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZ2VybWFuJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vZ3JlZWsnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2gnO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9yb21hbmlhbic7XHJcbmltcG9ydCAnLi4vLi4vbG9jYWxpemF0aW9uL3J1c3NpYW4nO1xyXG5pbXBvcnQgJy4uLy4uL2xvY2FsaXphdGlvbi9zd2VkaXNoJztcclxuaW1wb3J0ICcuLi8uLi9sb2NhbGl6YXRpb24vdHVya2lzaCc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIi8vIHN0eWxlc1xyXG5pbXBvcnQgXCIuLi8uLi9tYWluLnNjc3NcIjtcclxuXHJcbmV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xyXG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIEFuc3dlckNvdW50VmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgTnVtZXJpY1ZhbGlkYXRvciwgUmVnZXhWYWxpZGF0b3IsXHJcbiAgICBTdXJ2ZXlWYWxpZGF0b3IsIFRleHRWYWxpZGF0b3IsIFZhbGlkYXRvclJlc3VsdCwgVmFsaWRhdG9yUnVubmVyXHJcbn0gZnJvbSBcIi4uLy4uL3ZhbGlkYXRvclwiO1xyXG5leHBvcnQge0Jhc2UsIEV2ZW50LCBTdXJ2ZXlFcnJvciwgSVN1cnZleX0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuZXhwb3J0IHtJdGVtVmFsdWV9IGZyb20gXCIuLi8uLi9pdGVtdmFsdWVcIjtcclxuZXhwb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuLi8uLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5leHBvcnQge0Nob2ljZXNSZXN0ZnVsbH0gZnJvbSBcIi4uLy4uL2Nob2ljZXNSZXN0ZnVsbFwiO1xyXG5leHBvcnQge0NvbmRpdGlvbiwgQ29uZGl0aW9uTm9kZSwgQ29uZGl0aW9uUnVubmVyfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uc1wiO1xyXG5leHBvcnQge0NvbmRpdGlvbnNQYXJzZXJ9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zUGFyc2VyXCI7XHJcbmV4cG9ydCB7UHJvY2Vzc1ZhbHVlfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XHJcbmV4cG9ydCB7Q3VzdG9tRXJyb3IsIEV4Y2VlZFNpemVFcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yfSBmcm9tIFwiLi4vLi4vZXJyb3JcIjtcclxuZXhwb3J0IHtcclxuICAgIEpzb25FcnJvciwgSnNvbkluY29ycmVjdFR5cGVFcnJvciwgSnNvbk1ldGFkYXRhLCBKc29uTWV0YWRhdGFDbGFzcyxcclxuICAgIEpzb25NaXNzaW5nVHlwZUVycm9yLCBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsIEpzb25PYmplY3QsIEpzb25PYmplY3RQcm9wZXJ0eSxcclxuICAgIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IsIEpzb25Vbmtub3duUHJvcGVydHlFcnJvclxyXG59IGZyb20gXCIuLi8uLi9qc29ub2JqZWN0XCI7XHJcbmV4cG9ydCB7XHJcbiAgICBNYXRyaXhEcm9wZG93bkNlbGwsIE1hdHJpeERyb3Bkb3duQ29sdW1uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcclxuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcclxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XHJcbmV4cG9ydCB7TWF0cml4RHJvcGRvd25Sb3dNb2RlbCwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25cIjtcclxuZXhwb3J0IHtNYXRyaXhEeW5hbWljUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHluYW1pY1wiO1xyXG5leHBvcnQge01hdHJpeFJvd01vZGVsLCBRdWVzdGlvbk1hdHJpeE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4XCI7XHJcbmV4cG9ydCB7TXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XHJcbmV4cG9ydCB7UGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWx9IGZyb20gXCIuLi8uLi9wYW5lbFwiO1xyXG5leHBvcnQge1BhZ2VNb2RlbH0gZnJvbSBcIi4uLy4uL3BhZ2VcIjtcclxuZXhwb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25CYXNlfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25iYXNlXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DaGVja2JveEJhc2UsIFF1ZXN0aW9uU2VsZWN0QmFzZX0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcclxuZXhwb3J0IHtRdWVzdGlvbkNoZWNrYm94TW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jaGVja2JveFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uQ29tbWVudE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fY29tbWVudFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uRHJvcGRvd25Nb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25GYWN0b3J5LCBFbGVtZW50RmFjdG9yeX0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uRmlsZU1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZmlsZVwiO1xyXG5leHBvcnQge1F1ZXN0aW9uSHRtbE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25faHRtbFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcmFkaW9ncm91cFwiO1xyXG5leHBvcnQge1F1ZXN0aW9uUmF0aW5nTW9kZWx9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYXRpbmdcIjtcclxuZXhwb3J0IHtRdWVzdGlvblRleHRNb2RlbH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3RleHRcIjtcclxuZXhwb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSBcIi4uLy4uL3N1cnZleVwiO1xyXG5leHBvcnQge1xyXG4gICAgU3VydmV5VHJpZ2dlciwgU3VydmV5VHJpZ2dlckNvbXBsZXRlLCBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUsIFN1cnZleVRyaWdnZXJWaXNpYmxlLFxyXG4gICAgVHJpZ2dlclxyXG59IGZyb20gXCIuLi8uLi90cmlnZ2VyXCI7XHJcbmV4cG9ydCB7U3VydmV5V2luZG93TW9kZWx9IGZyb20gXCIuLi8uLi9zdXJ2ZXlXaW5kb3dcIjtcclxuZXhwb3J0IHtUZXh0UHJlUHJvY2Vzc29yfSBmcm9tIFwiLi4vLi4vdGV4dFByZVByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IHtkeFN1cnZleVNlcnZpY2V9IGZyb20gXCIuLi8uLi9keFN1cnZleVNlcnZpY2VcIjtcclxuZXhwb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3N9IGZyb20gXCIuLi8uLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmV4cG9ydCB7UXVlc3Rpb25DdXN0b21XaWRnZXQsIEN1c3RvbVdpZGdldENvbGxlY3Rpb259IGZyb20gXCIuLi8uLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcclxuXHJcbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXHJcbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9uRGF0ZU1vZGVsfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9xdWVzdGlvbl9kYXRlXCI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi4vc3VydmV5XCI7XHJcbmltcG9ydCB7c3VydmV5Q3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZ1ZVN1cnZleU1vZGVsIGV4dGVuZHMgU3VydmV5TW9kZWwge1xyXG4gICAgcHJpdmF0ZSB2dWVWYWx1ZXNIYXNoOiB7W2luZGV4OiBzdHJpbmddOiBhbnl9ID0ge307XHJcbiAgICByZW5kZXJDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcihqc29uT2JqKTtcclxuICAgICAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucygpLmZvckVhY2gocXVlc3Rpb24gPT4gdGhpcy52dWVWYWx1ZXNIYXNoW3F1ZXN0aW9uLm5hbWVdID0gdW5kZWZpbmVkKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHtcclxuICAgICAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucygpLmZvckVhY2gocXVlc3Rpb24gPT4gVnVlLnNldCh0aGlzLnZ1ZVZhbHVlc0hhc2gsIHF1ZXN0aW9uLm5hbWUsIHVuZGVmaW5lZCkpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH1cclxuICAgIGdldCBjc3MgKCkge1xyXG4gICAgICAgIHJldHVybiBzdXJ2ZXlDc3MuZ2V0Q3NzKCk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3NzKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldERhdGFWYWx1ZShkYXRhOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIuX3NldERhdGFWYWx1ZShkYXRhLCBrZXkpO1xyXG4gICAgICAgIHRoaXMudnVlVmFsdWVzSGFzaFtrZXldID0gZGF0YVtrZXldO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudnVlVmFsdWVzSGFzaCA/IHRoaXMudnVlVmFsdWVzSGFzaFtuYW1lXSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLnNldFZhbHVlKG5hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLnZ1ZVZhbHVlc0hhc2hbbmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLnRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZSk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdnVlL3N1cnZleU1vZGVsLnRzIiwidmFyIENvbXBvbmVudCA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyXCIpKFxuICAvKiBzY3JpcHQgKi9cbiAgcmVxdWlyZShcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vY2hlY2tib3gudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTA2MGRiY2UwIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9jaGVja2JveC52dWVcIiksXG4gIC8qIHNjb3BlSWQgKi9cbiAgbnVsbCxcbiAgLyogY3NzTW9kdWxlcyAqL1xuICBudWxsXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcIkQ6XFxcXHByb2plY3RzXFxcXHN1cnZleWpzXFxcXHNyY1xcXFx2dWVcXFxcY2hlY2tib3gudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtyZXR1cm4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwifSkpIHtjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5pZiAoQ29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge2NvbnNvbGUuZXJyb3IoXCJbdnVlLWxvYWRlcl0gY2hlY2tib3gudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTA2MGRiY2UwXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0wNjBkYmNlMFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIENvbXBvbmVudCA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyXCIpKFxuICAvKiBzY3JpcHQgKi9cbiAgcmVxdWlyZShcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vY29tbWVudC52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtMDc3NmZiYmMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2NvbW1lbnQudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXGNvbW1lbnQudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtyZXR1cm4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwifSkpIHtjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5pZiAoQ29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge2NvbnNvbGUuZXJyb3IoXCJbdnVlLWxvYWRlcl0gY29tbWVudC52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMDc3NmZiYmNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTA3NzZmYmJjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvY29tbWVudC52dWVcbi8vIG1vZHVsZSBpZCA9IDM1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Ryb3Bkb3duLnZ1ZVwiKSxcbiAgLyogdGVtcGxhdGUgKi9cbiAgcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP2lkPWRhdGEtdi02NGQ3MWE0NCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vZHJvcGRvd24udnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXGRyb3Bkb3duLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIGRyb3Bkb3duLnZ1ZTogZnVuY3Rpb25hbCBjb21wb25lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggdGVtcGxhdGVzLCB0aGV5IHNob3VsZCB1c2UgcmVuZGVyIGZ1bmN0aW9ucy5cIil9XG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi02NGQ3MWE0NFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBpZiAobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMgJiYgSlNPTi5zdHJpbmdpZnkobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMpICE9PSBKU09OLnN0cmluZ2lmeShjc3NNb2R1bGVzKSkge1xuICAgICAgZGVsZXRlIENvbXBvbmVudC5vcHRpb25zLl9DdG9yXG4gICAgfVxuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtNjRkNzFhNDRcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5jc3NNb2R1bGVzID0gY3NzTW9kdWxlc1xuICB9KVxufSkoKX1cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9kcm9wZG93bi52dWVcbi8vIG1vZHVsZSBpZCA9IDM2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Vycm9ycy52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtN2Y1ZjBhNzghLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2Vycm9ycy52dWVcIiksXG4gIC8qIHNjb3BlSWQgKi9cbiAgbnVsbCxcbiAgLyogY3NzTW9kdWxlcyAqL1xuICBudWxsXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcIkQ6XFxcXHByb2plY3RzXFxcXHN1cnZleWpzXFxcXHNyY1xcXFx2dWVcXFxcZXJyb3JzLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIGVycm9ycy52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtN2Y1ZjBhNzhcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTdmNWYwYTc4XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvZXJyb3JzLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIENvbXBvbmVudCA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyXCIpKFxuICAvKiBzY3JpcHQgKi9cbiAgcmVxdWlyZShcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZmlsZS52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtNDdjNWNkNmUhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2ZpbGUudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXGZpbGUudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtyZXR1cm4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwifSkpIHtjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5pZiAoQ29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge2NvbnNvbGUuZXJyb3IoXCJbdnVlLWxvYWRlcl0gZmlsZS52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtNDdjNWNkNmVcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTQ3YzVjZDZlXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvZmlsZS52dWVcbi8vIG1vZHVsZSBpZCA9IDM4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2h0bWwudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTE4NDkwODEwIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9odG1sLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiRDpcXFxccHJvamVjdHNcXFxcc3VydmV5anNcXFxcc3JjXFxcXHZ1ZVxcXFxodG1sLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIGh0bWwudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTE4NDkwODEwXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0xODQ5MDgxMFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL2h0bWwudnVlXG4vLyBtb2R1bGUgaWQgPSAzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgQ29tcG9uZW50ID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXJcIikoXG4gIC8qIHNjcmlwdCAqL1xuICByZXF1aXJlKFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9tYXRyaXgudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LWFmMDFkMDY0IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tYXRyaXgudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXG1hdHJpeC52dWVcIlxuaWYgKENvbXBvbmVudC5lc01vZHVsZSAmJiBPYmplY3Qua2V5cyhDb21wb25lbnQuZXNNb2R1bGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge3JldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCJ9KSkge2NvbnNvbGUuZXJyb3IoXCJuYW1lZCBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICoudnVlIGZpbGVzLlwiKX1cbmlmIChDb21wb25lbnQub3B0aW9ucy5mdW5jdGlvbmFsKSB7Y29uc29sZS5lcnJvcihcIlt2dWUtbG9hZGVyXSBtYXRyaXgudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LWFmMDFkMDY0XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi1hZjAxZDA2NFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL21hdHJpeC52dWVcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL21hdHJpeGRyb3Bkb3duLnZ1ZVwiKSxcbiAgLyogdGVtcGxhdGUgKi9cbiAgcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP2lkPWRhdGEtdi03NGE2NTU1ZiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vbWF0cml4ZHJvcGRvd24udnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXG1hdHJpeGRyb3Bkb3duLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIG1hdHJpeGRyb3Bkb3duLnZ1ZTogZnVuY3Rpb25hbCBjb21wb25lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggdGVtcGxhdGVzLCB0aGV5IHNob3VsZCB1c2UgcmVuZGVyIGZ1bmN0aW9ucy5cIil9XG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi03NGE2NTU1ZlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBpZiAobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMgJiYgSlNPTi5zdHJpbmdpZnkobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMpICE9PSBKU09OLnN0cmluZ2lmeShjc3NNb2R1bGVzKSkge1xuICAgICAgZGVsZXRlIENvbXBvbmVudC5vcHRpb25zLl9DdG9yXG4gICAgfVxuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtNzRhNjU1NWZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5jc3NNb2R1bGVzID0gY3NzTW9kdWxlc1xuICB9KVxufSkoKX1cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWVcbi8vIG1vZHVsZSBpZCA9IDQxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL21hdHJpeGR5bmFtaWMudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTQzNGY0ZDYxIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tYXRyaXhkeW5hbWljLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiRDpcXFxccHJvamVjdHNcXFxcc3VydmV5anNcXFxcc3JjXFxcXHZ1ZVxcXFxtYXRyaXhkeW5hbWljLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIG1hdHJpeGR5bmFtaWMudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTQzNGY0ZDYxXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi00MzRmNGQ2MVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlXG4vLyBtb2R1bGUgaWQgPSA0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgQ29tcG9uZW50ID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXJcIikoXG4gIC8qIHNjcmlwdCAqL1xuICByZXF1aXJlKFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9tdWx0aXBsZXRleHQudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTM2ODdiOThhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tdWx0aXBsZXRleHQudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXG11bHRpcGxldGV4dC52dWVcIlxuaWYgKENvbXBvbmVudC5lc01vZHVsZSAmJiBPYmplY3Qua2V5cyhDb21wb25lbnQuZXNNb2R1bGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge3JldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCJ9KSkge2NvbnNvbGUuZXJyb3IoXCJuYW1lZCBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICoudnVlIGZpbGVzLlwiKX1cbmlmIChDb21wb25lbnQub3B0aW9ucy5mdW5jdGlvbmFsKSB7Y29uc29sZS5lcnJvcihcIlt2dWUtbG9hZGVyXSBtdWx0aXBsZXRleHQudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTM2ODdiOThhXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0zNjg3Yjk4YVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWVcbi8vIG1vZHVsZSBpZCA9IDQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL290aGVyQ2hvaWNlLnZ1ZVwiKSxcbiAgLyogdGVtcGxhdGUgKi9cbiAgcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP2lkPWRhdGEtdi00MzgwZmExNCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vb3RoZXJDaG9pY2UudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXG90aGVyQ2hvaWNlLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIG90aGVyQ2hvaWNlLnZ1ZTogZnVuY3Rpb25hbCBjb21wb25lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggdGVtcGxhdGVzLCB0aGV5IHNob3VsZCB1c2UgcmVuZGVyIGZ1bmN0aW9ucy5cIil9XG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi00MzgwZmExNFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBpZiAobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMgJiYgSlNPTi5zdHJpbmdpZnkobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMpICE9PSBKU09OLnN0cmluZ2lmeShjc3NNb2R1bGVzKSkge1xuICAgICAgZGVsZXRlIENvbXBvbmVudC5vcHRpb25zLl9DdG9yXG4gICAgfVxuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtNDM4MGZhMTRcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5jc3NNb2R1bGVzID0gY3NzTW9kdWxlc1xuICB9KVxufSkoKX1cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWVcbi8vIG1vZHVsZSBpZCA9IDQ0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3BhZ2UudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTNiMmVjNGRjIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9wYWdlLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiRDpcXFxccHJvamVjdHNcXFxcc3VydmV5anNcXFxcc3JjXFxcXHZ1ZVxcXFxwYWdlLnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIHBhZ2UudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTNiMmVjNGRjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0zYjJlYzRkY1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL3BhZ2UudnVlXG4vLyBtb2R1bGUgaWQgPSA0NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgQ29tcG9uZW50ID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXJcIikoXG4gIC8qIHNjcmlwdCAqL1xuICByZXF1aXJlKFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wYW5lbC52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtYmY4MzFiZjIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3BhbmVsLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiRDpcXFxccHJvamVjdHNcXFxcc3VydmV5anNcXFxcc3JjXFxcXHZ1ZVxcXFxwYW5lbC52dWVcIlxuaWYgKENvbXBvbmVudC5lc01vZHVsZSAmJiBPYmplY3Qua2V5cyhDb21wb25lbnQuZXNNb2R1bGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge3JldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCJ9KSkge2NvbnNvbGUuZXJyb3IoXCJuYW1lZCBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICoudnVlIGZpbGVzLlwiKX1cbmlmIChDb21wb25lbnQub3B0aW9ucy5mdW5jdGlvbmFsKSB7Y29uc29sZS5lcnJvcihcIlt2dWUtbG9hZGVyXSBwYW5lbC52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtYmY4MzFiZjJcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LWJmODMxYmYyXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvcGFuZWwudnVlXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgQ29tcG9uZW50ID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXJcIikoXG4gIC8qIHNjcmlwdCAqL1xuICByZXF1aXJlKFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wcm9ncmVzcy52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtZWI3NGZhMGMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3Byb2dyZXNzLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiRDpcXFxccHJvamVjdHNcXFxcc3VydmV5anNcXFxcc3JjXFxcXHZ1ZVxcXFxwcm9ncmVzcy52dWVcIlxuaWYgKENvbXBvbmVudC5lc01vZHVsZSAmJiBPYmplY3Qua2V5cyhDb21wb25lbnQuZXNNb2R1bGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge3JldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCJ9KSkge2NvbnNvbGUuZXJyb3IoXCJuYW1lZCBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICoudnVlIGZpbGVzLlwiKX1cbmlmIChDb21wb25lbnQub3B0aW9ucy5mdW5jdGlvbmFsKSB7Y29uc29sZS5lcnJvcihcIlt2dWUtbG9hZGVyXSBwcm9ncmVzcy52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtZWI3NGZhMGNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LWViNzRmYTBjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvcHJvZ3Jlc3MudnVlXG4vLyBtb2R1bGUgaWQgPSA0N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgQ29tcG9uZW50ID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXJcIikoXG4gIC8qIHNjcmlwdCAqL1xuICByZXF1aXJlKFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9yYWRpb2dyb3VwLnZ1ZVwiKSxcbiAgLyogdGVtcGxhdGUgKi9cbiAgcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP2lkPWRhdGEtdi01YTA2MWI3MSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vcmFkaW9ncm91cC52dWVcIiksXG4gIC8qIHNjb3BlSWQgKi9cbiAgbnVsbCxcbiAgLyogY3NzTW9kdWxlcyAqL1xuICBudWxsXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcIkQ6XFxcXHByb2plY3RzXFxcXHN1cnZleWpzXFxcXHNyY1xcXFx2dWVcXFxccmFkaW9ncm91cC52dWVcIlxuaWYgKENvbXBvbmVudC5lc01vZHVsZSAmJiBPYmplY3Qua2V5cyhDb21wb25lbnQuZXNNb2R1bGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge3JldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCJ9KSkge2NvbnNvbGUuZXJyb3IoXCJuYW1lZCBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICoudnVlIGZpbGVzLlwiKX1cbmlmIChDb21wb25lbnQub3B0aW9ucy5mdW5jdGlvbmFsKSB7Y29uc29sZS5lcnJvcihcIlt2dWUtbG9hZGVyXSByYWRpb2dyb3VwLnZ1ZTogZnVuY3Rpb25hbCBjb21wb25lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggdGVtcGxhdGVzLCB0aGV5IHNob3VsZCB1c2UgcmVuZGVyIGZ1bmN0aW9ucy5cIil9XG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi01YTA2MWI3MVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBpZiAobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMgJiYgSlNPTi5zdHJpbmdpZnkobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMpICE9PSBKU09OLnN0cmluZ2lmeShjc3NNb2R1bGVzKSkge1xuICAgICAgZGVsZXRlIENvbXBvbmVudC5vcHRpb25zLl9DdG9yXG4gICAgfVxuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtNWEwNjFiNzFcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5jc3NNb2R1bGVzID0gY3NzTW9kdWxlc1xuICB9KVxufSkoKX1cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZVxuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIENvbXBvbmVudCA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyXCIpKFxuICAvKiBzY3JpcHQgKi9cbiAgcmVxdWlyZShcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcmF0aW5nLnZ1ZVwiKSxcbiAgLyogdGVtcGxhdGUgKi9cbiAgcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP2lkPWRhdGEtdi1jZDIyMzhhYyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vcmF0aW5nLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiRDpcXFxccHJvamVjdHNcXFxcc3VydmV5anNcXFxcc3JjXFxcXHZ1ZVxcXFxyYXRpbmcudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtyZXR1cm4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwifSkpIHtjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5pZiAoQ29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge2NvbnNvbGUuZXJyb3IoXCJbdnVlLWxvYWRlcl0gcmF0aW5nLnZ1ZTogZnVuY3Rpb25hbCBjb21wb25lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggdGVtcGxhdGVzLCB0aGV5IHNob3VsZCB1c2UgcmVuZGVyIGZ1bmN0aW9ucy5cIil9XG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi1jZDIyMzhhY1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBpZiAobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMgJiYgSlNPTi5zdHJpbmdpZnkobW9kdWxlLmhvdC5kYXRhLmNzc01vZHVsZXMpICE9PSBKU09OLnN0cmluZ2lmeShjc3NNb2R1bGVzKSkge1xuICAgICAgZGVsZXRlIENvbXBvbmVudC5vcHRpb25zLl9DdG9yXG4gICAgfVxuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtY2QyMjM4YWNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5jc3NNb2R1bGVzID0gY3NzTW9kdWxlc1xuICB9KVxufSkoKX1cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9yYXRpbmcudnVlXG4vLyBtb2R1bGUgaWQgPSA0OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgQ29tcG9uZW50ID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXJcIikoXG4gIC8qIHNjcmlwdCAqL1xuICByZXF1aXJlKFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9yb3cudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTYyOTViNGM2IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9yb3cudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXHJvdy52dWVcIlxuaWYgKENvbXBvbmVudC5lc01vZHVsZSAmJiBPYmplY3Qua2V5cyhDb21wb25lbnQuZXNNb2R1bGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge3JldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCJ9KSkge2NvbnNvbGUuZXJyb3IoXCJuYW1lZCBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICoudnVlIGZpbGVzLlwiKX1cbmlmIChDb21wb25lbnQub3B0aW9ucy5mdW5jdGlvbmFsKSB7Y29uc29sZS5lcnJvcihcIlt2dWUtbG9hZGVyXSByb3cudnVlOiBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0ZW1wbGF0ZXMsIHRoZXkgc2hvdWxkIHVzZSByZW5kZXIgZnVuY3Rpb25zLlwiKX1cblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTYyOTViNGM2XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGlmIChtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcyAmJiBKU09OLnN0cmluZ2lmeShtb2R1bGUuaG90LmRhdGEuY3NzTW9kdWxlcykgIT09IEpTT04uc3RyaW5naWZ5KGNzc01vZHVsZXMpKSB7XG4gICAgICBkZWxldGUgQ29tcG9uZW50Lm9wdGlvbnMuX0N0b3JcbiAgICB9XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi02Mjk1YjRjNlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkYXRhLmNzc01vZHVsZXMgPSBjc3NNb2R1bGVzXG4gIH0pXG59KSgpfVxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL3Jvdy52dWVcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3N1cnZleS52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtMTZiYzlhMzIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3N1cnZleS52dWVcIiksXG4gIC8qIHNjb3BlSWQgKi9cbiAgbnVsbCxcbiAgLyogY3NzTW9kdWxlcyAqL1xuICBudWxsXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcIkQ6XFxcXHByb2plY3RzXFxcXHN1cnZleWpzXFxcXHNyY1xcXFx2dWVcXFxcc3VydmV5LnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIHN1cnZleS52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMTZiYzlhMzJcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTE2YmM5YTMyXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvc3VydmV5LnZ1ZVxuLy8gbW9kdWxlIGlkID0gNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIENvbXBvbmVudCA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyXCIpKFxuICAvKiBzY3JpcHQgKi9cbiAgcmVxdWlyZShcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vdGV4dC52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtNjdiYmFmMGMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3RleHQudnVlXCIpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJEOlxcXFxwcm9qZWN0c1xcXFxzdXJ2ZXlqc1xcXFxzcmNcXFxcdnVlXFxcXHRleHQudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtyZXR1cm4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwifSkpIHtjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5pZiAoQ29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge2NvbnNvbGUuZXJyb3IoXCJbdnVlLWxvYWRlcl0gdGV4dC52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtNjdiYmFmMGNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTY3YmJhZjBjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvdGV4dC52dWVcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3dpbmRvdy52dWVcIiksXG4gIC8qIHRlbXBsYXRlICovXG4gIHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj9pZD1kYXRhLXYtZTg1Y2E3MDYhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3dpbmRvdy52dWVcIiksXG4gIC8qIHNjb3BlSWQgKi9cbiAgbnVsbCxcbiAgLyogY3NzTW9kdWxlcyAqL1xuICBudWxsXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcIkQ6XFxcXHByb2plY3RzXFxcXHN1cnZleWpzXFxcXHNyY1xcXFx2dWVcXFxcd2luZG93LnZ1ZVwiXG5pZiAoQ29tcG9uZW50LmVzTW9kdWxlICYmIE9iamVjdC5rZXlzKENvbXBvbmVudC5lc01vZHVsZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7cmV0dXJuIGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIn0pKSB7Y29uc29sZS5lcnJvcihcIm5hbWVkIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gKi52dWUgZmlsZXMuXCIpfVxuaWYgKENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtjb25zb2xlLmVycm9yKFwiW3Z1ZS1sb2FkZXJdIHdpbmRvdy52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtZTg1Y2E3MDZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzICYmIEpTT04uc3RyaW5naWZ5KG1vZHVsZS5ob3QuZGF0YS5jc3NNb2R1bGVzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3NzTW9kdWxlcykpIHtcbiAgICAgIGRlbGV0ZSBDb21wb25lbnQub3B0aW9ucy5fQ3RvclxuICAgIH1cbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LWU4NWNhNzA2XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRhdGEuY3NzTW9kdWxlcyA9IGNzc01vZHVsZXNcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvd2luZG93LnZ1ZVxuLy8gbW9kdWxlIGlkID0gNTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9tYWluLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKEMpIE1pY3Jvc29mdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbnZhciBSZWZsZWN0O1xyXG4oZnVuY3Rpb24gKFJlZmxlY3QpIHtcclxuICAgIFwidXNlIHN0cmljdFwiO1xyXG4gICAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XHJcbiAgICAvLyBmZWF0dXJlIHRlc3QgZm9yIFN5bWJvbCBzdXBwb3J0XHJcbiAgICB2YXIgc3VwcG9ydHNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICB2YXIgdG9QcmltaXRpdmVTeW1ib2wgPSBzdXBwb3J0c1N5bWJvbCAmJiB0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlICE9PSBcInVuZGVmaW5lZFwiID8gU3ltYm9sLnRvUHJpbWl0aXZlIDogXCJAQHRvUHJpbWl0aXZlXCI7XHJcbiAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSBzdXBwb3J0c1N5bWJvbCAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gU3ltYm9sLml0ZXJhdG9yIDogXCJAQGl0ZXJhdG9yXCI7XHJcbiAgICB2YXIgSGFzaE1hcDtcclxuICAgIChmdW5jdGlvbiAoSGFzaE1hcCkge1xyXG4gICAgICAgIHZhciBzdXBwb3J0c0NyZWF0ZSA9IHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCI7IC8vIGZlYXR1cmUgdGVzdCBmb3IgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0XHJcbiAgICAgICAgdmFyIHN1cHBvcnRzUHJvdG8gPSB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5OyAvLyBmZWF0dXJlIHRlc3QgZm9yIF9fcHJvdG9fXyBzdXBwb3J0XHJcbiAgICAgICAgdmFyIGRvd25MZXZlbCA9ICFzdXBwb3J0c0NyZWF0ZSAmJiAhc3VwcG9ydHNQcm90bztcclxuICAgICAgICAvLyBjcmVhdGUgYW4gb2JqZWN0IGluIGRpY3Rpb25hcnkgbW9kZSAoYS5rLmEuIFwic2xvd1wiIG1vZGUgaW4gdjgpXHJcbiAgICAgICAgSGFzaE1hcC5jcmVhdGUgPSBzdXBwb3J0c0NyZWF0ZVxyXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ha2VEaWN0aW9uYXJ5KE9iamVjdC5jcmVhdGUobnVsbCkpOyB9XHJcbiAgICAgICAgICAgIDogc3VwcG9ydHNQcm90b1xyXG4gICAgICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBNYWtlRGljdGlvbmFyeSh7IF9fcHJvdG9fXzogbnVsbCB9KTsgfVxyXG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBNYWtlRGljdGlvbmFyeSh7fSk7IH07XHJcbiAgICAgICAgSGFzaE1hcC5oYXMgPSBkb3duTGV2ZWxcclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIGhhc093bi5jYWxsKG1hcCwga2V5KTsgfVxyXG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChtYXAsIGtleSkgeyByZXR1cm4ga2V5IGluIG1hcDsgfTtcclxuICAgICAgICBIYXNoTWFwLmdldCA9IGRvd25MZXZlbFxyXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChtYXAsIGtleSkgeyByZXR1cm4gaGFzT3duLmNhbGwobWFwLCBrZXkpID8gbWFwW2tleV0gOiB1bmRlZmluZWQ7IH1cclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIG1hcFtrZXldOyB9O1xyXG4gICAgfSkoSGFzaE1hcCB8fCAoSGFzaE1hcCA9IHt9KSk7XHJcbiAgICAvLyBMb2FkIGdsb2JhbCBvciBzaGltIHZlcnNpb25zIG9mIE1hcCwgU2V0LCBhbmQgV2Vha01hcFxyXG4gICAgdmFyIGZ1bmN0aW9uUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKEZ1bmN0aW9uKTtcclxuICAgIHZhciB1c2VQb2x5ZmlsbCA9IHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52W1wiUkVGTEVDVF9NRVRBREFUQV9VU0VfTUFQX1BPTFlGSUxMXCJdID09PSBcInRydWVcIjtcclxuICAgIHZhciBfTWFwID0gIXVzZVBvbHlmaWxsICYmIHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5lbnRyaWVzID09PSBcImZ1bmN0aW9uXCIgPyBNYXAgOiBDcmVhdGVNYXBQb2x5ZmlsbCgpO1xyXG4gICAgdmFyIF9TZXQgPSAhdXNlUG9seWZpbGwgJiYgdHlwZW9mIFNldCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTZXQucHJvdG90eXBlLmVudHJpZXMgPT09IFwiZnVuY3Rpb25cIiA/IFNldCA6IENyZWF0ZVNldFBvbHlmaWxsKCk7XHJcbiAgICB2YXIgX1dlYWtNYXAgPSAhdXNlUG9seWZpbGwgJiYgdHlwZW9mIFdlYWtNYXAgPT09IFwiZnVuY3Rpb25cIiA/IFdlYWtNYXAgOiBDcmVhdGVXZWFrTWFwUG9seWZpbGwoKTtcclxuICAgIC8vIFtbTWV0YWRhdGFdXSBpbnRlcm5hbCBzbG90XHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHNcclxuICAgIHZhciBNZXRhZGF0YSA9IG5ldyBfV2Vha01hcCgpO1xyXG4gICAgLyoqXHJcbiAgICAgICogQXBwbGllcyBhIHNldCBvZiBkZWNvcmF0b3JzIHRvIGEgcHJvcGVydHkgb2YgYSB0YXJnZXQgb2JqZWN0LlxyXG4gICAgICAqIEBwYXJhbSBkZWNvcmF0b3JzIEFuIGFycmF5IG9mIGRlY29yYXRvcnMuXHJcbiAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdC5cclxuICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IHRvIGRlY29yYXRlLlxyXG4gICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSB0YXJnZXQga2V5LlxyXG4gICAgICAqIEByZW1hcmtzIERlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW4gcmV2ZXJzZSBvcmRlci5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIEV4YW1wbGUgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIsXHJcbiAgICAgICogICAgICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIixcclxuICAgICAgKiAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpKSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIixcclxuICAgICAgKiAgICAgICAgIFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9yc0FycmF5LCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIixcclxuICAgICAgKiAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKSkpO1xyXG4gICAgICAqXHJcbiAgICAgICovXHJcbiAgICBmdW5jdGlvbiBkZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpIHtcclxuICAgICAgICAgICAgaWYgKCFJc0FycmF5KGRlY29yYXRvcnMpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QoYXR0cmlidXRlcykgJiYgIUlzVW5kZWZpbmVkKGF0dHJpYnV0ZXMpICYmICFJc051bGwoYXR0cmlidXRlcykpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIGlmIChJc051bGwoYXR0cmlidXRlcykpXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gRGVjb3JhdGVQcm9wZXJ0eShkZWNvcmF0b3JzLCB0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghSXNBcnJheShkZWNvcmF0b3JzKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICAgICAgaWYgKCFJc0NvbnN0cnVjdG9yKHRhcmdldCkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBEZWNvcmF0ZUNvbnN0cnVjdG9yKGRlY29yYXRvcnMsIHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5kZWNvcmF0ZSA9IGRlY29yYXRlO1xyXG4gICAgLy8gNC4xLjIgUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSlcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI3JlZmxlY3QubWV0YWRhdGFcclxuICAgIC8qKlxyXG4gICAgICAqIEEgZGVmYXVsdCBtZXRhZGF0YSBkZWNvcmF0b3IgZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIG9uIGEgY2xhc3MsIGNsYXNzIG1lbWJlciwgb3IgcGFyYW1ldGVyLlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBUaGUga2V5IGZvciB0aGUgbWV0YWRhdGEgZW50cnkuXHJcbiAgICAgICogQHBhcmFtIG1ldGFkYXRhVmFsdWUgVGhlIHZhbHVlIGZvciB0aGUgbWV0YWRhdGEgZW50cnkuXHJcbiAgICAgICogQHJldHVybnMgQSBkZWNvcmF0b3IgZnVuY3Rpb24uXHJcbiAgICAgICogQHJlbWFya3NcclxuICAgICAgKiBJZiBgbWV0YWRhdGFLZXlgIGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlIHRhcmdldCBhbmQgdGFyZ2V0IGtleSwgdGhlXHJcbiAgICAgICogbWV0YWRhdGFWYWx1ZSBmb3IgdGhhdCBrZXkgd2lsbCBiZSBvdmVyd3JpdHRlbi5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yLCBUeXBlU2NyaXB0IG9ubHkpXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcclxuICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUsIFR5cGVTY3JpcHQgb25seSlcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxyXG4gICAgICAqICAgICAgICAgcHJvcGVydHk7XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxyXG4gICAgICAqICAgICAgICAgbWV0aG9kKCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpICYmICFJc1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICAgICAgT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWNvcmF0b3I7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0Lm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAvKipcclxuICAgICAgKiBEZWZpbmUgYSB1bmlxdWUgbWV0YWRhdGEgZW50cnkgb24gdGhlIHRhcmdldC5cclxuICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXHJcbiAgICAgICogQHBhcmFtIG1ldGFkYXRhVmFsdWUgQSB2YWx1ZSB0aGF0IGNvbnRhaW5zIGF0dGFjaGVkIG1ldGFkYXRhLlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdG8gZGVmaW5lIG1ldGFkYXRhLlxyXG4gICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKlxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcclxuICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cclxuICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxyXG4gICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGRlY29yYXRvciBmYWN0b3J5IGFzIG1ldGFkYXRhLXByb2R1Y2luZyBhbm5vdGF0aW9uLlxyXG4gICAgICAqICAgICBmdW5jdGlvbiBNeUFubm90YXRpb24ob3B0aW9ucyk6IERlY29yYXRvciB7XHJcbiAgICAgICogICAgICAgICByZXR1cm4gKHRhcmdldCwga2V5PykgPT4gUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIHRhcmdldCwga2V5KTtcclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICovXHJcbiAgICBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIHJldHVybiBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH1cclxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEgPSBkZWZpbmVNZXRhZGF0YTtcclxuICAgIC8qKlxyXG4gICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbiBoYXMgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cclxuICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXRhZGF0YSBrZXkgd2FzIGRlZmluZWQgb24gdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbjsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxyXG4gICAgICAqIEBleGFtcGxlXHJcbiAgICAgICpcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XHJcbiAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcclxuICAgICAgICByZXR1cm4gT3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0Lmhhc01ldGFkYXRhID0gaGFzTWV0YWRhdGE7XHJcbiAgICAvKipcclxuICAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXJnZXQgb2JqZWN0IGhhcyB0aGUgcHJvdmlkZWQgbWV0YWRhdGEga2V5IGRlZmluZWQuXHJcbiAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXHJcbiAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cclxuICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1ldGFkYXRhIGtleSB3YXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdDsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxyXG4gICAgICAqIEBleGFtcGxlXHJcbiAgICAgICpcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XHJcbiAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcclxuICAgICAgICByZXR1cm4gT3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0Lmhhc093bk1ldGFkYXRhID0gaGFzT3duTWV0YWRhdGE7XHJcbiAgICAvKipcclxuICAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBvbiB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgcHJvdG90eXBlIGNoYWluLlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cclxuICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQHJldHVybnMgVGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgbWV0YWRhdGEga2V5IGlmIGZvdW5kOyBvdGhlcndpc2UsIGB1bmRlZmluZWRgLlxyXG4gICAgICAqIEBleGFtcGxlXHJcbiAgICAgICpcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XHJcbiAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcclxuICAgICAgICByZXR1cm4gT3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0LmdldE1ldGFkYXRhID0gZ2V0TWV0YWRhdGE7XHJcbiAgICAvKipcclxuICAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBvbiB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXHJcbiAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cclxuICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxyXG4gICAgICAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIG1ldGFkYXRhIGtleSBpZiBmb3VuZDsgb3RoZXJ3aXNlLCBgdW5kZWZpbmVkYC5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5nZXRPd25NZXRhZGF0YSA9IGdldE93bk1ldGFkYXRhO1xyXG4gICAgLyoqXHJcbiAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEga2V5cyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW4uXHJcbiAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cclxuICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxyXG4gICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXF1ZSBtZXRhZGF0YSBrZXlzLlxyXG4gICAgICAqIEBleGFtcGxlXHJcbiAgICAgICpcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XHJcbiAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgcmV0dXJuIE9yZGluYXJ5TWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMgPSBnZXRNZXRhZGF0YUtleXM7XHJcbiAgICAvKipcclxuICAgICAgKiBHZXRzIHRoZSB1bmlxdWUgbWV0YWRhdGEga2V5cyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXHJcbiAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cclxuICAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bmlxdWUgbWV0YWRhdGEga2V5cy5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICovXHJcbiAgICBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIHJldHVybiBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH1cclxuICAgIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzID0gZ2V0T3duTWV0YWRhdGFLZXlzO1xyXG4gICAgLyoqXHJcbiAgICAgICogRGVsZXRlcyB0aGUgbWV0YWRhdGEgZW50cnkgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBwcm92aWRlZCBrZXkuXHJcbiAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXHJcbiAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cclxuICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1ldGFkYXRhIGVudHJ5IHdhcyBmb3VuZCBhbmQgZGVsZXRlZDsgb3RoZXJ3aXNlLCBmYWxzZS5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHByb3BlcnR5S2V5LCAvKkNyZWF0ZSovIGZhbHNlKTtcclxuICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFtZXRhZGF0YU1hcC5kZWxldGUobWV0YWRhdGFLZXkpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1ldGFkYXRhTWFwLnNpemUgPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBNZXRhZGF0YS5nZXQodGFyZ2V0KTtcclxuICAgICAgICB0YXJnZXRNZXRhZGF0YS5kZWxldGUocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIGlmICh0YXJnZXRNZXRhZGF0YS5zaXplID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgTWV0YWRhdGEuZGVsZXRlKHRhcmdldCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhID0gZGVsZXRlTWV0YWRhdGE7XHJcbiAgICBmdW5jdGlvbiBEZWNvcmF0ZUNvbnN0cnVjdG9yKGRlY29yYXRvcnMsIHRhcmdldCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JzW2ldO1xyXG4gICAgICAgICAgICB2YXIgZGVjb3JhdGVkID0gZGVjb3JhdG9yKHRhcmdldCk7XHJcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQoZGVjb3JhdGVkKSAmJiAhSXNOdWxsKGRlY29yYXRlZCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghSXNDb25zdHJ1Y3RvcihkZWNvcmF0ZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IGRlY29yYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gRGVjb3JhdGVQcm9wZXJ0eShkZWNvcmF0b3JzLCB0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcclxuICAgICAgICAgICAgdmFyIGRlY29yYXRvciA9IGRlY29yYXRvcnNbaV07XHJcbiAgICAgICAgICAgIHZhciBkZWNvcmF0ZWQgPSBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQoZGVjb3JhdGVkKSAmJiAhSXNOdWxsKGRlY29yYXRlZCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QoZGVjb3JhdGVkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZGVjb3JhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBDcmVhdGUpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBNZXRhZGF0YS5nZXQoTyk7XHJcbiAgICAgICAgaWYgKElzVW5kZWZpbmVkKHRhcmdldE1ldGFkYXRhKSkge1xyXG4gICAgICAgICAgICBpZiAoIUNyZWF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRhcmdldE1ldGFkYXRhID0gbmV3IF9NYXAoKTtcclxuICAgICAgICAgICAgTWV0YWRhdGEuc2V0KE8sIHRhcmdldE1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KFApO1xyXG4gICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpIHtcclxuICAgICAgICAgICAgaWYgKCFDcmVhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBtZXRhZGF0YU1hcCA9IG5ldyBfTWFwKCk7XHJcbiAgICAgICAgICAgIHRhcmdldE1ldGFkYXRhLnNldChQLCBtZXRhZGF0YU1hcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXRhZGF0YU1hcDtcclxuICAgIH1cclxuICAgIC8vIDMuMS4xLjEgT3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUClcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5aGFzbWV0YWRhdGFcclxuICAgIGZ1bmN0aW9uIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcclxuICAgICAgICB2YXIgaGFzT3duID0gT3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XHJcbiAgICAgICAgaWYgKGhhc093bilcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTyk7XHJcbiAgICAgICAgaWYgKCFJc051bGwocGFyZW50KSlcclxuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gMy4xLjIuMSBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxyXG4gICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnloYXNvd25tZXRhZGF0YVxyXG4gICAgZnVuY3Rpb24gT3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xyXG4gICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgLypDcmVhdGUqLyBmYWxzZSk7XHJcbiAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBUb0Jvb2xlYW4obWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KSk7XHJcbiAgICB9XHJcbiAgICAvLyAzLjEuMy4xIE9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWdldG1ldGFkYXRhXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKSB7XHJcbiAgICAgICAgdmFyIGhhc093biA9IE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xyXG4gICAgICAgIGlmIChoYXNPd24pXHJcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcclxuICAgICAgICB2YXIgcGFyZW50ID0gT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKTtcclxuICAgICAgICBpZiAoIUlzTnVsbChwYXJlbnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKTtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgLy8gMy4xLjQuMSBPcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxyXG4gICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnlnZXRvd25tZXRhZGF0YVxyXG4gICAgZnVuY3Rpb24gT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xyXG4gICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgLypDcmVhdGUqLyBmYWxzZSk7XHJcbiAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSlcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcclxuICAgIH1cclxuICAgIC8vIDMuMS41LjEgT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUClcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5ZGVmaW5lb3dubWV0YWRhdGFcclxuICAgIGZ1bmN0aW9uIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcclxuICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gdHJ1ZSk7XHJcbiAgICAgICAgbWV0YWRhdGFNYXAuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIDMuMS42LjEgT3JkaW5hcnlNZXRhZGF0YUtleXMoTywgUClcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5bWV0YWRhdGFrZXlzXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeU1ldGFkYXRhS2V5cyhPLCBQKSB7XHJcbiAgICAgICAgdmFyIG93bktleXMgPSBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcclxuICAgICAgICB2YXIgcGFyZW50ID0gT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKTtcclxuICAgICAgICBpZiAocGFyZW50ID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gb3duS2V5cztcclxuICAgICAgICB2YXIgcGFyZW50S2V5cyA9IE9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XHJcbiAgICAgICAgaWYgKHBhcmVudEtleXMubGVuZ3RoIDw9IDApXHJcbiAgICAgICAgICAgIHJldHVybiBvd25LZXlzO1xyXG4gICAgICAgIGlmIChvd25LZXlzLmxlbmd0aCA8PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50S2V5cztcclxuICAgICAgICB2YXIgc2V0ID0gbmV3IF9TZXQoKTtcclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgb3duS2V5c18xID0gb3duS2V5czsgX2kgPCBvd25LZXlzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBvd25LZXlzXzFbX2ldO1xyXG4gICAgICAgICAgICB2YXIgaGFzS2V5ID0gc2V0LmhhcyhrZXkpO1xyXG4gICAgICAgICAgICBpZiAoIWhhc0tleSkge1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChrZXkpO1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBwYXJlbnRLZXlzXzEgPSBwYXJlbnRLZXlzOyBfYSA8IHBhcmVudEtleXNfMS5sZW5ndGg7IF9hKyspIHtcclxuICAgICAgICAgICAgdmFyIGtleSA9IHBhcmVudEtleXNfMVtfYV07XHJcbiAgICAgICAgICAgIHZhciBoYXNLZXkgPSBzZXQuaGFzKGtleSk7XHJcbiAgICAgICAgICAgIGlmICghaGFzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBzZXQuYWRkKGtleSk7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxuICAgIC8vIDMuMS43LjEgT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUClcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5b3dubWV0YWRhdGFrZXlzXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xyXG4gICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXHJcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgICAgIHZhciBrZXlzT2JqID0gbWV0YWRhdGFNYXAua2V5cygpO1xyXG4gICAgICAgIHZhciBpdGVyYXRvciA9IEdldEl0ZXJhdG9yKGtleXNPYmopO1xyXG4gICAgICAgIHZhciBrID0gMDtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICB2YXIgbmV4dCA9IEl0ZXJhdG9yU3RlcChpdGVyYXRvcik7XHJcbiAgICAgICAgICAgIGlmICghbmV4dCkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG5leHRWYWx1ZSA9IEl0ZXJhdG9yVmFsdWUobmV4dCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzW2tdID0gbmV4dFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBrKys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gNiBFQ01BU2NyaXB0IERhdGEgVHlwMGVzIGFuZCBWYWx1ZXNcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXHJcbiAgICBmdW5jdGlvbiBUeXBlKHgpIHtcclxuICAgICAgICBpZiAoeCA9PT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIDEgLyogTnVsbCAqLztcclxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB4KSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjogcmV0dXJuIDAgLyogVW5kZWZpbmVkICovO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiByZXR1cm4gMiAvKiBCb29sZWFuICovO1xyXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHJldHVybiAzIC8qIFN0cmluZyAqLztcclxuICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOiByZXR1cm4gNCAvKiBTeW1ib2wgKi87XHJcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjogcmV0dXJuIDUgLyogTnVtYmVyICovO1xyXG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHJldHVybiB4ID09PSBudWxsID8gMSAvKiBOdWxsICovIDogNiAvKiBPYmplY3QgKi87XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiA2IC8qIE9iamVjdCAqLztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyA2LjEuMSBUaGUgVW5kZWZpbmVkIFR5cGVcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMtdW5kZWZpbmVkLXR5cGVcclxuICAgIGZ1bmN0aW9uIElzVW5kZWZpbmVkKHgpIHtcclxuICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgLy8gNi4xLjIgVGhlIE51bGwgVHlwZVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcy1udWxsLXR5cGVcclxuICAgIGZ1bmN0aW9uIElzTnVsbCh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyA2LjEuNSBUaGUgU3ltYm9sIFR5cGVcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMtc3ltYm9sLXR5cGVcclxuICAgIGZ1bmN0aW9uIElzU3ltYm9sKHgpIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCI7XHJcbiAgICB9XHJcbiAgICAvLyA2LjEuNyBUaGUgT2JqZWN0IFR5cGVcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC10eXBlXHJcbiAgICBmdW5jdGlvbiBJc09iamVjdCh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiID8geCAhPT0gbnVsbCA6IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICB9XHJcbiAgICAvLyA3LjEgVHlwZSBDb252ZXJzaW9uXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10eXBlLWNvbnZlcnNpb25cclxuICAgIC8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcclxuICAgIGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0LCBQcmVmZXJyZWRUeXBlKSB7XHJcbiAgICAgICAgc3dpdGNoIChUeXBlKGlucHV0KSkge1xyXG4gICAgICAgICAgICBjYXNlIDAgLyogVW5kZWZpbmVkICovOiByZXR1cm4gaW5wdXQ7XHJcbiAgICAgICAgICAgIGNhc2UgMSAvKiBOdWxsICovOiByZXR1cm4gaW5wdXQ7XHJcbiAgICAgICAgICAgIGNhc2UgMiAvKiBCb29sZWFuICovOiByZXR1cm4gaW5wdXQ7XHJcbiAgICAgICAgICAgIGNhc2UgMyAvKiBTdHJpbmcgKi86IHJldHVybiBpbnB1dDtcclxuICAgICAgICAgICAgY2FzZSA0IC8qIFN5bWJvbCAqLzogcmV0dXJuIGlucHV0O1xyXG4gICAgICAgICAgICBjYXNlIDUgLyogTnVtYmVyICovOiByZXR1cm4gaW5wdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoaW50ID0gUHJlZmVycmVkVHlwZSA9PT0gMyAvKiBTdHJpbmcgKi8gPyBcInN0cmluZ1wiIDogUHJlZmVycmVkVHlwZSA9PT0gNSAvKiBOdW1iZXIgKi8gPyBcIm51bWJlclwiIDogXCJkZWZhdWx0XCI7XHJcbiAgICAgICAgdmFyIGV4b3RpY1RvUHJpbSA9IEdldE1ldGhvZChpbnB1dCwgdG9QcmltaXRpdmVTeW1ib2wpO1xyXG4gICAgICAgIGlmIChleG90aWNUb1ByaW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gZXhvdGljVG9QcmltLmNhbGwoaW5wdXQsIGhpbnQpO1xyXG4gICAgICAgICAgICBpZiAoSXNPYmplY3QocmVzdWx0KSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIGhpbnQgPT09IFwiZGVmYXVsdFwiID8gXCJudW1iZXJcIiA6IGhpbnQpO1xyXG4gICAgfVxyXG4gICAgLy8gNy4xLjEuMSBPcmRpbmFyeVRvUHJpbWl0aXZlKE8sIGhpbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeVRvUHJpbWl0aXZlKE8sIGhpbnQpIHtcclxuICAgICAgICBpZiAoaGludCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB2YXIgdG9TdHJpbmdfMSA9IE8udG9TdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHRvU3RyaW5nXzEpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdG9TdHJpbmdfMS5jYWxsKE8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbHVlT2YgPSBPLnZhbHVlT2Y7XHJcbiAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHZhbHVlT2YpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWVPZi5jYWxsKE8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZU9mID0gTy52YWx1ZU9mO1xyXG4gICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh2YWx1ZU9mKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlT2YuY2FsbChPKTtcclxuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0b1N0cmluZ18yID0gTy50b1N0cmluZztcclxuICAgICAgICAgICAgaWYgKElzQ2FsbGFibGUodG9TdHJpbmdfMikpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0b1N0cmluZ18yLmNhbGwoTyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHJlc3VsdCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICB9XHJcbiAgICAvLyA3LjEuMiBUb0Jvb2xlYW4oYXJndW1lbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvMjAxNi8jc2VjLXRvYm9vbGVhblxyXG4gICAgZnVuY3Rpb24gVG9Cb29sZWFuKGFyZ3VtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuICEhYXJndW1lbnQ7XHJcbiAgICB9XHJcbiAgICAvLyA3LjEuMTIgVG9TdHJpbmcoYXJndW1lbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3N0cmluZ1xyXG4gICAgZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gXCJcIiArIGFyZ3VtZW50O1xyXG4gICAgfVxyXG4gICAgLy8gNy4xLjE0IFRvUHJvcGVydHlLZXkoYXJndW1lbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XHJcbiAgICBmdW5jdGlvbiBUb1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XHJcbiAgICAgICAgdmFyIGtleSA9IFRvUHJpbWl0aXZlKGFyZ3VtZW50LCAzIC8qIFN0cmluZyAqLyk7XHJcbiAgICAgICAgaWYgKElzU3ltYm9sKGtleSkpXHJcbiAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgcmV0dXJuIFRvU3RyaW5nKGtleSk7XHJcbiAgICB9XHJcbiAgICAvLyA3LjIgVGVzdGluZyBhbmQgQ29tcGFyaXNvbiBPcGVyYXRpb25zXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10ZXN0aW5nLWFuZC1jb21wYXJpc29uLW9wZXJhdGlvbnNcclxuICAgIC8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XHJcbiAgICBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXlcclxuICAgICAgICAgICAgPyBBcnJheS5pc0FycmF5KGFyZ3VtZW50KVxyXG4gICAgICAgICAgICA6IGFyZ3VtZW50IGluc3RhbmNlb2YgT2JqZWN0XHJcbiAgICAgICAgICAgICAgICA/IGFyZ3VtZW50IGluc3RhbmNlb2YgQXJyYXlcclxuICAgICAgICAgICAgICAgIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiO1xyXG4gICAgfVxyXG4gICAgLy8gNy4yLjMgSXNDYWxsYWJsZShhcmd1bWVudClcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcclxuICAgIGZ1bmN0aW9uIElzQ2FsbGFibGUoYXJndW1lbnQpIHtcclxuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYXMgd2UgY2Fubm90IGNoZWNrIGZvciBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QuXHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgfVxyXG4gICAgLy8gNy4yLjQgSXNDb25zdHJ1Y3Rvcihhcmd1bWVudClcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3JcclxuICAgIGZ1bmN0aW9uIElzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcclxuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYXMgd2UgY2Fubm90IGNoZWNrIGZvciBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZC5cclxuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICB9XHJcbiAgICAvLyA3LjIuNyBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNwcm9wZXJ0eWtleVxyXG4gICAgZnVuY3Rpb24gSXNQcm9wZXJ0eUtleShhcmd1bWVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoVHlwZShhcmd1bWVudCkpIHtcclxuICAgICAgICAgICAgY2FzZSAzIC8qIFN0cmluZyAqLzogcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGNhc2UgNCAvKiBTeW1ib2wgKi86IHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gNy4zIE9wZXJhdGlvbnMgb24gT2JqZWN0c1xyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3BlcmF0aW9ucy1vbi1vYmplY3RzXHJcbiAgICAvLyA3LjMuOSBHZXRNZXRob2QoViwgUClcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxyXG4gICAgZnVuY3Rpb24gR2V0TWV0aG9kKFYsIFApIHtcclxuICAgICAgICB2YXIgZnVuYyA9IFZbUF07XHJcbiAgICAgICAgaWYgKGZ1bmMgPT09IHVuZGVmaW5lZCB8fCBmdW5jID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICghSXNDYWxsYWJsZShmdW5jKSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgLy8gNy40IE9wZXJhdGlvbnMgb24gSXRlcmF0b3IgT2JqZWN0c1xyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3BlcmF0aW9ucy1vbi1pdGVyYXRvci1vYmplY3RzXHJcbiAgICBmdW5jdGlvbiBHZXRJdGVyYXRvcihvYmopIHtcclxuICAgICAgICB2YXIgbWV0aG9kID0gR2V0TWV0aG9kKG9iaiwgaXRlcmF0b3JTeW1ib2wpO1xyXG4gICAgICAgIGlmICghSXNDYWxsYWJsZShtZXRob2QpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIGZyb20gQ2FsbFxyXG4gICAgICAgIHZhciBpdGVyYXRvciA9IG1ldGhvZC5jYWxsKG9iaik7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdChpdGVyYXRvcikpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3I7XHJcbiAgICB9XHJcbiAgICAvLyA3LjQuNCBJdGVyYXRvclZhbHVlKGl0ZXJSZXN1bHQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvMjAxNi8jc2VjLWl0ZXJhdG9ydmFsdWVcclxuICAgIGZ1bmN0aW9uIEl0ZXJhdG9yVmFsdWUoaXRlclJlc3VsdCkge1xyXG4gICAgICAgIHJldHVybiBpdGVyUmVzdWx0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gNy40LjUgSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXRlcmF0b3JzdGVwXHJcbiAgICBmdW5jdGlvbiBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IGZhbHNlIDogcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yY2xvc2VcclxuICAgIGZ1bmN0aW9uIEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpIHtcclxuICAgICAgICB2YXIgZiA9IGl0ZXJhdG9yW1wicmV0dXJuXCJdO1xyXG4gICAgICAgIGlmIChmKVxyXG4gICAgICAgICAgICBmLmNhbGwoaXRlcmF0b3IpO1xyXG4gICAgfVxyXG4gICAgLy8gOS4xIE9yZGluYXJ5IE9iamVjdCBJbnRlcm5hbCBNZXRob2RzIGFuZCBJbnRlcm5hbCBTbG90c1xyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXHJcbiAgICAvLyA5LjEuMS4xIE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTylcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5Z2V0cHJvdG90eXBlb2ZcclxuICAgIGZ1bmN0aW9uIE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTykge1xyXG4gICAgICAgIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKTtcclxuICAgICAgICBpZiAodHlwZW9mIE8gIT09IFwiZnVuY3Rpb25cIiB8fCBPID09PSBmdW5jdGlvblByb3RvdHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xyXG4gICAgICAgIC8vIFR5cGVTY3JpcHQgZG9lc24ndCBzZXQgX19wcm90b19fIGluIEVTNSwgYXMgaXQncyBub24tc3RhbmRhcmQuXHJcbiAgICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci4gQ29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbnNcclxuICAgICAgICAvLyBtdXN0IGVpdGhlciBzZXQgX19wcm90b19fIG9uIGEgc3ViY2xhc3MgY29uc3RydWN0b3IgdG8gdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IsXHJcbiAgICAgICAgLy8gb3IgZW5zdXJlIGVhY2ggY2xhc3MgaGFzIGEgdmFsaWQgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSBvbiBpdHMgcHJvdG90eXBlIHRoYXRcclxuICAgICAgICAvLyBwb2ludHMgYmFjayB0byB0aGUgY29uc3RydWN0b3IuXHJcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgRnVuY3Rpb24uW1tQcm90b3R5cGVdXSwgdGhlbiB0aGlzIGlzIGRlZmluYXRlbHkgaW5oZXJpdGVkLlxyXG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpbiBFUzYgb3Igd2hlbiB1c2luZyBfX3Byb3RvX18gaW4gYSBjb21wYXRpYmxlIGJyb3dzZXIuXHJcbiAgICAgICAgaWYgKHByb3RvICE9PSBmdW5jdGlvblByb3RvdHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xyXG4gICAgICAgIC8vIElmIHRoZSBzdXBlciBwcm90b3R5cGUgaXMgT2JqZWN0LnByb3RvdHlwZSwgbnVsbCwgb3IgdW5kZWZpbmVkLCB0aGVuIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGhlcml0YWdlLlxyXG4gICAgICAgIHZhciBwcm90b3R5cGUgPSBPLnByb3RvdHlwZTtcclxuICAgICAgICB2YXIgcHJvdG90eXBlUHJvdG8gPSBwcm90b3R5cGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XHJcbiAgICAgICAgaWYgKHByb3RvdHlwZVByb3RvID09IG51bGwgfHwgcHJvdG90eXBlUHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUpXHJcbiAgICAgICAgICAgIHJldHVybiBwcm90bztcclxuICAgICAgICAvLyBJZiB0aGUgY29uc3RydWN0b3Igd2FzIG5vdCBhIGZ1bmN0aW9uLCB0aGVuIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGhlcml0YWdlLlxyXG4gICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb3RvdHlwZVByb3RvLmNvbnN0cnVjdG9yO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xyXG4gICAgICAgIC8vIElmIHdlIGhhdmUgc29tZSBraW5kIG9mIHNlbGYtcmVmZXJlbmNlLCB0aGVuIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGhlcml0YWdlLlxyXG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gTylcclxuICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xyXG4gICAgICAgIC8vIHdlIGhhdmUgYSBwcmV0dHkgZ29vZCBndWVzcyBhdCB0aGUgaGVyaXRhZ2UuXHJcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xyXG4gICAgfVxyXG4gICAgLy8gbmFpdmUgTWFwIHNoaW1cclxuICAgIGZ1bmN0aW9uIENyZWF0ZU1hcFBvbHlmaWxsKCkge1xyXG4gICAgICAgIHZhciBjYWNoZVNlbnRpbmVsID0ge307XHJcbiAgICAgICAgdmFyIGFycmF5U2VudGluZWwgPSBbXTtcclxuICAgICAgICB2YXIgTWFwSXRlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBNYXBJdGVyYXRvcihrZXlzLCB2YWx1ZXMsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0ga2V5cztcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9yID0gc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlW1wiQEBpdGVyYXRvclwiXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XHJcbiAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xyXG4gICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2luZGV4O1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLl9rZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9zZWxlY3Rvcih0aGlzLl9rZXlzW2luZGV4XSwgdGhpcy5fdmFsdWVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA+PSB0aGlzLl9rZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gYXJyYXlTZW50aW5lbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gYXJyYXlTZW50aW5lbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS50aHJvdyA9IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBhcnJheVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IGFycmF5U2VudGluZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBhcnJheVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IGFycmF5U2VudGluZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IHRydWUgfTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hcEl0ZXJhdG9yO1xyXG4gICAgICAgIH0oKSk7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIE1hcCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBjYWNoZVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IC0yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcInNpemVcIiwge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDsgfSxcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gZmFsc2UpID49IDA7IH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLl92YWx1ZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kKGtleSwgLyppbnNlcnQqLyB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXggKyAxOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXNbaSAtIDFdID0gdGhpcy5fa2V5c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2kgLSAxXSA9IHRoaXMuX3ZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGgtLTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMubGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdGhpcy5fY2FjaGVLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBjYWNoZVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gLTI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUtleSA9IGNhY2hlU2VudGluZWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gLTI7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcih0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMsIGdldEtleSk7IH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE1hcEl0ZXJhdG9yKHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcywgZ2V0VmFsdWUpOyB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTWFwSXRlcmF0b3IodGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzLCBnZXRFbnRyeSk7IH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGVbXCJAQGl0ZXJhdG9yXCJdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbnRyaWVzKCk7IH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbnRyaWVzKCk7IH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuX2ZpbmQgPSBmdW5jdGlvbiAoa2V5LCBpbnNlcnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUtleSAhPT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IHRoaXMuX2tleXMuaW5kZXhPZih0aGlzLl9jYWNoZUtleSA9IGtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVJbmRleCA8IDAgJiYgaW5zZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IHRoaXMuX2tleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVJbmRleDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hcDtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGdldEtleShrZXksIF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0VmFsdWUoXywgdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBnZXRFbnRyeShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbmFpdmUgU2V0IHNoaW1cclxuICAgIGZ1bmN0aW9uIENyZWF0ZVNldFBvbHlmaWxsKCkge1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBTZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAgPSBuZXcgX01hcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcInNpemVcIiwge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAuc2l6ZTsgfSxcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9tYXAuaGFzKHZhbHVlKTsgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRoaXMuX21hcC5zZXQodmFsdWUsIHZhbHVlKSwgdGhpczsgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRoaXMuX21hcC5kZWxldGUodmFsdWUpOyB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9tYXAuY2xlYXIoKTsgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLmtleXMoKTsgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAudmFsdWVzKCk7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX21hcC5lbnRyaWVzKCk7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGVbXCJAQGl0ZXJhdG9yXCJdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5rZXlzKCk7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5rZXlzKCk7IH07XHJcbiAgICAgICAgICAgIHJldHVybiBTZXQ7XHJcbiAgICAgICAgfSgpKTtcclxuICAgIH1cclxuICAgIC8vIG5haXZlIFdlYWtNYXAgc2hpbVxyXG4gICAgZnVuY3Rpb24gQ3JlYXRlV2Vha01hcFBvbHlmaWxsKCkge1xyXG4gICAgICAgIHZhciBVVUlEX1NJWkUgPSAxNjtcclxuICAgICAgICB2YXIga2V5cyA9IEhhc2hNYXAuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHJvb3RLZXkgPSBDcmVhdGVVbmlxdWVLZXkoKTtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gV2Vha01hcCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleSA9IENyZWF0ZVVuaXF1ZUtleSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGUgIT09IHVuZGVmaW5lZCA/IEhhc2hNYXAuaGFzKHRhYmxlLCB0aGlzLl9rZXkpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGUgIT09IHVuZGVmaW5lZCA/IEhhc2hNYXAuZ2V0KHRhYmxlLCB0aGlzLl9rZXkpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAodGFyZ2V0LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVbdGhpcy5fa2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGUgIT09IHVuZGVmaW5lZCA/IGRlbGV0ZSB0YWJsZVt0aGlzLl9rZXldIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgLy8gTk9URTogbm90IGEgcmVhbCBjbGVhciwganVzdCBtYWtlcyB0aGUgcHJldmlvdXMgZGF0YSB1bnJlYWNoYWJsZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBXZWFrTWFwO1xyXG4gICAgICAgIH0oKSk7XHJcbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlVW5pcXVlS2V5KCkge1xyXG4gICAgICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgICAgICBkb1xyXG4gICAgICAgICAgICAgICAga2V5ID0gXCJAQFdlYWtNYXBAQFwiICsgQ3JlYXRlVVVJRCgpO1xyXG4gICAgICAgICAgICB3aGlsZSAoSGFzaE1hcC5oYXMoa2V5cywga2V5KSk7XHJcbiAgICAgICAgICAgIGtleXNba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgY3JlYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICghaGFzT3duLmNhbGwodGFyZ2V0LCByb290S2V5KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHJvb3RLZXksIHsgdmFsdWU6IEhhc2hNYXAuY3JlYXRlKCkgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtyb290S2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gRmlsbFJhbmRvbUJ5dGVzKGJ1ZmZlciwgc2l6ZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSlcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IE1hdGgucmFuZG9tKCkgKiAweGZmIHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gR2VuUmFuZG9tQnl0ZXMoc2l6ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoc2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtc0NyeXB0byAhPT0gXCJ1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHNpemUpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGaWxsUmFuZG9tQnl0ZXMobmV3IFVpbnQ4QXJyYXkoc2l6ZSksIHNpemUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBGaWxsUmFuZG9tQnl0ZXMobmV3IEFycmF5KHNpemUpLCBzaXplKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlVVVJRCgpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSBHZW5SYW5kb21CeXRlcyhVVUlEX1NJWkUpO1xyXG4gICAgICAgICAgICAvLyBtYXJrIGFzIHJhbmRvbSAtIFJGQyA0MTIyIMKnIDQuNFxyXG4gICAgICAgICAgICBkYXRhWzZdID0gZGF0YVs2XSAmIDB4NGYgfCAweDQwO1xyXG4gICAgICAgICAgICBkYXRhWzhdID0gZGF0YVs4XSAmIDB4YmYgfCAweDgwO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgVVVJRF9TSVpFOyArK29mZnNldCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ5dGUgPSBkYXRhW29mZnNldF07XHJcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSA0IHx8IG9mZnNldCA9PT0gNiB8fCBvZmZzZXQgPT09IDgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiLVwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNilcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYnl0ZS50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHVzZXMgYSBoZXVyaXN0aWMgdXNlZCBieSB2OCBhbmQgY2hha3JhIHRvIGZvcmNlIGFuIG9iamVjdCBpbnRvIGRpY3Rpb25hcnkgbW9kZS5cclxuICAgIGZ1bmN0aW9uIE1ha2VEaWN0aW9uYXJ5KG9iaikge1xyXG4gICAgICAgIG9iai5fXyA9IHVuZGVmaW5lZDtcclxuICAgICAgICBkZWxldGUgb2JqLl9fO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICAvLyBwYXRjaCBnbG9iYWwgUmVmbGVjdFxyXG4gICAgKGZ1bmN0aW9uIChfX2dsb2JhbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgX19nbG9iYWwuUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBpZiAoX19nbG9iYWwuUmVmbGVjdCAhPT0gUmVmbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBSZWZsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKFJlZmxlY3QsIHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2xvYmFsLlJlZmxlY3RbcF0gPSBSZWZsZWN0W3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX19nbG9iYWwuUmVmbGVjdCA9IFJlZmxlY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgfSkodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6XHJcbiAgICAgICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDpcclxuICAgICAgICAgICAgRnVuY3Rpb24oXCJyZXR1cm4gdGhpcztcIikoKSk7XHJcbn0pKFJlZmxlY3QgfHwgKFJlZmxlY3QgPSB7fSkpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWZsZWN0LmpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWZsZWN0LW1ldGFkYXRhL1JlZmxlY3QuanNcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcCwgV2F0Y2h9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb259IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uQ2hlY2tib3hNb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb25fY2hlY2tib3gnXG5cbkBDb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoZWNrYm94IGV4dGVuZHMgUXVlc3Rpb248UXVlc3Rpb25DaGVja2JveE1vZGVsPiB7XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52YWx1ZSB8fCBbXTtcbiAgICB9XG4gICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gbmV3VmFsO1xuICAgIH1cbiAgICBnZXQgY29sV2lkdGgoKSB7XG4gICAgICAgIHZhciBjb2xDb3VudCA9IHRoaXMucXVlc3Rpb24uY29sQ291bnQ7XG4gICAgICAgIHJldHVybiBjb2xDb3VudCA+IDAgPyAoMTAwIC8gY29sQ291bnQpICsgJyUnIDogXCJcIjtcbiAgICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNoZWNrYm94XCIsIENoZWNrYm94KVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9jaGVja2JveC52dWUiLCJcblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7Q29tcG9uZW50LCBQcm9wfSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJ1xuaW1wb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9ufSBmcm9tICcuL3F1ZXN0aW9uJ1xuaW1wb3J0IHtRdWVzdGlvbkNvbW1lbnRNb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb25fY29tbWVudCdcblxuQENvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWVudCBleHRlbmRzIFF1ZXN0aW9uPFF1ZXN0aW9uQ29tbWVudE1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jb21tZW50XCIsIENvbW1lbnQpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2NvbW1lbnQudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcH0gZnJvbSAndnVlLXByb3BlcnR5LWRlY29yYXRvcidcbmltcG9ydCB7ZGVmYXVsdCBhcyBRdWVzdGlvbn0gZnJvbSAnLi9xdWVzdGlvbidcbmltcG9ydCB7UXVlc3Rpb25Ecm9wZG93bk1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9kcm9wZG93bidcblxuQENvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvbjxRdWVzdGlvbkRyb3Bkb3duTW9kZWw+IHt9XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWRyb3Bkb3duXCIsIERyb3Bkb3duKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9kcm9wZG93bi52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge1F1ZXN0aW9uIGFzIFF1ZXN0aW9uTW9kZWx9IGZyb20gJy4uL3F1ZXN0aW9uJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvcnMgZXh0ZW5kcyBWdWUge1xuICAgIEBQcm9wXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uTW9kZWxcbiAgICBAUHJvcFxuICAgIGNzczogYW55XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVycm9yc1wiLCBFcnJvcnMpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2Vycm9ycy52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb259IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uRmlsZU1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9maWxlJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlIGV4dGVuZHMgUXVlc3Rpb248UXVlc3Rpb25GaWxlTW9kZWw+IHtcbiAgICBkb0NoYW5nZSAoZSkge1xuICAgICAgICB2YXIgc3JjID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgICAgICBpZiAoIXdpbmRvd1tcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcbiAgICAgICAgaWYgKCFzcmMgfHwgIXNyYy5maWxlcyB8fCBzcmMuZmlsZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmxvYWRGaWxlKHNyYy5maWxlc1swXSk7XG4gICAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1maWxlXCIsIEZpbGUpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2ZpbGUudnVlIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb259IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uSHRtbE1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9odG1sJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdG1sIGV4dGVuZHMgVnVlIHtcbiAgICBAUHJvcFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbkh0bWxNb2RlbFxuICAgIEBQcm9wXG4gICAgY3NzOiBhbnlcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaHRtbFwiLCBIdG1sKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9odG1sLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7Q29tcG9uZW50LCBQcm9wfSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJ1xuaW1wb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9ufSBmcm9tICcuL3F1ZXN0aW9uJ1xuaW1wb3J0IHtRdWVzdGlvbk1hdHJpeE1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9tYXRyaXgnXG5cbkBDb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeCBleHRlbmRzIFF1ZXN0aW9uPFF1ZXN0aW9uTWF0cml4TW9kZWw+IHtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4XCIsIE1hdHJpeClcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4LnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7Q29tcG9uZW50LCBQcm9wfSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJ1xuaW1wb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9ufSBmcm9tICcuL3F1ZXN0aW9uJ1xuaW1wb3J0IHtRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWx9IGZyb20gJy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRyaXhEcm9wZG93biBleHRlbmRzIFF1ZXN0aW9uPFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbD4ge1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXhkcm9wZG93blwiLCBNYXRyaXhEcm9wZG93bilcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb259IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljJ1xuaW1wb3J0IHtNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZX0gZnJvbSAnLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRyaXhEeW5hbWljIGV4dGVuZHMgUXVlc3Rpb248UXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWw+IHtcbiAgICBnZXQgcm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3M7XG4gICAgfVxuICAgIHJlbW92ZVJvd0NsaWNrKHJvdykge1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMucXVlc3Rpb24uY2FjaGVkVmlzaWJsZVJvd3M7XG4gICAgICAgIHZhciBpbmRleCA9IHJvd3MuaW5kZXhPZihyb3cpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3coaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFJvd0NsaWNrKCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmFkZFJvdygpO1xuICAgIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHluYW1pY1wiLCBNYXRyaXhEeW5hbWljKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb259IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWx9IGZyb20gJy4uL3F1ZXN0aW9uX211bHRpcGxldGV4dCdcblxuQENvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVsdGlwbGVUZXh0IGV4dGVuZHMgUXVlc3Rpb248UXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbD4ge1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1tdWx0aXBsZXRleHRcIiwgTXVsdGlwbGVUZXh0KVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlIiwiXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge3N1cnZleUNzc30gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIlxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSAnLi4vcXVlc3Rpb24nXG5cbkBDb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE90aGVyQ2hvaWNlIGV4dGVuZHMgVnVlIHtcbiAgICBAUHJvcFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblxuICAgIEBQcm9wXG4gICAgY3NzOiBPYmplY3Rcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIE90aGVyQ2hvaWNlKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge3N1cnZleUNzc30gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIlxuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSAnLi4vc3VydmV5J1xuaW1wb3J0IHtRdWVzdGlvbiBhcyBRdWVzdGlvbk1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbidcbmltcG9ydCB7UGFnZU1vZGVsfSBmcm9tICcuLi9wYWdlJ1xuaW1wb3J0IHtoZWxwZXJzfSBmcm9tICcuL2hlbHBlcnMnXG5pbXBvcnQge1BhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsfSBmcm9tIFwiLi4vcGFuZWxcIlxuXG5AQ29tcG9uZW50KHtcbiAgICBtaXhpbnM6IFtoZWxwZXJzXVxufSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2UgZXh0ZW5kcyBWdWUge1xuICAgIEBQcm9wXG4gICAgc3VydmV5OiBTdXJ2ZXlNb2RlbFxuICAgIEBQcm9wXG4gICAgcGFnZTogUGFnZU1vZGVsXG4gICAgQFByb3BcbiAgICBjc3M6IE9iamVjdFxuXG4gICAgZ2V0IGhhc1RpdGxlICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5wYWdlLnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dQYWdlVGl0bGVzO1xuICAgIH1cbiAgICBnZXQgbnVtICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZS5udW0gPiAwID8gdGhpcy5wYWdlLm51bSArIFwiLiBcIiA6IFwiXCI7XG4gICAgfVxuICAgIGdldCByb3dzICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZS5yb3dzO1xuICAgIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFnZVwiLCBQYWdlKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9wYWdlLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge1BhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsfSBmcm9tIFwiLi4vcGFuZWxcIlxuaW1wb3J0IHtRdWVzdGlvbiBhcyBRdWVzdGlvbk1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbidcbmltcG9ydCB7SVN1cnZleX0gZnJvbSAnLi4vYmFzZSdcbmltcG9ydCB7aGVscGVyc30gZnJvbSAnLi9oZWxwZXJzJ1xuXG5AQ29tcG9uZW50KHtcbiAgICBtaXhpbnM6IFtoZWxwZXJzXVxufSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhbmVsIGV4dGVuZHMgVnVlIHtcbiAgICBAUHJvcFxuICAgIHF1ZXN0aW9uOiBQYW5lbE1vZGVsXG4gICAgQFByb3BcbiAgICBpc0VkaXRNb2RlOiBCb29sZWFuXG4gICAgQFByb3BcbiAgICBjc3M6IGFueVxuXG4gICAgZ2V0IHJvd3MgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yb3dzO1xuICAgIH1cbiAgICBnZXQgaGFzVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDBcbiAgICB9XG4gICAgZ2V0IHN1cnZleSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmRhdGE7XG4gICAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbFwiLCBQYW5lbClcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvcGFuZWwudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tICcuLi9zdXJ2ZXknXG5cbkBDb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2dyZXNzIGV4dGVuZHMgVnVlIHtcbiAgICBAUHJvcFxuICAgIHN1cnZleTogU3VydmV5TW9kZWxcbiAgICBAUHJvcFxuICAgIGNzczogYW55XG4gICAgZ2V0IHByb2dyZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0UHJvZ3Jlc3MoKSArICclJztcbiAgICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXByb2dyZXNzXCIsIFByb2dyZXNzKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9wcm9ncmVzcy52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb259IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uUmFkaW9ncm91cE1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9yYWRpb2dyb3VwJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYWRpb2dyb3VwIGV4dGVuZHMgUXVlc3Rpb248UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw+IHtcbiAgICAvLyBUT0RPIG1heSBiZSBuZWVkIHRvIG1vdmUgdG8gdGhlIG1vZGVsXG4gICAgZ2V0IGNvbFdpZHRoKCkge1xuICAgICAgICB2YXIgY29sQ291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvbENvdW50O1xuICAgICAgICByZXR1cm4gY29sQ291bnQgPiAwID8gKDEwMCAvIGNvbENvdW50KSArICclJyA6IFwiXCI7XG4gICAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYWRpb2dyb3VwXCIsIFJhZGlvZ3JvdXApXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcH0gZnJvbSAndnVlLXByb3BlcnR5LWRlY29yYXRvcidcbmltcG9ydCB7ZGVmYXVsdCBhcyBRdWVzdGlvbn0gZnJvbSAnLi9xdWVzdGlvbidcbmltcG9ydCB7UXVlc3Rpb25SYXRpbmdNb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb25fcmF0aW5nJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYXRpbmcgZXh0ZW5kcyBRdWVzdGlvbjxRdWVzdGlvblJhdGluZ01vZGVsPiB7XG4gICAgc2VsZWN0aW9uID0gJydcbiAgICBnZXRDc3MoaXRlbSkge1xuICAgICAgICBsZXQgY3NzID0gdGhpcy5jc3MucmF0aW5nLml0ZW07XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PSBpdGVtLnZhbHVlIHx8IHRoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgY3NzID0gY3NzICsgXCIgYWN0aXZlXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG4gICAgY2hhbmdlKGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYXRpbmdcIiwgUmF0aW5nKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9yYXRpbmcudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7Q29tcG9uZW50LCBQcm9wfSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJ1xuaW1wb3J0IHtTdXJ2ZXlNb2RlbH0gZnJvbSAnLi4vc3VydmV5J1xuaW1wb3J0IHtQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCwgUXVlc3Rpb25Sb3dNb2RlbH0gZnJvbSBcIi4uL3BhbmVsXCJcbmltcG9ydCB7UXVlc3Rpb24gYXMgUXVlc3Rpb25Nb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb24nXG5pbXBvcnQge2hlbHBlcnN9IGZyb20gJy4vaGVscGVycydcblxuQENvbXBvbmVudCh7XG4gICAgbWl4aW5zOiBbaGVscGVyc11cbn0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3cgZXh0ZW5kcyBWdWUge1xuICAgIEBQcm9wXG4gICAgcm93OiBhbnlcbiAgICBAUHJvcFxuICAgIGNzczogYW55XG4gICAgQFByb3BcbiAgICBzdXJ2ZXk6IFN1cnZleU1vZGVsXG5cbiAgICBnZXRXaWRnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uTW9kZWwpIHtcbiAgICAgICAgaWYoZWxlbWVudC5jdXN0b21XaWRnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmN1c3RvbVdpZGdldC5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3VydmV5LScgKyBlbGVtZW50LmdldFR5cGUoKTtcbiAgICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJvd1wiLCBSb3cpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3Jvdy52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge3N1cnZleUNzc30gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIlxuaW1wb3J0IHtWdWVTdXJ2ZXlNb2RlbCBhcyBTdXJ2ZXlNb2RlbH0gZnJvbSAnLi9zdXJ2ZXlNb2RlbCdcblxuQENvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VydmV5IGV4dGVuZHMgVnVlIHtcbiAgICBAUHJvcFxuICAgIHN1cnZleTogU3VydmV5TW9kZWxcblxuICAgIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjayA9IHRoaXMuZm9yY2VVcGRhdGU7XG4gICAgfVxuICAgIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBoYXNUaXRsZSAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5LnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dUaXRsZTtcbiAgICB9XG4gICAgZ2V0IGhhc0NvbXBsZXRlZFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5zaG93Q29tcGxldGVkUGFnZSAmJiB0aGlzLnN1cnZleS5zdGF0ZSA9PT0gJ2NvbXBsZXRlZCc7XG4gICAgfVxuICAgIGdldCBjc3MgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICAgIH1cbiAgICBnZXROYXZCdG5DbGFzc2VzKGJ0blR5cGUpIHtcbiAgICAgICAgY29uc3QgYnRuQ2xhc3MgPSB0aGlzLmNzcy5uYXZpZ2F0aW9uW2J0blR5cGVdO1xuICAgICAgICByZXR1cm4gdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbiArICcgJyArIGJ0bkNsYXNzO1xuICAgIH1cbiAgICBwcmV2UGFnZSgpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucHJldlBhZ2UoKTtcbiAgICB9XG4gICAgbmV4dFBhZ2UoKSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm5leHRQYWdlKCk7XG4gICAgfVxuICAgIGNvbXBsZXRlTGFzdFBhZ2UoKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgICB9XG59XG5cbi8vIFRPRE86IG1ha2UgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgc3VydmV5Q3NzIGluIGFsbCBleGFtcGxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleSwgJ2Nzc1R5cGUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKG5ld1R5cGUpIHsgc3VydmV5Q3NzLmN1cnJlbnRUeXBlID0gbmV3VHlwZTsgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn0pO1xuXG5WdWUuY29tcG9uZW50KFwic3VydmV5XCIsIFN1cnZleSlcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvc3VydmV5LnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7Q29tcG9uZW50LCBQcm9wfSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJ1xuaW1wb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9ufSBmcm9tICcuL3F1ZXN0aW9uJ1xuaW1wb3J0IHtRdWVzdGlvblRleHRNb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb25fdGV4dCdcblxuQENvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dCBleHRlbmRzIFF1ZXN0aW9uPFF1ZXN0aW9uVGV4dE1vZGVsPiB7XG4gICAgY2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS10ZXh0XCIsIFRleHQpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3RleHQudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcH0gZnJvbSAndnVlLXByb3BlcnR5LWRlY29yYXRvcidcbmltcG9ydCB7c3VydmV5Q3NzfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tICcuLi9zdXJ2ZXknXG5cbkBDb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbmRvdyBleHRlbmRzIFZ1ZSB7XG4gICAgQFByb3BcbiAgICBzdXJ2ZXk6IFN1cnZleU1vZGVsXG5cbiAgICBnZXQgY3NzICgpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUNzcy5nZXRDc3MoKTtcbiAgICB9XG5cbiAgICBleHBhbmRlZCA9IGZhbHNlO1xuICAgIGdldCBleHBhbmRlZENzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kZWQgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZCA6IHRoaXMuY3NzLndpbmRvdy5oZWFkZXIuYnV0dG9uRXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgZG9FeHBhbmQoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSAhdGhpcy5leHBhbmRlZDsgICAgICAgICAgICBcbiAgICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXdpbmRvd1wiLCBXaW5kb3cpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3dpbmRvdy52dWUiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgY3plY2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlDFmWVkY2hvesOtXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiRGFsxaHDrVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkhvdG92b1wiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJKaW7DoSBvZHBvdsSbxI8gKG5hcGnFoXRlKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlN0cmFuYSB7MH0geiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIlByxa96a3VtdSBuZW9ic2FodWplIMW+w6FkbsOpIG90w6F6a3kuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkTEm2t1amVtZSB6YSB2eXBsbsSbbsOtIHByxa96a3VtdSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiUHJvYsOtaMOhIG5hxI3DrXTDoW7DrSBwcsWvemt1bXUuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlZ5YmVyLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSBvdMOhemt1LlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJPZHBvdsSbenRlIHByb3PDrW0gbmEgdsWhZWNobnkgb3TDoXpreS5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJWIHRvbXRvIHBvbGkgbHplIHphZGF0IHBvdXplIMSNw61zbGEuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gem5ha8WvLlwiLFxyXG4gICAgdGV4dE1heExlbmd0aDogXCJaYWRlanRlIHByb3PDrW0gbcOpbsSbIG5lxb4gezB9IHpuYWvFry5cIixcclxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IGEgbcOpbsSbIG5lxb4gezF9IHpuYWvFry5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gxZnDoWRrxa8uXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWeWJlcnRlIHByb3PDrW0gYWxlc3BvxYggezB9IHZhcmlhbnR5LlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiTmV2eWLDrXJlanRlIHByb3PDrW0gdsOtY2UgbmXFviB7MH0gdmFyaWFudC5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgdsSbdMWhw60gbmVibyByb3ZubyB7MX0gYSBtZW7FocOtIG5lYm8gcm92bm8gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IHbEm3TFocOtIG5lYm8gcm92bm8gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IG1lbsWhw60gbmVibyByb3ZubyB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJaYWRlanRlIHByb3PDrW0gcGxhdG5vdSBlLW1haWxvdm91IGFkcmVzdS5cIixcclxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJQb8W+YWRhdmVrIHZyw6F0aWwgY2h5YnUgJ3swfScuIHsxfVwiLFxyXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBvxb5hZGF2ZWsgbmV2csOhdGlsIGRhdGEgbmVibyBjZXN0YSBqZSBuZXBsYXRuw6FcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiVmVsaWtvc3Qgc291Ym9ydSBieSBuZW3Em2xhIGLDvXQgdsSbdMWhw60gbmXFviB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiWmFkZWp0ZSBwcm9zw61tIGppbm91IGhvZG5vdHUuXCIsXHJcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlbDocWhIHNvdWJvciBzZSBuYWhyw6F2w6EuIFprdXN0ZSB0byBwcm9zw61tIHphIG7Em2tvbGlrIHNla3VuZC5cIixcclxuICAgIGFkZFJvdzogXCJQxZlpZGF0IMWZw6FkZWtcIixcclxuICAgIHJlbW92ZVJvdzogXCJPZHN0cmFuaXRcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJjelwiXSA9IGN6ZWNoU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGRhbmlzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiVGlsYmFnZVwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlZpZGVyZVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkbDpnJkaWdcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTaWRlIHswfSBhZiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIkRlciBlciBpbmdlbiBzeW5saWdlIHNww7hyZ3Ntw6VsLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJNYW5nZSB0YWsgZm9yIGRpbiBiZXN2YXJlbHNlIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJTcMO4cmdlc2tlbWFldCBoZW50ZXMgZnJhIHNlcnZlcmVuLi4uXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIlZhbGdmcml0IHN2YXIuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlbDpmxnLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIkJlc3ZhciB2ZW5saWdzdCBzcMO4cmdzbcOlbGV0LlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkFuZ2l2IGV0IHRhbC5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiQW5naXYgbWluZHN0IHswfSB0ZWduLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgbWluZHN0ICB7MH0gc3Zhcm11bGlnaGVkKGVyKS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IGbDpnJyZSB7MH0gc3Zhcm11bGlnaGVkZXIoZXIpLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9IG9nIGxpZyBtZWQgZWxsZXIgbWluZHJlIGVuZCB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIHN0w7hycmUgZW5kIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgbWluZHJlIGVuZCB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJBbmdpdiB2ZW5saWdzdCBlbiBneWxkaWcgZS1tYWlsIGFkcmVzc2UuXCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkZpbHN0w7hycmVsc2VuIG3DpSBpa2tlIG92ZXJzdGlnZSB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQW5naXYgZW4gdsOmcmRpIGZvciBkaXQgdmFsZ2ZyaWUgc3Zhci5cIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkYVwiXSA9IGRhbmlzaFN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzIiwiLy9DcmVhdGVkIG9uIGJlaGFsZiBodHRwczovL2dpdGh1Yi5jb20vRnJhbmsxM1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZHV0Y2hTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlZvcmlnZVwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIlZvbGdlbmRlXCIsXHJcbiAgICBjb21wbGV0ZVRleHQ6IFwiQWZzbHVpdGVuXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkFuZGVyZVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2luYSB7MH0gdmFuIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRXIgaXMgZ2VlbiB6aWNodGJhcmUgcGFnaW5hIG9mIHZyYWFnIGluIGRlemUgdnJhZ2VubGlqc3RcIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQmVkYW5rdCBvbSBkZXplIHZyYWdlbmxpanN0IGluIHRlIHZ1bGxlblwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJEZSB2cmFnZW5saWpzdCBpcyBhYW4gaGV0IGxhZGVuLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJLaWVzLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIkdlbGlldmUgZWVuIGFudHdvb3JkIGluIHRlIHZ1bGxlblwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcIkhldCBhbnR3b29yZCBtb2V0IGVlbiBnZXRhbCB6aWpuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIkdlbGlldmUgbWluc3RlbiB7MH0ga2FyYWt0ZXJzIGluIHRlIHZ1bGxlbi5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIkdlbGlldmUgbWluaW11bSB7MH0gYW50d29vcmRlbiB0ZSBzZWxlY3RlcmVuLlwiLFxyXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiR2VsaWV2ZSBuaWV0IG1lZXIgZGFuIHswfSBhbnR3b29yZGVuIHRlIHNlbGVjdGVyZW4uXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX0gZW4ga2xlaW5lciBvZiBnZWxpamsgYWFuIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJHZWxpZXZlIGVlbiBnZWxkaWcgZS1tYWlsYWRyZXMgaW4gdGUgdnVsbGVuLlwiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEZSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZCBtYWcgbmlldCBncm90ZXIgemlqbiBkYW4gezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkdlbGlldmUgaGV0IHZlbGQgJ0FuZGVyZScgaW4gdGUgdnVsbGVuXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wibmxcIl0gPSBkdXRjaFN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZHV0Y2gudHMiLCJpbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZmlubmlzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiRWRlbGxpbmVuXCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiU2V1cmFhdmFcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJWYWxtaXNcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiTXV1IChrdXZhaWxlKVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpdnUgezB9L3sxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiVMOkc3PDpCBreXNlbHlzc8OkIGVpIG9sZSB5aHTDpGvDpMOkbiBuw6RreXZpbGzDpCBvbGV2YWEgc2l2dWEgdGFpIGt5c3lteXN0w6QuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIktpaXRvcyBreXNlbHl5biB2YXN0YWFtaXNlc3RhIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJLeXNlbHnDpCBsYWRhdGFhbiBwYWx2ZWxpbWVsdGEuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlZhbGl0c2UuLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiVmFzdGFhIGt5c3lteWtzZWVuLCBraWl0b3MuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiQXJ2b24gdHVsZWUgb2xsYSBudW1lZXJpbmVuLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJPbGUgaHl2w6QgamEgc3nDtnTDpCB2w6RoaW50w6TDpG4gezB9IG1lcmtracOkLlwiLFxyXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiT2xlIGh5dsOkIGphIHZhbGl0c2UgdsOkaGludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIk9sZSBoeXbDpCBqYSB2YWxpdHNlIGVuaW50w6TDpG4gezB9IHZhaWh0b2VodG9hLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyB0w6R5dHl5IG9sbGEgZW5lbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezF9IGphIHbDpGhlbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHTDpHl0eXkgb2xsYSBlbmVtbcOkbiB0YWkgeWh0w6Qgc3V1cmkga3VpbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgdMOkeXR5eSBvbGxhIHbDpGhlbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiU3nDtnTDpCB2YWxpZGkgc8OkaGvDtnBvc3Rpb3NvaXRlLlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIk9sZSBoeXbDpCBqYSBzecO2dMOkIFxcXCJNdXUgKGt1dmFpbGUpXFxcIlwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZpXCJdID0gZmlubmlzaFN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZmlubmlzaC50cyIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGZyZW5jaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJcXHUwMGU5Y1xcdTAwZTlkZW50XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiU3VpdmFudFwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIlRlcm1pbmVyXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkF1dHJlIChwclxcdTAwZTljaXNlcilcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBzdXIgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJJbCBuJ3kgYSBuaSBwYWdlIHZpc2libGUgbmkgcXVlc3Rpb24gdmlzaWJsZSBkYW5zIGNlIHF1ZXN0aW9ubmFpcmVcIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWVyY2kgZCdhdm9pciByXFx1MDBlOXBvbmR1IGF1IHF1ZXN0aW9ubmFpcmUhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkxlIHF1ZXN0aW9ubmFpcmUgZXN0IGVuIGNvdXJzIGRlIGNoYXJnZW1lbnQuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkNob2lzaXNzZXouLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiTGEgclxcdTAwZTlwb25zZSBcXHUwMGUwIGNldHRlIHF1ZXN0aW9uIGVzdCBvYmxpZ2F0b2lyZS5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG91dGVzIGxlcyBsaWduZXMgc29udCBvYmxpZ2F0b2lyZXNcIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJMYSByXFx1MDBlOXBvbnNlIGRvaXQgXFx1MDBlYXRyZSB1biBub21icmUuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk1lcmNpIGQnZW50cmVyIGF1IG1vaW5zIHswfSBzeW1ib2xlcy5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIk1lcmNpIGRlIHNcXHUwMGU5bGVjdGlvbm5lciBhdSBtb2lucyB7MH1yXFx1MDBlOXBvbnNlcy5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIk1lcmNpIGRlIHNcXHUwMGU5bGVjdGlvbm5lciBhdSBwbHVzIHswfXJcXHUwMGU5cG9uc2VzLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJWb3RyZSByXFx1MDBlOXBvbnNlICd7MH0nIGRvaXQgXFx1MDBlYXRyZXN1cFxcdTAwZTlyaWV1cmUgb3UgXFx1MDBlOWdhbGUgXFx1MDBlMCB7MX0gZXQgaW5mXFx1MDBlOXJpZXVyZSBvdVxcdTAwZTlnYWxlIFxcdTAwZTAgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIlZvdHJlIHJcXHUwMGU5cG9uc2UgJ3swfScgZG9pdCBcXHUwMGVhdHJlc3VwXFx1MDBlOXJpZXVyZSBvdSBcXHUwMGU5Z2FsZSBcXHUwMGUwIHsxfVwiLFxyXG4gICAgbnVtZXJpY01heDogXCJWb3RyZSByXFx1MDBlOXBvbnNlICd7MH0nIGRvaXQgXFx1MDBlYXRyZWluZlxcdTAwZTlyaWV1cmUgb3UgXFx1MDBlOWdhbGUgXFx1MDBlMCB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJNZXJjaSBkJ2VudHJlciB1bmUgYWRyZXNzZSBtYWlsIHZhbGlkZS5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiTGEgdGFpbGxlIGR1IGZpY2hpZXIgbmUgZG9pdCBwYXMgZXhjXFx1MDBlOWRlciB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTWVyY2kgZGUgcHJcXHUwMGU5Y2lzZXIgbGUgY2hhbXAgJ0F1dHJlJy5cIlxyXG59O1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZyXCJdID0gZnJlbmNoU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2ZyZW5jaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBnZXJtYW5TdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIlp1csO8Y2tcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJXZWl0ZXJcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJGZXJ0aWdcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTZWl0ZSB7MH0gdm9uIHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRXMgZ2lidCBrZWluZSBzaWNodGJhcmUgRnJhZ2UuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlZpZWxlbiBEYW5rIGbDvHIgZGFzIEF1c2bDvGxsZW4gZGVzIEZyYWdlYm9nZW5zIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJEZXIgRnJhZ2Vib2dlbiB3aXJkIHZvbSBTZXJ2ZXIgZ2VsYWRlbi4uLlwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCJCZW51dHplcmRlZmluaWVydGUgQW50d29ydC4uLlwiLFxyXG4gICAgb3B0aW9uc0NhcHRpb246IFwiV8OkaGxlbi4uLlwiLFxyXG4gICAgcmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBhbnR3b3J0ZW4gU2llIGF1ZiBkaWUgRnJhZ2UuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiRGVyIFdlcnQgc29sbHRlIGVpbmUgWmFobCBzZWluLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyB7MH0gU3ltYm9sZS5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIkJpdHRlIHfDpGhsZW4gU2llIG1pbmRlc3RlbnMgezB9IFZhcmlhbnRlbi5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIkJpdHRlIHfDpGhsZW4gU2llIG5pY2h0IG1laHIgYWxzIHswfSBWYXJpYW50ZW4uXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHNvbGx0ZSBnbGVpY2ggb2RlciBncsO2w59lciBzZWluIGFscyB7MX0gdW5kIGdsZWljaCBvZGVyIGtsZWluZXIgYWxzIHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBzb2xsdGUgZ2xlaWNoIG9kZXIgZ3LDtsOfZXIgc2VpbiBhbHMgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHNvbGx0ZSBnbGVpY2ggb2RlciBrbGVpbmVyIGFscyB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZSBnw7xsdGlnZSBFbWFpbC1BZHJlc3NlIGVpbi5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRGllIERhdGVpZ3LDtsOfZSBzb2xsIG5pY2h0IG1laHIgYWxzIHswfS5cIixcclxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gV2VydCBmw7xyIElocmUgYmVudXR6ZXJkZWZpbmllcnRlIEFudHdvcnQgZWluLlwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRlXCJdID0gZ2VybWFuU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCIvL0NyZWF0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2FnZWxvc3BhbmFnaW90YWtpc1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgZ3JlZWtTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gICAgcGFnZVByZXZUZXh0OiBcIs6gz4HOv863zrPOv8+NzrzOtc69zr9cIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCLOlc+Az4zOvM61zr3Ov1wiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIs6fzrvOv866zrvOrs+Bz4nPg863XCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIs6GzrvOu86/ICjPgM6xz4HOsc66zrHOu8+OIM60zrnOtc+FzrrPgc65zr3Or8+Dz4TOtSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCLOo861zrvOr860zrEgezB9IM6xz4DPjCB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDOus6xzrzOr86xIM6/z4HOsc+Ezq4gz4POtc67zq/OtM6xIM6uIM6/z4HOsc+Ezq4gzrXPgc+Oz4TOt8+Dzrcgz4POtSDOsc+Fz4TPjCDPhM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8uXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIs6Vz4XPh86xz4HOuc+Dz4TOv8+NzrzOtSDOs865zrEgz4TOt869IM+Dz4XOvM+AzrvOrs+Bz4nPg863IM6xz4XPhM6/z4Ugz4TOv8+FIM61z4HPic+EzrfOvM6xz4TOv867zr/Os86vzr/PhSFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwizqTOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/IM+Gzr/Pgc+Ez47Ovc61z4TOsc65IM6xz4DOvyDPhM6/IM60zrnOsc66zr/OvM65z4PPhM6uLi4uXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCLOlc+AzrnOu86tzr7PhM61Li4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOt869IM61z4HPjs+EzrfPg863LlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrnPgiDOtc+Bz4nPhM6uz4POtc65z4Igz4POtSDPjM67zrXPgiDPhM65z4IgzrPPgc6xzrzOvM6tz4IuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwizpcgz4TOuc68zq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOsc+BzrnOuM68zrnPhM65zrrOri5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+Dz43OvM6yzr/Ou86xLlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gzrPPgc6xzrzOvM6tz4IuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4DOsc+BzrHOu867zrHOs86tz4IuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4zPh865IM+AzrHPgc6xz4DOrM69z4kgzrHPgM6/IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwizqTOvyAnezB9JyDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzq/Pg86/IM6uIM68zrXOs86xzrvPjc+EzrXPgc6/IM6xz4DOvyDPhM6/IHsxfSDOus6xzrkgzq/Pg86/IM6uIM68zrnOus+Bz4zPhM61z4HOvyDOsc+Azr8gz4TOvyB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrXOs86xzrvPjc+EzrXPgc6/IM6uIM65z4POvyDOvM61IM+Ezr8gezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIs6kzr8gJ3swfScgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM65zrrPgc+Mz4TOtc+Bzr8gzq4gzq/Pg86/IM6xz4DOvyDPhM6/IHsxfVwiLFxyXG4gICAgaW52YWxpZEVtYWlsOiBcIs6gzrHPgc6xzrrOsc67z44gzrTPjs+Dz4TOtSDOvM65zrEgzrHPgM6/zrTOtc66z4TOriDOtM65zrXPjc64z4XOvc+DzrcgZS1tYWlsLlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgz4PPhs6szrvOvM6xICd7MH0nLiB7MX1cIixcclxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM66zrXOvc6sIM60zrXOtM6/zrzOrc69zrEgzq4gzrcgzrnOtM+Mz4TOt8+EzrEgJ868zr/Ovc6/z4DOrM+EzrkvcGF0aCcgzrXOr869zrHOuSDOtc+Dz4bOsc67zq3OvM6tzr3Ot1wiLFxyXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLOpM6/IM68zq3Os861zrjOv8+CIM60zrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDPhc+AzrXPgc6yzq3Ovc61zrkgz4TOsSB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+EzrfOvSDPhM65zrzOriDOs865zrEgz4TOvyDPgM61zrTOr86/ICfOrM67zrvOvycuXCIsXHJcbiAgICB1cGxvYWRpbmdGaWxlOiBcIs6kzr8gzrHPgc+HzrXOr86/IM+DzrHPgiDOsc69zrXOss6xzq/Ovc61zrkuIM6gzrHPgc6xzrrOsc67z44gz4DOtc+BzrnOvM6tzr3Otc+EzrUgzrrOsc+Azr/Ouc6xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsSDOus6xzrkgzrTOv866zrnOvM6sz4PPhM61IM6+zrHOvc6sLlwiLFxyXG4gICAgYWRkUm93OiBcIs6gz4HOv8+DzrjOrs66zrcgzrPPgc6xzrzOvM6uz4JcIixcclxuICAgIHJlbW92ZVJvdzogXCLOkc+GzrHOr8+BzrXPg863XCJcclxufTtcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJnclwiXSA9IGdyZWVrU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2dyZWVrLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHBvbGlzaFN1cnZleVN0cmluZ3MgPSB7XHJcbiAgICBwYWdlUHJldlRleHQ6IFwiV3N0ZWN6XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwiRGFsZWpcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJHb3Rvd2VcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiSW5uYSBvZHBvd2llZMW6ICh3cGlzeilcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJTdHJvbmEgezB9IHogezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCJOaWUgbWEgd2lkb2N6bnljaCBweXRhxYQuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkR6acSZa3VqZW15IHphIHd5cGXFgm5pZW5pZSBhbmtpZXR5IVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJUcndhIHdjenl0eXdhbmllIGFua2lldHkuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIld5YmllcnouLi5cIixcclxuICAgIHJlcXVpcmVkRXJyb3I6IFwiUHJvc3rEmSBvZHBvd2llZHppZcSHIG5hIHRvIHB5dGFuaWUuXCIsXHJcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB3c3p5c3RraWUgcHl0YW5pYS5cIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJXIHR5bSBwb2x1IG1vxbxuYSB3cGlzYcSHIHR5bGtvIGxpY3pieS5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIGNvIG5ham1uaWVqIHswfSB6bmFrw7N3LlwiLFxyXG4gICAgdGV4dE1heExlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgbW5pZWogbmnFvCB7MH0gem5ha8Ozdy5cIixcclxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIHdpxJljZWogbmnFvCB7MH0gaSBtbmllaiBuacW8IHsxfSB6bmFrw7N3LlwiLFxyXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJQcm9zesSZIHV6dXBlxYJuacSHIHByenluYWptbmllaiB7MH0gd2llcnN6eS5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlByb3N6xJkgd3licmHEhyBjbyBuYWptbmllaiB7MH0gcG96eWNqaS5cIixcclxuICAgIG1heFNlbGVjdEVycm9yOiBcIlByb3N6xJkgd3licmHEhyBuaWUgd2nEmWNlaiBuacW8IHswfSBwb3p5Y2ppLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfSBvcmF6IG1uaWVqc3phIGx1YiByw7N3bmEgezJ9XCIsXHJcbiAgICBudW1lcmljTWluOiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9XCIsXHJcbiAgICBudW1lcmljTWF4OiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIG1uaWVqc3phIGx1YiByw7N3bmEgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwiUHJvc3rEmSBwb2RhxIcgcHJhd2lkxYJvd3kgYWRyZXMgZW1haWwuXCIsXHJcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwixbvEhWRhbmllIHp3csOzY2nFgm8gYsWCxIVkICd7MH0nLiB7MX1cIixcclxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLFu8SFZGFuaWUgbmllIHp3csOzY2nFgm8gZGFueWNoIGFsYm8gxZtjaWXFvGthIGplc3QgbmllcHJhd2lkxYJvd2FcIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiUm96bWlhciBwcnplc8WCYW5lZ28gcGxpa3UgbmllIG1vxbxlIHByemVrcmFjemHEhyB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUHJvc3rEmSBwb2RhxIcgaW5uxIUgb2Rwb3dpZWTFui5cIixcclxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiVHJ3YSBwcnplbm9zemVuaWUgVHdvamVnbyBwbGlrdSwgcHJvc3rEmSBzcHLDs2Jvd2HEhyBwb25vd25pZSB6YSBraWxrYSBzZWt1bmQuXCIsXHJcbiAgICBhZGRSb3c6IFwiRG9kYWogd2llcnN6XCIsXHJcbiAgICByZW1vdmVSb3c6IFwiVXN1xYRcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwbFwiXSA9IHBvbGlzaFN1cnZleVN0cmluZ3M7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcG9saXNoLnRzIiwiaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIHJvbWFuaWFuU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJQcmVjZWRlbnRcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJVcm3Eg3RvclwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphcmVcIixcclxuICAgIG90aGVySXRlbVRleHQ6IFwiQWx0dWwocHJlY2l6YcWjaSlcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IGRpbiB7MX1cIixcclxuICAgIGVtcHR5U3VydmV5OiBcIk51IHN1bnQgw65udHJlYsSDcmkgcGVudHJ1IGFjZXN0IGNoZXN0aW9uYXJcIixcclxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVsSDIG11bMWjdW1pbSBwZW50cnUgdGltcHVsIGFjb3JkYXQhXCIsXHJcbiAgICBsb2FkaW5nU3VydmV5OiBcIkNoZXN0aW9uYXJ1bCBzZSDDrm5jYXJjxIMuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkFsZWdlxaNpLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlLEg3NwdW5zdWwgbGEgYWNlYXN0xIMgw65udHJlYmFyZSBlc3RlIG9ibGlnYXRvcml1LlwiLFxyXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb2F0ZSByxINzcHVuc3VyaWxlIHN1bnQgb2JsaWdhdG9yaWlcIixcclxuICAgIG51bWVyaWNFcnJvcjogXCJSxINzcHVuc3VsIHRyZWJ1aWUgc8SDIGZpZSBudW1lcmljLlwiLFxyXG4gICAgdGV4dE1pbkxlbmd0aDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2kgbWluaW0gezB9IGNhcmFjdGVyZS5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGV6aSBtaW5pbSB7MH0gb3DFo2l1bmkuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RlemkgbWF4aW0gezB9IG9wxaNpdW5pLlwiLFxyXG4gICAgbnVtZXJpY01pbk1heDogXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWFyZSBzYXUgZWdhbCBjYSB7MX0gxZ/DriBtYWkgbWljIHNhdSBlZ2FsIGN1IHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWFyZSBzYXUgZWdhbCBjYSB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1pYyBzYXUgZWdhbCBjYSB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XFo2kgbyBhZHJlc2EgZGUgZW1haWwgdmFsaWTEgy5cIixcclxuICAgIGV4Y2VlZE1heFNpemU6IFwiRGltZW5zaXVuZWEgZmnFn2llcnVsdWkgbnUgdHJlYnVpZSBzxIMgZGVwxIPFn2Vhc2PEgyB7MH0uXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGV6aSBjw6JtcHVsICdBbHR1bCcuXCJcclxufTtcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJyb1wiXSA9IHJvbWFuaWFuU3VydmV5U3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9yb21hbmlhbi50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBydXNzaWFuU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXHJcbiAgICBwYWdlTmV4dFRleHQ6IFwi0JTQsNC70LXQtVwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcItCT0L7RgtC+0LLQvlwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLRgNCw0L3QuNGG0LAgezB9INC40LcgezF9XCIsXHJcbiAgICBlbXB0eVN1cnZleTogXCLQndC10YIg0L3QuCDQvtC00L3QvtCz0L4g0LLQvtC/0YDQvtGB0LAuXCIsXHJcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcItCR0LvQsNCz0L7QtNCw0YDQuNC8INCS0LDRgSDQt9CwINC30LDQv9C+0LvQvdC10L3QuNC1INCw0L3QutC10YLRiyFcIixcclxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwi0JfQsNCz0YDRg9C30LrQsCDRgSDRgdC10YDQstC10YDQsC4uLlwiLFxyXG4gICAgb3RoZXJJdGVtVGV4dDogXCLQlNGA0YPQs9C+0LUgKNC/0L7QttCw0LvRg9C50YHRgtCwLCDQvtC/0LjRiNC40YLQtSlcIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcItCS0YvQsdGA0LDRgtGMLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGC0LLQtdGC0YzRgtC1INC90LAg0LLQvtC/0YDQvtGBLlwiLFxyXG4gICAgbnVtZXJpY0Vycm9yOiBcItCe0YLQstC10YIg0LTQvtC70LbQtdC9INCx0YvRgtGMINGH0LjRgdC70L7QvC5cIixcclxuICAgIHRleHRNaW5MZW5ndGg6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INGF0L7RgtGPINCx0YsgezB9INGB0LjQvNCy0L7Qu9C+0LIuXCIsXHJcbiAgICBtaW5TZWxlY3RFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDRhdC+0YLRjyDQsdGLIHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDQvdC1INCx0L7Qu9C10LUgezB9INCy0LDRgNC40LDQvdGC0L7Qsi5cIixcclxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINGA0LDQstC90YvQvCDQuNC70Lgg0LHQvtC70YzRiNC1LCDRh9C10LwgezF9LCDQuCDRgNCw0LLQvdGL0Lwg0LjQu9C4INC80LXQvdGM0YjQtSwg0YfQtdC8IHsyfVwiLFxyXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YDQsNCy0L3Ri9C8INC40LvQuCDQsdC+0LvRjNGI0LUsINGH0LXQvCB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINGA0LDQstC90YvQvCDQuNC70Lgg0LzQtdC90YzRiNC1LCDRh9C10LwgezF9XCIsXHJcbiAgICBpbnZhbGlkRW1haWw6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lkg0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsuXCIsXHJcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC00LDQvdC90YvQtSDQsiDQv9C+0LvQtSBcXFwi0JTRgNGD0LPQvtC1XFxcIlwiXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJ1XCJdID0gcnVzc2lhblN1cnZleVN0cmluZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9ydXNzaWFuLnRzIiwiLy9DcmVhdGUgYnkgTWF0dGlhcyBBc3BsdW5kXHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBzd2VkaXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJGw7ZyZWfDpWVuZGVcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJOw6RzdGFcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJGw6RyZGlnXCIsXHJcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkFubmF0IChiZXNrcml2KVwiLFxyXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGEgezB9IGF2IHsxfVwiLFxyXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRGV0IGZpbm5zIGluZ2VuIHN5bmxpZyBzaWRhIGVsbGVyIGZyw6VnYSBpIGVua8OkdGVuLlwiLFxyXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJUYWNrIGbDtnIgYXR0IGR1IGdlbm9tZsO2cnQgZW5rw6R0ZW4hIVwiLFxyXG4gICAgbG9hZGluZ1N1cnZleTogXCJFbmvDpHRlbiBsYWRkYXMuLi5cIixcclxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlbDpGxqLi4uXCIsXHJcbiAgICByZXF1aXJlZEVycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdhbi5cIixcclxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ29ybmEgcMOlIGFsbGEgcmFkZXIuXCIsXHJcbiAgICBudW1lcmljRXJyb3I6IFwiVsOkcmRldCBza2EgdmFyYSBudW1lcmlza3QuXCIsXHJcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlZhciB2w6RubGlnIGFuZ2UgbWluc3QgezB9IHRlY2tlbi5cIixcclxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVmFyIHbDpG5saWcgZnlsbCBpIG1pbnN0IHswfSByYWRlci5cIixcclxuICAgIG1pblNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIMOldG1pbnN0b25lIHswfSB2YXJpYW50ZXIuXCIsXHJcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWYXIgdsOkbmxpZyB2w6RsaiBpbnRlIGZsZXIgw6RuIHswfSB2YXJpYW50ZXIuXCIsXHJcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9IHNhbXQgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7Mn1cIixcclxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWVyIMOkbiB7MX1cIixcclxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7MX1cIixcclxuICAgIGludmFsaWRFbWFpbDogXCJWYXIgdsOkbmxpZyBhbmdlIGVuIGtvcnJla3QgZS1wb3N0YWRyZXNzLlwiLFxyXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIkbDtnJmcsOlZ2FuIHJldHVybmVyYWRlIGZlbGV0ICd7MH0nLiB7MX1cIixcclxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJBbnRpbmdlbiByZXR1cm5lcmFkZSBmw7ZyZnLDpWdhbiBpbmdlbiBkYXRhIGVsbGVyIHPDpSDDpHIgZWdlbnNrYXBlbiAncGF0aCcgaW50ZSBrb3JyZWt0XCIsXHJcbiAgICBleGNlZWRNYXhTaXplOiBcIkZpbHN0b3JsZWtlbiBmw6VyIGVqIMO2dmVyc3RpZ2EgezB9LlwiLFxyXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZhciB2w6RubGlnIGFuZ2UgZGV0IGFuZHJhIHbDpHJkZXQuXCIsXHJcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkRpbiBmaWwgbGFkZGFzIHVwcC4gVmFyIHbDpG5saWcgdsOkbnRhIG7DpWdyYSBzZWt1bmRlciBvY2ggZsO2cnPDtmsgc2VkYW4gaWdlbi5cIixcclxuICAgIGFkZFJvdzogXCJMw6RnZyB0aWxsIHJhZFwiLFxyXG4gICAgcmVtb3ZlUm93OiBcIlRhIGJvcnRcIlxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJzdlwiXSA9IHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vc3dlZGlzaC50cyIsImltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciB0dXJraXNoU3VydmV5U3RyaW5ncyA9IHtcclxuICAgICAgICBwYWdlUHJldlRleHQ6IFwiR2VyaVwiLFxyXG4gICAgICAgIHBhZ2VOZXh0VGV4dDogXCLEsGxlcmlcIixcclxuICAgICAgICBjb21wbGV0ZVRleHQ6IFwiQW5rZXRpIFRhbWFtbGFcIixcclxuICAgICAgICBvdGhlckl0ZW1UZXh0OiBcIkRpxJ9lciAoYcOnxLFrbGF5xLFuxLF6KVwiLFxyXG4gICAgICAgIHByb2dyZXNzVGV4dDogXCJTYXlmYSB7MH0gLyB7MX1cIixcclxuICAgICAgICBlbXB0eVN1cnZleTogXCJBbmtldHRlIGfDtnLDvG50w7xsZW5lY2VrIHNheWZhIHlhIGRhIHNvcnUgbWV2Y3V0IGRlxJ9pbC5cIixcclxuICAgICAgICBjb21wbGV0aW5nU3VydmV5OiBcIkFua2V0aW1pemkgdGFtYW1sYWTEscSfxLFuxLF6IGnDp2luIHRlxZ9la2vDvHIgZWRlcml6LlwiLFxyXG4gICAgICAgIGxvYWRpbmdTdXJ2ZXk6IFwiQW5rZXQgc3VudWN1ZGFuIHnDvGtsZW5peW9yIC4uLlwiLFxyXG4gICAgICAgIG9wdGlvbnNDYXB0aW9uOiBcIlNlw6dpbml6IC4uLlwiLFxyXG4gICAgICAgIHJlcXVpcmVkRXJyb3I6IFwiTMO8dGZlbiBzb3J1eWEgY2V2YXAgdmVyaW5pelwiLFxyXG4gICAgICAgIG51bWVyaWNFcnJvcjogXCJHaXJpbGVuIGRlxJ9lciBudW1lcmlrIG9sbWFsxLFkxLFyXCIsXHJcbiAgICAgICAgdGV4dE1pbkxlbmd0aDogXCJFbiBheiB7MH0gc2VtYm9sIGdpcmluaXouXCIsXHJcbiAgICAgICAgbWluUm93Q291bnRFcnJvcjogXCJMw7x0ZmVuIGVuIGF6IHswfSBzYXTEsXLEsSBkb2xkdXJ1bi5cIixcclxuICAgICAgICBtaW5TZWxlY3RFcnJvcjogXCJMw7x0ZmVuIGVuIGF6IHswfSBzZcOnZW5lxJ9pIHNlw6dpbml6LlwiLFxyXG4gICAgICAgIG1heFNlbGVjdEVycm9yOiBcIkzDvHRmZW4gezB9IGFkZXR0ZW4gZmF6bGEgc2XDp21leWluaXouXCIsXHJcbiAgICAgICAgbnVtZXJpY01pbk1heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX0gYW5kIGVxdWFsIG9yIGxlc3MgdGhhbiB7Mn1cIixcclxuICAgICAgICBudW1lcmljTWluOiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB2ZXlhIGLDvHnDvGsgb2xtYWzEsWTEsXJcIixcclxuICAgICAgICBudW1lcmljTWF4OiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB5YSBkYSBrw7zDp8O8ayBvbG1hbMSxZMSxci5cIixcclxuICAgICAgICBpbnZhbGlkRW1haWw6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgZXBvc3RhIGFkcmVzaSBnaXJpbml6LlwiLFxyXG4gICAgICAgIHVybFJlcXVlc3RFcnJvcjogXCJUYWxlYmkgxZ91IGhhdGF5xLEgZMO2bmTDvCAnezB9Jy4gezF9XCIsXHJcbiAgICAgICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlRhbGVwIGhlcmhhbmdpIGJpciB2ZXJpIGTDtm5tZWRpIHlhIGRhICdwYXRoJyDDtnplbGxpxJ9pIGhhdGFsxLEuXCIsXHJcbiAgICAgICAgZXhjZWVkTWF4U2l6ZTogXCJEb3N5YSBib3l1dHUgezB9IGRlxJ9lcmluaSBnZcOnZW1lei5cIixcclxuICAgICAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTMO8dGZlbiBkacSfZXIgZGXEn2VybGVyaSBnaXJpbml6LlwiLFxyXG4gICAgICAgIHVwbG9hZGluZ0ZpbGU6IFwiRG9zeWFuxLF6IHnDvGtsZW5peW9yLiBMw5x0ZmVuIGJpcmthw6cgc2FuaXllIGJla2xleWluIHZlIHRla3JhciBkZW5leWluLlwiLFxyXG4gICAgICAgIGFkZFJvdzogXCJTYXTEsXIgRWtsZVwiLFxyXG4gICAgICAgIHJlbW92ZVJvdzogXCJLYWxkxLFyXCJcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widHJcIl0gPSB0dXJraXNoU3VydmV5U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3R1cmtpc2gudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQ2hlY2tib3hCYXNlfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEhhc090aGVyKHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB2YWwuaW5kZXhPZih0aGlzLm90aGVySXRlbS52YWx1ZSkgPj0gMDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzVW5rbm93blZhbHVlKHZhbFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCA9IHZhbFtpXTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdWYWwgPSB2YWwuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbFtpXSA9IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF2YWwgfHwgIXZhbC5sZW5ndGgpIHJldHVybiB2YWw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29tbWVudCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbFtpXSA9IHRoaXMuZ2V0Q29tbWVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiY2hlY2tib3hcIjtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiY2hlY2tib3hcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwoXCJcIik7IH0sIFwiY2hlY2tib3hiYXNlXCIpO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChuYW1lKTsgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwiaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbW1lbnRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcclxuICAgIHB1YmxpYyByb3dzOiBudW1iZXIgPSA0O1xyXG4gICAgcHVibGljIGNvbHM6IG51bWJlciA9IDUwO1xyXG4gICAgcHJpdmF0ZSBsb2NQbGFjZUhvbGRlclZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQ7IH1cclxuICAgIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1BsYWNlSG9sZGVyLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7cmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XHJcbiAgICB9XHJcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5pc0VtcHR5KCkgfHwgdGhpcy52YWx1ZSA9PSBcIlwiO1xyXG4gICAgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJjb21tZW50XCIsIFt7IG5hbWU6IFwiY29sczpudW1iZXJcIiwgZGVmYXVsdDogNTAgfSwgeyBuYW1lOiBcInJvd3M6bnVtYmVyXCIsIGRlZmF1bHQ6IDQgfSwgXHJcbiAgICB7bmFtZTogXCJwbGFjZUhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2VIb2xkZXJcIn1dLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25Db21tZW50TW9kZWwoXCJcIik7IH0sIFwicXVlc3Rpb25cIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tbWVudFwiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fY29tbWVudC50cyIsImltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25TZWxlY3RCYXNlfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25TZWxlY3RCYXNlIHtcclxuICAgIHByaXZhdGUgbG9jT3B0aW9uc0NhcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NPcHRpb25zQ2FwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvcHRpb25zQ2FwdGlvbigpIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dCA/IHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTsgfVxyXG4gICAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbihuZXdWYWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jT3B0aW9uc0NhcHRpb24udGV4dCA9IG5ld1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY09wdGlvbnNDYXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jT3B0aW9uc0NhcHRpb25WYWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImRyb3Bkb3duXCI7XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRydWU7IH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiZHJvcGRvd25cIiwgW3sgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIn1dLFxyXG4gICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChcIlwiKTsgfSwgXCJzZWxlY3RiYXNlXCIpO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChuYW1lKTsgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzIiwiaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yLCBFeGNlZWRTaXplRXJyb3J9IGZyb20gXCIuL2Vycm9yXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GaWxlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XHJcbiAgICBwcml2YXRlIHNob3dQcmV2aWV3VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByZXZpZXdWYWx1ZUxvYWRlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGltYWdlSGVpZ2h0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaW1hZ2VXaWR0aDogc3RyaW5nO1xyXG4gICAgcHVibGljIHN0b3JlRGF0YUFzVGV4dDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBtYXhTaXplOiBudW1iZXI7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImZpbGVcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hvd1ByZXZpZXcoKSB7IHJldHVybiB0aGlzLnNob3dQcmV2aWV3VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd1ByZXZpZXcodmFsdWU6IGJvb2xlYW4pIHsgdGhpcy5zaG93UHJldmlld1ZhbHVlID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBsb2FkRmlsZShmaWxlOiBGaWxlKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiAhdGhpcy5zdXJ2ZXkudXBsb2FkRmlsZSh0aGlzLm5hbWUsIGZpbGUsIHRoaXMuc3RvcmVEYXRhQXNUZXh0LCBmdW5jdGlvbiAoc3RhdHVzOiBzdHJpbmcpIHsgc2VsZi5pc1VwbG9hZGluZyA9IHN0YXR1cyA9PSBcInVwbG9hZGluZ1wiOyAgfSkpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldEZpbGVWYWx1ZShmaWxlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBwcmV2aWV3VmFsdWU6IGFueTtcclxuICAgIHByb3RlY3RlZCBzZXRGaWxlVmFsdWUoZmlsZTogRmlsZSkge1xyXG4gICAgICAgIGlmICghRmlsZVJlYWRlcikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5zaG93UHJldmlldyAmJiAhdGhpcy5zdG9yZURhdGFBc1RleHQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0ZpbGVGb3JFcnJvcnMoZmlsZSkpIHJldHVybjtcclxuICAgICAgICB2YXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc2hvd1ByZXZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucHJldmlld1ZhbHVlID0gc2VsZi5pc0ZpbGVJbWFnZShmaWxlKSA/IGZpbGVSZWFkZXIucmVzdWx0IDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYucHJldmlld1ZhbHVlTG9hZGVkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0b3JlRGF0YUFzVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGZpbGVSZWFkZXIucmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEN1c3RvbUVycm9yKHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cGxvYWRpbmdGaWxlXCIpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGVja0ZpbGVGb3JFcnJvcnMoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBlcnJvckxlbmd0aCA9IHRoaXMuZXJyb3JzID8gdGhpcy5lcnJvcnMubGVuZ3RoIDogMDtcclxuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBFeGNlZWRTaXplRXJyb3IodGhpcy5tYXhTaXplKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvckxlbmd0aCAhPSB0aGlzLmVycm9ycy5sZW5ndGggfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmVycm9yc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0ZpbGVJbWFnZShmaWxlOiBGaWxlKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlIHx8ICFmaWxlLnR5cGUpIHJldHVybjtcclxuICAgICAgICB2YXIgc3RyID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5pbmRleE9mKFwiaW1hZ2VcIikgPT0gMDtcclxuICAgIH1cclxufVxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiZmlsZVwiLCBbXCJzaG93UHJldmlldzpib29sZWFuXCIsIFwiaW1hZ2VIZWlnaHRcIiwgXCJpbWFnZVdpZHRoXCIsIFwic3RvcmVEYXRhQXNUZXh0OmJvb2xlYW5cIiwgXCJtYXhTaXplOm51bWJlclwiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgKG5hbWUpID0+IHsgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChuYW1lKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2ZpbGUudHMiLCJpbXBvcnQge1F1ZXN0aW9uQmFzZX0gZnJvbSBcIi4vcXVlc3Rpb25iYXNlXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7TG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25IdG1sTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gICAgcHJpdmF0ZSBsb2NIdG1sVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jSHRtbFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJodG1sXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGh0bWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jSHRtbC50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IGh0bWwodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY0h0bWwudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NIdG1sVmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcHJvY2Vzc2VkSHRtbCgpIHsgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwodGhpcy5odG1sKSA6IHRoaXMuaHRtbDsgfVxyXG59XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJodG1sXCIsIFt7bmFtZTpcImh0bWw6aHRtbFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSHRtbFwifV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvbmJhc2VcIik7XHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaHRtbFwiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25faHRtbC50cyIsImltcG9ydCB7QmFzZX0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0l0ZW1WYWx1ZX0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XHJcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7c3VydmV5TG9jYWxpemF0aW9ufSBmcm9tICcuL3N1cnZleVN0cmluZ3MnO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEYXRhIHtcclxuICAgIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKTtcclxufVxyXG5leHBvcnQgY2xhc3MgTWF0cml4Um93TW9kZWwgZXh0ZW5kcyBCYXNlIHtcclxuICAgIHByaXZhdGUgZGF0YTogSU1hdHJpeERhdGE7XHJcbiAgICBwcm90ZWN0ZWQgcm93VmFsdWU6IGFueTsgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IGFueSwgcHVibGljIHRleHQ6IHN0cmluZywgcHVibGljIGZ1bGxOYW1lOiBzdHJpbmcsIGRhdGE6IElNYXRyaXhEYXRhLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMucm93VmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLnJvd1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJvd1ZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkgdGhpcy5kYXRhLm9uTWF0cml4Um93Q2hhbmdlZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiBpbXBsZW1lbnRzIElNYXRyaXhEYXRhIHtcclxuICAgIHByaXZhdGUgY29sdW1uc1ZhbHVlOiBBcnJheTxJdGVtVmFsdWU+O1xyXG4gICAgcHJpdmF0ZSByb3dzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XHJcbiAgICBwcml2YXRlIGlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PE1hdHJpeFJvd01vZGVsPjtcclxuICAgIHB1YmxpYyBpc0FsbFJvd1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zVmFsdWUgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yb3dzVmFsdWUgPSBJdGVtVmFsdWUuY3JlYXRlQXJyYXkodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIm1hdHJpeFwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNSb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd3NWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvbHVtbnMoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLmNvbHVtbnNWYWx1ZTsgfVxyXG4gICAgc2V0IGNvbHVtbnMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLmNvbHVtbnNWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJvd3MoKTogQXJyYXk8YW55PiB7IHJldHVybiB0aGlzLnJvd3NWYWx1ZTsgfVxyXG4gICAgc2V0IHJvd3MobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLnJvd3NWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhSb3dNb2RlbD4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4Um93TW9kZWw+KCk7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dzW2ldLnZhbHVlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3codGhpcy5yb3dzW2ldLnZhbHVlLCB0aGlzLnJvd3NbaV0udGV4dCwgdGhpcy5uYW1lICsgJ18nICsgdGhpcy5yb3dzW2ldLnZhbHVlLnRvU3RyaW5nKCksIHZhbFt0aGlzLnJvd3NbaV0udmFsdWVdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3cobnVsbCwgXCJcIiwgdGhpcy5uYW1lLCB2YWwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHJlc3VsdDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7IHJldHVybiB0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xyXG4gICAgICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgICBpZiAodGhpcy5oYXNFcnJvckluUm93cygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEN1c3RvbUVycm9yKHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEluQWxsUm93c0Vycm9yXCIpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBoYXNFcnJvckluUm93cygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNBbGxSb3dSZXF1aXJlZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaGFzVmFsdWVzSW5BbGxSb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgICAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSByb3dzW2ldLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3cobmFtZTogYW55LCB0ZXh0OiBzdHJpbmcsIGZ1bGxOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBNYXRyaXhSb3dNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhSb3dNb2RlbChuYW1lLCB0ZXh0LCBmdWxsTmFtZSwgdGhpcywgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcgfHwgISh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB8fCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBpZiAoIXZhbCkgdmFsID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzWzBdLnZhbHVlID0gdmFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93VmFsID0gdmFsW3Jvdy5uYW1lXSA/IHZhbFtyb3cubmFtZV0gOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHJvd1ZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vSU1hdHJpeERhdGFcclxuICAgIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Jvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShyb3cudmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV3VmFsdWVbcm93Lm5hbWVdID0gcm93LnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJtYXRyaXhcIiwgW3sgbmFtZTogXCJjb2x1bW5zOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmouY29sdW1ucyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmouY29sdW1ucyA9IHZhbHVlOyB9fSxcclxuICAgIHsgbmFtZTogXCJyb3dzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmoucm93cyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmoucm93cyA9IHZhbHVlOyB9IH0sXHJcbiAgICBcImlzQWxsUm93UmVxdWlyZWQ6Ym9vbGVhblwiXSwgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhcIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhNb2RlbChuYW1lKTsgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRSb3dzOyBxLmNvbHVtbnMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENvbHVtczsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXgudHMiLCJpbXBvcnQge1F1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXHJcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcclxuICAgIElNYXRyaXhEcm9wZG93bkRhdGFcclxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge3N1cnZleUxvY2FsaXphdGlvbn0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogYW55LCBwdWJsaWMgdGV4dDogc3RyaW5nLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dOYW1lKCkgeyByZXR1cm4gdGhpcy5uYW1lOyB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcclxuICAgIHByaXZhdGUgcm93c1ZhbHVlOiBBcnJheTxJdGVtVmFsdWU+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLnJvd3NWYWx1ZSA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25cIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMucm93c1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJvd3MobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBJdGVtVmFsdWUuc2V0RGF0YSh0aGlzLnJvd3NWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsPigpO1xyXG4gICAgICAgIGlmICghdGhpcy5yb3dzIHx8IHRoaXMucm93cy5sZW5ndGggPT09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dzW2ldLnZhbHVlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3codGhpcy5yb3dzW2ldLnZhbHVlLCB0aGlzLnJvd3NbaV0udGV4dCwgdmFsW3RoaXMucm93c1tpXS52YWx1ZV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3cobmFtZTogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duUm93TW9kZWwobmFtZSwgdGV4dCwgdGhpcywgdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25cIiwgW3sgbmFtZTogXCJyb3dzOml0ZW12YWx1ZXNcIiwgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KSB7IHJldHVybiBJdGVtVmFsdWUuZ2V0RGF0YShvYmoucm93cyk7IH0sIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSkgeyBvYmoucm93cyA9IHZhbHVlOyB9fV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKFwiXCIpOyB9LCBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiKTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgKG5hbWUpID0+IHsgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07IHEucm93cyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zOyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLmFkZERlZmF1bHRDb2x1bW5zKHEpOyByZXR1cm4gcTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzIiwiaW1wb3J0IHtRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxyXG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIElNYXRyaXhEcm9wZG93bkRhdGFcclxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtzdXJ2ZXlMb2NhbGl6YXRpb259IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtTdXJ2ZXlFcnJvcn0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0N1c3RvbUVycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1hdHJpeER5bmFtaWNSb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCByb3dOYW1lKCkgeyByZXR1cm4gXCJyb3dcIiArIHRoaXMuaW5kZXg7IH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xyXG4gICAgc3RhdGljIE1heFJvd0NvdW50ID0gMTAwO1xyXG4gICAgcHJpdmF0ZSByb3dDb3VudGVyID0gMDtcclxuICAgIHByaXZhdGUgcm93Q291bnRWYWx1ZTogbnVtYmVyID0gMjtcclxuICAgIHByaXZhdGUgbG9jQWRkUm93VGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHByaXZhdGUgbG9jUmVtb3ZlUm93VGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICAgIHB1YmxpYyBtaW5Sb3dDb3VudCA9IDA7XHJcbiAgICBwdWJsaWMgcm93Q291bnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5sb2NBZGRSb3dUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2NSZW1vdmVSb3dUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIm1hdHJpeGR5bmFtaWNcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcm93Q291bnQoKSB7IHJldHVybiB0aGlzLnJvd0NvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgcm93Q291bnQodmFsOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsIDwgMCB8fCB2YWwgPiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5NYXhSb3dDb3VudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IHZhbCkge1xyXG4gICAgICAgICAgICB2YXIgcVZhbCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBxVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJvd0NvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRSb3coKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KG51bGwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3dDb3VudCsrO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbW92ZVJvdyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgJiYgaW5kZXggPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB2YWwuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdmFsID0gdGhpcy5kZWxldGVSb3dWYWx1ZSh2YWwsIG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvd0NvdW50LS07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGFkZFJvd1RleHQoKSB7IHJldHVybiB0aGlzLmxvY0FkZFJvd1RleHQudGV4dCA/IHRoaXMubG9jQWRkUm93VGV4dC50ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImFkZFJvd1wiKTsgfVxyXG4gICAgcHVibGljIHNldCBhZGRSb3dUZXh0KHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NBZGRSb3dUZXh0LnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NBZGRSb3dUZXh0KCkgeyByZXR1cm4gdGhpcy5sb2NBZGRSb3dUZXh0VmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcmVtb3ZlUm93VGV4dCgpIHsgcmV0dXJuIHRoaXMubG9jUmVtb3ZlUm93VGV4dC50ZXh0ID8gdGhpcy5sb2NSZW1vdmVSb3dUZXh0LnRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVtb3ZlUm93XCIpOyB9XHJcbiAgICBwdWJsaWMgc2V0IHJlbW92ZVJvd1RleHQodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1JlbW92ZVJvd1RleHQudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1JlbW92ZVJvd1RleHQoKSB7IHJldHVybiB0aGlzLmxvY1JlbW92ZVJvd1RleHRWYWx1ZTsgfVxyXG4gICAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyAgIHJldHVybiBmYWxzZTsgIH1cclxuICAgIHB1YmxpYyBnZXQgY2FjaGVkVmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcclxuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSB0aGlzLnJvd0NvdW50KSByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUm93cztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICAgICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0Vycm9ySW5Sb3dzKCkpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IEN1c3RvbUVycm9yKHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtaW5Sb3dDb3VudEVycm9yXCIpW1wiZm9ybWF0XCJdKHRoaXMubWluUm93Q291bnQpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBoYXNFcnJvckluUm93cygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5taW5Sb3dDb3VudCA8PSAwIHx8ICF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIHJlcyA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBzZXRSb3dDb3VudCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyByb3dJbmRleCsrKSB7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW3Jvd0luZGV4XTtcclxuICAgICAgICAgICAgaWYgKCFyb3cuaXNFbXB0eSkgc2V0Um93Q291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNldFJvd0NvdW50IDwgdGhpcy5taW5Sb3dDb3VudDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHluYW1pY1Jvd01vZGVsPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+KCk7XHJcbiAgICAgICAgaWYgKHRoaXMucm93Q291bnQgPT09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3codGhpcy5nZXRSb3dWYWx1ZUJ5SW5kZXgodmFsLCBpKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyh2YWx1ZTogYW55KTogTWF0cml4RHluYW1pY1Jvd01vZGVsIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeER5bmFtaWNSb3dNb2RlbCh0aGlzLnJvd0NvdW50ZXIgKyssIHRoaXMsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkJlZm9yZVZhbHVlQ2hhbmdlZCh2YWw6IGFueSkge1xyXG4gICAgICAgIHZhciBuZXdSb3dDb3VudCA9IHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwubGVuZ3RoIDogMDtcclxuICAgICAgICBpZiAobmV3Um93Q291bnQgPD0gdGhpcy5yb3dDb3VudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IG5ld1Jvd0NvdW50O1xyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVOZXdWYWx1ZShjdXJWYWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3VyVmFsdWU7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciByID0gW107XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiB0aGlzLnJvd0NvdW50KSByZXN1bHQuc3BsaWNlKHRoaXMucm93Q291bnQgLSAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0Lmxlbmd0aDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUobmV3VmFsdWU6IGFueSwgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIGlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG5ld1ZhbHVlW2ldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFbXB0eSA/IG51bGwgOiBuZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJvd1ZhbHVlQnlJbmRleChxdWVzdGlvblZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA+PSAwICYmIGluZGV4IDwgcXVlc3Rpb25WYWx1ZS5sZW5ndGggPyBxdWVzdGlvblZhbHVlW2luZGV4XSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWUocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgcXVlc3Rpb25WYWx1ZTogYW55LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWUsIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm1hdHJpeGR5bmFtaWNcIiwgW3sgbmFtZTogXCJyb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMiB9LCB7IG5hbWU6IFwibWluUm93Q291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcclxuICAgICAgICB7IG5hbWU6IFwiYWRkUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQWRkUm93VGV4dFwiIH0sIHsgbmFtZTogXCJyZW1vdmVSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZW1vdmVSb3dUZXh0XCIgfV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwoXCJcIik7IH0sIFwibWF0cml4ZHJvcGRvd25iYXNlXCIpO1xyXG5cclxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsKG5hbWUpOyBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7IHJldHVybiBxOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHluYW1pYy50cyIsImltcG9ydCB7QmFzZX0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge1N1cnZleVZhbGlkYXRvciwgSVZhbGlkYXRvck93bmVyLCBWYWxpZGF0b3JSdW5uZXJ9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1N1cnZleUVycm9yfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7QW5zd2VyUmVxdWlyZWRFcnJvcn0gZnJvbSBcIi4vZXJyb3JcIjtcclxuaW1wb3J0IHtJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmd9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNdWx0aXBsZVRleHREYXRhIHtcclxuICAgIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcclxuICAgIHNldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk7XHJcbiAgICBnZXRJc1JlcXVpcmVkVGV4dCgpOiBzdHJpbmc7XHJcbiAgICBnZXRMb2NhbGUoKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciwgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YTtcclxuICAgIHByaXZhdGUgbG9jVGl0bGVWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgICBwcml2YXRlIGxvY1BsYWNlSG9sZGVyVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHZhbGlkYXRvcnM6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4gPSBuZXcgQXJyYXk8U3VydmV5VmFsaWRhdG9yPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBhbnkgPSBudWxsLCB0aXRsZTogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2NUaXRsZVZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB0aGlzLmxvY1BsYWNlSG9sZGVyVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcclxuICAgIH1cclxuICAgIHNldERhdGEoZGF0YTogSU11bHRpcGxlVGV4dERhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7IHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHQgPyB0aGlzLmxvY1RpdGxlLnRleHQgOiB0aGlzLm5hbWU7IH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY1RpdGxlLnRleHQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBsb2NUaXRsZSgpIHsgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBmdWxsVGl0bGUoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy50aXRsZTtcclxuICAgICAgICBpZih0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy5kYXRhKSByZXMgPSB0aGlzLmRhdGEuZ2V0SXNSZXF1aXJlZFRleHQoKSArICcgJyArIHJlcztcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0OyB9XHJcbiAgICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5sb2NQbGFjZUhvbGRlci50ZXh0ID0gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5uYW1lKSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnNldE11bHRpcGxlVGV4dFZhbHVlKHRoaXMubmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBvblZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB9XHJcbiAgICAvL0lWYWxpZGF0b3JPd25lclxyXG4gICAgcHVibGljIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnRpdGxlOyB9XHJcbiAgICAvL0lMb2NhbGl6YWJsZU93bmVyXHJcbiAgICBwdWJsaWMgZ2V0TG9jYWxlKCkgeyByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldExvY2FsZSgpIDogXCJcIjt9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24gaW1wbGVtZW50cyBJTXVsdGlwbGVUZXh0RGF0YSB7XHJcbiAgICBwcml2YXRlIGNvbENvdW50VmFsdWU6IG51bWJlciA9IDE7XHJcbiAgICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICAgIHB1YmxpYyBpdGVtU2l6ZTogbnVtYmVyID0gMjU7XHJcbiAgICBwcml2YXRlIGl0ZW1zVmFsdWVzOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+ID0gbmV3IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4oKTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihuYW1lKTtcclxuICAgICAgICB0aGlzLnNldEl0ZW1zT3ZlcnJpZGRlbk1ldGhvZHMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0XCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4geyByZXR1cm4gdGhpcy5pdGVtc1ZhbHVlczsgfVxyXG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPikge1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldEl0ZW1zT3ZlcnJpZGRlbk1ldGhvZHMoKTtcclxuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRJdGVtKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyA9IG51bGwpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xyXG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVUZXh0SXRlbShuYW1lLCB0aXRsZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRJdGVtc092ZXJyaWRkZW5NZXRob2RzKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLml0ZW1zVmFsdWVzLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUuc2V0RGF0YShzZWxmKTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZXMuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0PzogbnVtYmVyLCBkZWxldGVDb3VudD86IG51bWJlciwgLi4uaXRlbXM6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbFtdKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsW10ge1xyXG4gICAgICAgICAgICBpZighc3RhcnQpIHN0YXJ0ID0gMDtcclxuICAgICAgICAgICAgaWYoIWRlbGV0ZUNvdW50KSBkZWxldGVDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoc2VsZi5pdGVtc1ZhbHVlcywgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi4gaXRlbXMpO1xyXG4gICAgICAgICAgICBpZighaXRlbXMpIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zW2ldLnNldERhdGEoc2VsZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbXNbaV0udmFsdWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbENvdW50VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgY29sQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDEgfHwgdmFsdWUgPiA0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb2xDb3VudFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Um93cygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgY29sQ291bnQgPSB0aGlzLmNvbENvdW50O1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICAgICAgdmFyIHJvd3MgPSBbXTtcclxuICAgICAgICB2YXIgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaChbXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdLnB1c2goaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gY29sQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93cztcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLm9uSXRlbVZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRleHRJdGVtKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwobmFtZSwgdGl0bGUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbVZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcpIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmICh0aGlzLml0ZW1zW2ldLm5hbWUgaW4gdGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1WYWx1ZSA9IHRoaXMudmFsdWVbdGhpcy5pdGVtc1tpXS5uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLm9uVmFsdWVDaGFuZ2VkKGl0ZW1WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJ1blZhbGlkYXRvcnMoKTogU3VydmV5RXJyb3Ige1xyXG4gICAgICAgIHZhciBlcnJvciA9IHN1cGVyLnJ1blZhbGlkYXRvcnMoKTtcclxuICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBlcnJvciA9IG5ldyBWYWxpZGF0b3JSdW5uZXIoKS5ydW4odGhpcy5pdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsKSByZXR1cm4gZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spO1xyXG4gICAgICAgIGlmKCFyZXMpIHJlcyA9IHRoaXMuaGFzRXJyb3JJbkl0ZW1zKGZpcmVDYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBoYXNFcnJvckluSXRlbXMoZmlyZUNhbGxiYWNrOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1tpXTtcclxuICAgICAgICAgICAgaWYoaXRlbS5pc1JlcXVpcmVkICYmICFpdGVtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBBbnN3ZXJSZXF1aXJlZEVycm9yKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoZmlyZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5lcnJvcnNDaGFuZ2VkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy9JTXVsdGlwbGVUZXh0RGF0YVxyXG4gICAgZ2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVtuYW1lXTtcclxuICAgIH1cclxuICAgIHNldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICghbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3VmFsdWVbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibXVsdGlwbGV0ZXh0aXRlbVwiLCBbXCJuYW1lXCIsIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsIHsgbmFtZTogXCJwbGFjZUhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2VIb2xkZXJcIn0sIFxyXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sIHsgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIiwgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl2YWxpZGF0b3JcIiwgY2xhc3NOYW1lUGFydDogXCJ2YWxpZGF0b3JcIiB9XSxcclxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwoXCJcIik7IH0pO1xyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm11bHRpcGxldGV4dFwiLCBbeyBuYW1lOiBcIiFpdGVtczp0ZXh0aXRlbXNcIiwgY2xhc3NOYW1lOiBcIm11bHRpcGxldGV4dGl0ZW1cIiB9LFxyXG4gICAgICAgIHsgbmFtZTogXCJpdGVtU2l6ZTpudW1iZXJcIiwgZGVmYXVsdDogMjUgfSwgeyBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAxLCBjaG9pY2VzOiBbMSwgMiwgMywgNF0gfV0sXHJcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIChuYW1lKSA9PiB7IHZhciBxID0gbmV3IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwobmFtZSk7IHEuYWRkSXRlbShcInRleHQxXCIpOyBxLmFkZEl0ZW0oXCJ0ZXh0MlwiKTsgcmV0dXJuIHE7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tdWx0aXBsZXRleHQudHMiLCJpbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkZhY3Rvcnl9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uQ2hlY2tib3hCYXNlfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcInJhZGlvZ3JvdXBcIjtcclxuICAgIH1cclxuICAgIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicmFkaW9ncm91cFwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKFwiXCIpOyB9LCBcImNoZWNrYm94YmFzZVwiKTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFkaW9ncm91cFwiLCAobmFtZSkgPT4geyB2YXIgcSA9IG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChuYW1lKTsgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzOyByZXR1cm4gcTt9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fcmFkaW9ncm91cC50cyIsImltcG9ydCB7SXRlbVZhbHVlfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHtRdWVzdGlvbn0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcclxuaW1wb3J0IHtKc29uT2JqZWN0fSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7UXVlc3Rpb25GYWN0b3J5fSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcclxuaW1wb3J0IHtMb2NhbGl6YWJsZVN0cmluZ30gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ01vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgc3RhdGljIGRlZmF1bHRSYXRlVmFsdWVzOiBJdGVtVmFsdWVbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSByYXRlczogQXJyYXk8SXRlbVZhbHVlPjtcclxuICAgIHByaXZhdGUgbG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBsb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcblxyXG4gICAgcmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5yYXRlcyA9IEl0ZW1WYWx1ZS5jcmVhdGVBcnJheSh0aGlzKTtcclxuICAgICAgICB0aGlzLmxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubG9jTWF4UmF0ZURlc2NyaXB0aW9uVmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmF0ZVZhbHVlcygpOiBBcnJheTxhbnk+IHsgcmV0dXJuIHRoaXMucmF0ZXM7IH1cclxuICAgIHNldCByYXRlVmFsdWVzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgSXRlbVZhbHVlLnNldERhdGEodGhpcy5yYXRlcywgbmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmlzaWJsZVJhdGVWYWx1ZXMoKTogSXRlbVZhbHVlW10ge1xyXG4gICAgICAgIGlmICh0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMucmF0ZVZhbHVlcztcclxuICAgICAgICByZXR1cm4gUXVlc3Rpb25SYXRpbmdNb2RlbC5kZWZhdWx0UmF0ZVZhbHVlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwicmF0aW5nXCI7XHJcbiAgICB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XHJcblxyXG4gICAgcHVibGljIGdldCBtaW5SYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jTWluUmF0ZURlc2NyaXB0aW9uLnRleHQ7fVxyXG4gICAgcHVibGljIHNldCBtaW5SYXRlRGVzY3JpcHRpb24odmFsdWU6IHN0cmluZykgeyB0aGlzLmxvY01pblJhdGVEZXNjcmlwdGlvbi50ZXh0ID0gdmFsdWU7fVxyXG4gICAgcHVibGljIGdldCBsb2NNaW5SYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge3JldHVybiB0aGlzLmxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlO307XHJcbiAgICBwdWJsaWMgZ2V0IG1heFJhdGVEZXNjcmlwdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sb2NNYXhSYXRlRGVzY3JpcHRpb24udGV4dDt9XHJcbiAgICBwdWJsaWMgc2V0IG1heFJhdGVEZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jTWF4UmF0ZURlc2NyaXB0aW9uLnRleHQgPSB2YWx1ZTt9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY01heFJhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7cmV0dXJuIHRoaXMubG9jTWF4UmF0ZURlc2NyaXB0aW9uVmFsdWU7fTtcclxufVxyXG5JdGVtVmFsdWUuc2V0RGF0YShRdWVzdGlvblJhdGluZ01vZGVsLmRlZmF1bHRSYXRlVmFsdWVzLCBbMSwgMiwgMywgNCwgNV0pO1xyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwicmF0aW5nXCIsIFtcImhhc0NvbW1lbnQ6Ym9vbGVhblwiLCB7IG5hbWU6IFwicmF0ZVZhbHVlczppdGVtdmFsdWVzXCIsIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkgeyByZXR1cm4gSXRlbVZhbHVlLmdldERhdGEob2JqLnJhdGVWYWx1ZXMpOyB9LCBvblNldFZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBhbnkpIHsgb2JqLnJhdGVWYWx1ZXMgPSB2YWx1ZTsgfX0sXHJcbiAgICB7bmFtZTogXCJtaW5SYXRlRGVzY3JpcHRpb25cIiwgYWx0ZXJuYXRpdmVOYW1lOiBcIm1pbmludW1SYXRlRGVzY3JpcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01pblJhdGVEZXNjcmlwdGlvblwifSwgXHJcbiAgICB7bmFtZTogXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwgYWx0ZXJuYXRpdmVOYW1lOiBcIm1heGltdW1SYXRlRGVzY3JpcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01heFJhdGVEZXNjcmlwdGlvblwifV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ01vZGVsKFwiXCIpOyB9LCBcInF1ZXN0aW9uXCIpO1xyXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwobmFtZSk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJpbXBvcnQge1F1ZXN0aW9uRmFjdG9yeX0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XHJcbmltcG9ydCB7SnNvbk9iamVjdH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVGV4dE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xyXG4gICAgcHVibGljIHNpemU6IG51bWJlciA9IDI1O1xyXG4gICAgcHVibGljIGlucHV0VHlwZTogc3RyaW5nID0gXCJ0ZXh0XCI7XHJcbiAgICBwcml2YXRlIGxvY1BsYWNlSG9sZGVyVmFsdWU6IExvY2FsaXphYmxlU3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubG9jUGxhY2VIb2xkZXJWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgfVxyXG4gICAgaXNFbXB0eSgpOiBib29sZWFuIHsgIHJldHVybiBzdXBlci5pc0VtcHR5KCkgfHwgdGhpcy52YWx1ZSA9PSBcIlwiOyB9XHJcbiAgICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dDsgfVxyXG4gICAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7IHRoaXMubG9jUGxhY2VIb2xkZXIudGV4dCA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtyZXR1cm4gdGhpcy5sb2NQbGFjZUhvbGRlclZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIG5ld1ZhbHVlID0gdGhpcy5jb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlKTtcclxuICAgICAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY29ycmVjdFZhbHVlVHlwZShuZXdWYWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIW5ld1ZhbHVlKSByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUeXBlID09IFwibnVtYmVyXCIgfHwgdGhpcy5pbnB1dFR5cGUgPT0gXCJyYW5nZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTnVtYmVyKG5ld1ZhbHVlKSA/IHBhcnNlRmxvYXQobmV3VmFsdWUpIDogXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc051bWJlcih2YWx1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcclxuICAgIH1cclxufVxyXG5cclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcInRleHRcIiwgW3sgbmFtZTogXCJpbnB1dFR5cGVcIiwgZGVmYXVsdDogXCJ0ZXh0XCIsIGNob2ljZXM6IFtcImNvbG9yXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIiwgXCJlbWFpbFwiLCBcIm1vbnRoXCIsIFwibnVtYmVyXCIsIFwicGFzc3dvcmRcIiwgXCJyYW5nZVwiLCBcInRlbFwiLCBcInRleHRcIiwgXCJ0aW1lXCIsIFwidXJsXCIsIFwid2Vla1wiXSB9LFxyXG4gICAgeyBuYW1lOiBcInNpemU6bnVtYmVyXCIsIGRlZmF1bHQ6IDI1IH0sIHtuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwifV0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChcIlwiKTsgfSwgXCJxdWVzdGlvblwiKTtcclxuXHJcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwidGV4dFwiLCAobmFtZSkgPT4geyByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKG5hbWUpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsImltcG9ydCB7QmFzZX0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge1N1cnZleU1vZGVsfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3dNb2RlbCBleHRlbmRzIEJhc2UgIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3VydmV5RWxlbWVudE5hbWUgPSBcIndpbmRvd1N1cnZleUpTXCI7XHJcbiAgICBzdXJ2ZXlWYWx1ZTogU3VydmV5TW9kZWw7XHJcbiAgICB3aW5kb3dFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIGlzU2hvd2luZ1ZhbHVlOiBib29sZWFuO1xyXG4gICAgaXNFeHBhbmRlZFZhbHVlOiBib29sZWFuO1xyXG4gICAgdGl0bGVWYWx1ZTogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGVWYWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUuc2hvd1RpdGxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53aW5kb3dFbGVtZW50ID0gPEhUTUxEaXZFbGVtZW50PmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpIDogc3RyaW5nIHsgcmV0dXJuIFwid2luZG93XCIgfVxyXG4gICAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwgeyByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpc1Nob3dpbmcoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzU2hvd2luZ1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzRXhwYW5kZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzRXhwYW5kZWRWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy50aXRsZVZhbHVlID8gdGhpcy50aXRsZVZhbHVlIDogdGhpcy5zdXJ2ZXkudGl0bGU7IH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykgeyB0aGlzLnRpdGxlVmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGV4cGFuZCgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKHRydWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kY29sbGFwc2UoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShqc29uT2JqOiBhbnkpOiBTdXJ2ZXlNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdXJ2ZXlNb2RlbChqc29uT2JqKVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGV4cGFuZGNvbGxhcHNlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlXaW5kb3cudHMiLCJpbXBvcnQge0Jhc2UsIEhhc2hUYWJsZX0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQge0pzb25PYmplY3R9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmlnZ2VyIGV4dGVuZHMgQmFzZSB7XHJcbiAgICBzdGF0aWMgb3BlcmF0b3JzVmFsdWU6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSBudWxsO1xyXG4gICAgc3RhdGljIGdldCBvcGVyYXRvcnMoKSB7XHJcbiAgICAgICAgaWYgKFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XHJcbiAgICAgICAgVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZSA9IHtcclxuICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gIXZhbHVlOyB9LFxyXG4gICAgICAgICAgICBub3RlbXB0eTogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7IHJldHVybiAhKCF2YWx1ZSk7IH0sXHJcbiAgICAgICAgICAgIGVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIG5vdGVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlICE9IGV4cGVjdGVkVmFsdWU7IH0sXHJcbiAgICAgICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlICYmIHZhbHVlW1wiaW5kZXhPZlwiXSAmJiB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID4gLTE7IH0sXHJcbiAgICAgICAgICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuICF2YWx1ZSB8fCAhdmFsdWVbXCJpbmRleE9mXCJdIHx8IHZhbHVlLmluZGV4T2YoZXhwZWN0ZWRWYWx1ZSkgPT0gLTE7IH0sXHJcbiAgICAgICAgICAgIGdyZWF0ZXI6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gdmFsdWUgPiBleHBlY3RlZFZhbHVlOyB9LFxyXG4gICAgICAgICAgICBsZXNzOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsgcmV0dXJuIHZhbHVlIDwgZXhwZWN0ZWRWYWx1ZTsgfSxcclxuICAgICAgICAgICAgZ3JlYXRlcm9yZXF1YWw6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gZXhwZWN0ZWRWYWx1ZTsgfSxcclxuICAgICAgICAgICAgbGVzc29yZXF1YWw6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkgeyByZXR1cm4gdmFsdWUgPD0gZXhwZWN0ZWRWYWx1ZTsgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9wVmFsdWU6IHN0cmluZyA9IFwiZXF1YWxcIjtcclxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgb3BlcmF0b3IoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMub3BWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoIVRyaWdnZXIub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub3BWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNoZWNrKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoVHJpZ2dlci5vcGVyYXRvcnNbdGhpcy5vcGVyYXRvcl0odmFsdWUsIHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TdWNjZXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZhaWx1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkgeyB9XHJcbiAgICBwcm90ZWN0ZWQgb25GYWlsdXJlKCkgeyB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleVRyaWdnZXJPd25lciB7XHJcbiAgICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtdO1xyXG4gICAgZG9Db21wbGV0ZSgpO1xyXG4gICAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbik7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyIGV4dGVuZHMgVHJpZ2dlciB7XHJcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIG93bmVyOiBJU3VydmV5VHJpZ2dlck93bmVyID0gbnVsbDtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0T3duZXIob3duZXI6IElTdXJ2ZXlUcmlnZ2VyT3duZXIpIHtcclxuICAgICAgICB0aGlzLm93bmVyID0gb3duZXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzT25OZXh0UGFnZSgpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xyXG4gICAgcHVibGljIHBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHVibGljIHF1ZXN0aW9uczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJ2aXNpYmxldHJpZ2dlclwiOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25TdWNjZXNzKCkgeyB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbVN1Y2Nlc3MpOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25GYWlsdXJlKCkgeyB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbUZhaWx1cmUpOyB9XHJcbiAgICBwcml2YXRlIG9uVHJpZ2dlcihmdW5jOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmICghdGhpcy5vd25lcikgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvYmplY3RzID0gdGhpcy5vd25lci5nZXRPYmplY3RzKHRoaXMucGFnZXMsIHRoaXMucXVlc3Rpb25zKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZnVuYyhvYmplY3RzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25JdGVtU3VjY2VzcyhpdGVtOiBhbnkpIHsgaXRlbS52aXNpYmxlID0gdHJ1ZTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbUZhaWx1cmUoaXRlbTogYW55KSB7IGl0ZW0udmlzaWJsZSA9IGZhbHNlOyB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJDb21wbGV0ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImNvbXBsZXRldHJpZ2dlclwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzT25OZXh0UGFnZSgpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHByb3RlY3RlZCBvblN1Y2Nlc3MoKSB7IGlmICh0aGlzLm93bmVyKSB0aGlzLm93bmVyLmRvQ29tcGxldGUoKTsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcclxuICAgIHB1YmxpYyBzZXRUb05hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZXRWYWx1ZTogYW55O1xyXG4gICAgcHVibGljIGlzVmFyaWFibGU6IGJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwic2V0dmFsdWV0cmlnZ2VyXCI7IH1cclxuICAgIHByb3RlY3RlZCBvblN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldFRvTmFtZSB8fCAhdGhpcy5vd25lcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub3duZXIuc2V0VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCB0aGlzLnNldFZhbHVlLCB0aGlzLmlzVmFyaWFibGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwidHJpZ2dlclwiLCBbXCJvcGVyYXRvclwiLCBcIiF2YWx1ZVwiXSk7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzdXJ2ZXl0cmlnZ2VyXCIsIFtcIiFuYW1lXCJdLCBudWxsLCBcInRyaWdnZXJcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJ2aXNpYmxldHJpZ2dlclwiLCBbXCJwYWdlc1wiLCBcInF1ZXN0aW9uc1wiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJWaXNpYmxlKCk7IH0sIFwic3VydmV5dHJpZ2dlclwiKTtcclxuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImNvbXBsZXRldHJpZ2dlclwiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb21wbGV0ZSgpOyB9LCBcInN1cnZleXRyaWdnZXJcIik7XHJcbkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXCJzZXR2YWx1ZXRyaWdnZXJcIiwgW1wiIXNldFRvTmFtZVwiLCBcInNldFZhbHVlXCIsIFwiaXNWYXJpYWJsZTpib29sZWFuXCJdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclNldFZhbHVlKCk7IH0sIFwic3VydmV5dHJpZ2dlclwiKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJpZ2dlci50cyIsIi8qKlxuICAqIHZ1ZS1jbGFzcy1jb21wb25lbnQgdjUuMC4wXG4gICogKGMpIDIwMTUtMjAxNyBFdmFuIFlvdVxuICAqIEBsaWNlbnNlIE1JVFxuICAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIFZ1ZSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd2dWUnKSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcihmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfLCBrZXksIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAkZGVjb3JhdG9yUXVldWUucHVzaChmdW5jdGlvbiAob3B0aW9ucykgeyByZXR1cm4gZmFjdG9yeShvcHRpb25zLCBrZXksIGluZGV4KTsgfSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdnVlLWNsYXNzLWNvbXBvbmVudF0gJyArIG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tQ29uc3RydWN0b3Iodm0sIENvbXBvbmVudCkge1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModm0pO1xuICAgICAgICBpZiAodm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICghdm0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkuY2hhckF0KDApICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsIGtleSwge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZtW2tleV07IH0sXG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2bVtrZXldID0gdmFsdWU7IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgZGF0YSA9IG5ldyBDb21wb25lbnQoKTtcbiAgICB2YXIgcGxhaW5EYXRhID0ge307XG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGxhaW5EYXRhW2tleV0gPSBkYXRhW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIShDb21wb25lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgVnVlKSAmJiBPYmplY3Qua2V5cyhwbGFpbkRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHdhcm4oJ0NvbXBvbmVudCBjbGFzcyBtdXN0IGluaGVyaXQgVnVlIG9yIGl0cyBkZXNjZW5kYW50IGNsYXNzICcgK1xuICAgICAgICAgICAgICAgICd3aGVuIGNsYXNzIHByb3BlcnR5IGlzIHVzZWQuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsYWluRGF0YTtcbn1cblxudmFyICRpbnRlcm5hbEhvb2tzID0gW1xuICAgICdkYXRhJyxcbiAgICAnYmVmb3JlQ3JlYXRlJyxcbiAgICAnY3JlYXRlZCcsXG4gICAgJ2JlZm9yZU1vdW50JyxcbiAgICAnbW91bnRlZCcsXG4gICAgJ2JlZm9yZURlc3Ryb3knLFxuICAgICdkZXN0cm95ZWQnLFxuICAgICdiZWZvcmVVcGRhdGUnLFxuICAgICd1cGRhdGVkJyxcbiAgICAnYWN0aXZhdGVkJyxcbiAgICAnZGVhY3RpdmF0ZWQnLFxuICAgICdyZW5kZXInXG5dO1xudmFyICRkZWNvcmF0b3JRdWV1ZSA9IFtdO1xuZnVuY3Rpb24gY29tcG9uZW50RmFjdG9yeShDb21wb25lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCBDb21wb25lbnQuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgcHJvdG8gPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkaW50ZXJuYWxIb29rcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgb3B0aW9uc1trZXldID0gcHJvdG9ba2V5XTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgKG9wdGlvbnMubWV0aG9kcyB8fCAob3B0aW9ucy5tZXRob2RzID0ge30pKVtrZXldID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkZXNjcmlwdG9yLmdldCB8fCBkZXNjcmlwdG9yLnNldCkge1xuICAgICAgICAgICAgKG9wdGlvbnMuY29tcHV0ZWQgfHwgKG9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgZ2V0OiBkZXNjcmlwdG9yLmdldCxcbiAgICAgICAgICAgICAgICBzZXQ6IGRlc2NyaXB0b3Iuc2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgKG9wdGlvbnMubWl4aW5zIHx8IChvcHRpb25zLm1peGlucyA9IFtdKSkucHVzaCh7XG4gICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0RGF0YUZyb21Db25zdHJ1Y3Rvcih0aGlzLCBDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgJGRlY29yYXRvclF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbihvcHRpb25zKTsgfSk7XG4gICAgJGRlY29yYXRvclF1ZXVlID0gW107XG4gICAgdmFyIHN1cGVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29tcG9uZW50LnByb3RvdHlwZSk7XG4gICAgdmFyIFN1cGVyID0gc3VwZXJQcm90byBpbnN0YW5jZW9mIFZ1ZVxuICAgICAgICA/IHN1cGVyUHJvdG8uY29uc3RydWN0b3JcbiAgICAgICAgOiBWdWU7XG4gICAgcmV0dXJuIFN1cGVyLmV4dGVuZChvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudEZhY3Rvcnkob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCwgb3B0aW9ucyk7XG4gICAgfTtcbn1cbihmdW5jdGlvbiAoQ29tcG9uZW50KSB7XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJIb29rcyhrZXlzKSB7XG4gICAgICAgICRpbnRlcm5hbEhvb2tzLnB1c2guYXBwbHkoJGludGVybmFsSG9va3MsIGtleXMpO1xuICAgIH1cbiAgICBDb21wb25lbnQucmVnaXN0ZXJIb29rcyA9IHJlZ2lzdGVySG9va3M7XG59KShDb21wb25lbnQgfHwgKENvbXBvbmVudCA9IHt9KSk7XG52YXIgQ29tcG9uZW50JDEgPSBDb21wb25lbnQ7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IENvbXBvbmVudCQxO1xuZXhwb3J0cy5jcmVhdGVEZWNvcmF0b3IgPSBjcmVhdGVEZWNvcmF0b3I7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuY29tbW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdmb3JtJywge1xuICAgIGNsYXNzOiBfdm0uY3NzLmNoZWNrYm94LnJvb3RcbiAgfSwgX3ZtLl9sKChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMpLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgIHJldHVybiBfYygnZGl2Jywge1xuICAgICAgY2xhc3M6IF92bS5jc3MucmFkaW9ncm91cC5pdGVtLFxuICAgICAgc3R5bGU6ICh7XG4gICAgICAgIHdpZHRoOiBfdm0uY29sV2lkdGgsXG4gICAgICAgICdtYXJnaW4tcmlnaHQnOiBfdm0ucXVlc3Rpb24uY29sQ291bnQgPT09IDAgPyAnNXB4JyA6ICcwcHgnXG4gICAgICB9KVxuICAgIH0sIFtfYygnbGFiZWwnLCB7XG4gICAgICBjbGFzczogX3ZtLmNzcy5yYWRpb2dyb3VwLml0ZW1cbiAgICB9LCBbX2MoJ2lucHV0Jywge1xuICAgICAgZGlyZWN0aXZlczogW3tcbiAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgdmFsdWU6IChfdm0udmFsdWUpLFxuICAgICAgICBleHByZXNzaW9uOiBcInZhbHVlXCJcbiAgICAgIH1dLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiY2hlY2tib3hcIixcbiAgICAgICAgXCJuYW1lXCI6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICBcImlkXCI6IF92bS5xdWVzdGlvbi5pbnB1dElkICsgJ18nICsgaXRlbS52YWx1ZSxcbiAgICAgICAgXCJkaXNhYmxlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwidmFsdWVcIjogaXRlbS52YWx1ZSxcbiAgICAgICAgXCJjaGVja2VkXCI6IEFycmF5LmlzQXJyYXkoX3ZtLnZhbHVlKSA/IF92bS5faShfdm0udmFsdWUsIGl0ZW0udmFsdWUpID4gLTEgOiAoX3ZtLnZhbHVlKVxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgdmFyICQkYSA9IF92bS52YWx1ZSxcbiAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gKHRydWUpIDogKGZhbHNlKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICB2YXIgJCR2ID0gaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KTtcbiAgICAgICAgICAgIGlmICgkJGMpIHtcbiAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLnZhbHVlID0gJCRhLmNvbmNhdCgkJHYpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgJCRpID4gLTEgJiYgKF92bS52YWx1ZSA9ICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdm0udmFsdWUgPSAkJGNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3NwYW4nLCBbX3ZtLl92KF92bS5fcyhpdGVtLnRleHQpKV0pLCBfdm0uX3YoXCIgXCIpLCBfYygnc3VydmV5LW90aGVyLWNob2ljZScsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICB2YWx1ZTogKF92bS5xdWVzdGlvbi5oYXNPdGhlciAmJiBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkKSxcbiAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5oYXNPdGhlciAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcIlxuICAgICAgfV0sXG4gICAgICBjbGFzczogX3ZtLmNzcy5yYWRpb2dyb3VwLm90aGVyLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJxdWVzdGlvblwiOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgIFwiY3NzXCI6IF92bS5jc3NcbiAgICAgIH1cbiAgICB9KV0sIDEpXSlcbiAgfSkpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5tb2R1bGUuZXhwb3J0cy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpLnJlcmVuZGVyKFwiZGF0YS12LTA2MGRiY2UwXCIsIG1vZHVsZS5leHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzP2lkPWRhdGEtdi0wNjBkYmNlMCEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9jaGVja2JveC52dWVcbi8vIG1vZHVsZSBpZCA9IDEwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ2RpdicsIFsoIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5KSA/IF9jKCd0ZXh0YXJlYScsIHtcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICB2YWx1ZTogKF92bS5xdWVzdGlvbi52YWx1ZSksXG4gICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnZhbHVlXCJcbiAgICB9XSxcbiAgICBjbGFzczogX3ZtLmNzcy5jb21tZW50LnJvb3QsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgIFwiaWRcIjogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICBcImNvbHNcIjogX3ZtLnF1ZXN0aW9uLmNvbHMsXG4gICAgICBcInJvd3NcIjogX3ZtLnF1ZXN0aW9uLnJvd3MsXG4gICAgICBcInBsYWNlaG9sZGVyXCI6IF92bS5xdWVzdGlvbi5wbGFjZUhvbGRlclxuICAgIH0sXG4gICAgZG9tUHJvcHM6IHtcbiAgICAgIFwidmFsdWVcIjogX3ZtLl9zKF92bS5xdWVzdGlvbi52YWx1ZSlcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImlucHV0XCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgIF92bS5xdWVzdGlvbi52YWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pIDogX2MoJ2RpdicsIHtcbiAgICBjbGFzczogX3ZtLmNzcy5jb21tZW50LnJvb3QsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwidGV4dFwiOiBfdm0ucXVlc3Rpb24udmFsdWVcbiAgICB9XG4gIH0pXSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtMDc3NmZiYmNcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LTA3NzZmYmJjIS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL2NvbW1lbnQudnVlXG4vLyBtb2R1bGUgaWQgPSAxMDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgY2xhc3M6IF92bS5jc3Mucm9vdFxuICB9LCBbKF92bS5oYXNUaXRsZSkgPyBfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLmhlYWRlclxuICB9LCBbX2MoJ2gzJywgW192bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9jZXNzZWRUaXRsZSkpXSldKSA6IF92bS5fZSgpLCBfdm0uX3YoXCIgXCIpLCAoX3ZtLnN1cnZleS5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSA/IFtfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLmJvZHlcbiAgfSwgWyhfdm0uc3VydmV5LnNob3dQcm9ncmVzc0JhciA9PSAndG9wJykgPyBfYygnc3VydmV5LXByb2dyZXNzJywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcInN1cnZleVwiOiBfdm0uc3VydmV5LFxuICAgICAgXCJjc3NcIjogX3ZtLmNzc1xuICAgIH1cbiAgfSkgOiBfdm0uX2UoKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3N1cnZleS1wYWdlJywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImlkXCI6IFwic3EtcGFnZVwiLFxuICAgICAgXCJzdXJ2ZXlcIjogX3ZtLnN1cnZleSxcbiAgICAgIFwicGFnZVwiOiBfdm0uc3VydmV5LmN1cnJlbnRQYWdlLFxuICAgICAgXCJjc3NcIjogX3ZtLmNzc1xuICAgIH1cbiAgfSksIF92bS5fdihcIiBcIiksIChfdm0uc3VydmV5LnNob3dQcm9ncmVzc0JhciA9PSAnYm90dG9tJykgPyBfYygnc3VydmV5LXByb2dyZXNzJywge1xuICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICBcIm1hcmdpbi10b3BcIjogXCIxMHB4XCJcbiAgICB9LFxuICAgIGF0dHJzOiB7XG4gICAgICBcInN1cnZleVwiOiBfdm0uc3VydmV5LFxuICAgICAgXCJjc3NcIjogX3ZtLmNzc1xuICAgIH1cbiAgfSkgOiBfdm0uX2UoKV0sIDEpLCBfdm0uX3YoXCIgXCIpLCAoX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZykgPyBfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLmZvb3RlclxuICB9LCBbX2MoJ2lucHV0Jywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICB2YWx1ZTogKCFfdm0uc3VydmV5LmlzRmlyc3RQYWdlKSxcbiAgICAgIGV4cHJlc3Npb246IFwiIXN1cnZleS5pc0ZpcnN0UGFnZVwiXG4gICAgfV0sXG4gICAgY2xhc3M6IF92bS5nZXROYXZCdG5DbGFzc2VzKCdwcmV2JyksXG4gICAgYXR0cnM6IHtcbiAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiLFxuICAgICAgXCJ2YWx1ZVwiOiBfdm0uc3VydmV5LnBhZ2VQcmV2VGV4dFxuICAgIH0sXG4gICAgb246IHtcbiAgICAgIFwiY2xpY2tcIjogX3ZtLnByZXZQYWdlXG4gICAgfVxuICB9KSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2lucHV0Jywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICB2YWx1ZTogKCFfdm0uc3VydmV5LmlzTGFzdFBhZ2UpLFxuICAgICAgZXhwcmVzc2lvbjogXCIhc3VydmV5LmlzTGFzdFBhZ2VcIlxuICAgIH1dLFxuICAgIGNsYXNzOiBfdm0uZ2V0TmF2QnRuQ2xhc3NlcygnbmV4dCcpLFxuICAgIGF0dHJzOiB7XG4gICAgICBcInR5cGVcIjogXCJidXR0b25cIixcbiAgICAgIFwidmFsdWVcIjogX3ZtLnN1cnZleS5wYWdlTmV4dFRleHRcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImNsaWNrXCI6IF92bS5uZXh0UGFnZVxuICAgIH1cbiAgfSksIF92bS5fdihcIiBcIiksIChfdm0uc3VydmV5LmlzRWRpdE1vZGUpID8gX2MoJ2lucHV0Jywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICB2YWx1ZTogKF92bS5zdXJ2ZXkuaXNMYXN0UGFnZSksXG4gICAgICBleHByZXNzaW9uOiBcInN1cnZleS5pc0xhc3RQYWdlXCJcbiAgICB9XSxcbiAgICBjbGFzczogX3ZtLmdldE5hdkJ0bkNsYXNzZXMoJ2NvbXBsZXRlJyksXG4gICAgYXR0cnM6IHtcbiAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiLFxuICAgICAgXCJ2YWx1ZVwiOiBfdm0uc3VydmV5LmNvbXBsZXRlVGV4dFxuICAgIH0sXG4gICAgb246IHtcbiAgICAgIFwiY2xpY2tcIjogX3ZtLmNvbXBsZXRlTGFzdFBhZ2VcbiAgICB9XG4gIH0pIDogX3ZtLl9lKCldKSA6IF92bS5fZSgpXSA6IF92bS5fZSgpLCBfdm0uX3YoXCIgXCIpLCAoX3ZtLmhhc0NvbXBsZXRlZFBhZ2UpID8gX2MoJ2RpdicsIHtcbiAgICBkb21Qcm9wczoge1xuICAgICAgXCJpbm5lckhUTUxcIjogX3ZtLl9zKF92bS5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbClcbiAgICB9XG4gIH0pIDogX3ZtLl9lKCksIF92bS5fdihcIiBcIiksIChfdm0uc3VydmV5LnN0YXRlID09PSAnbG9hZGluZycpID8gX2MoJ2RpdicsIHtcbiAgICBkb21Qcm9wczoge1xuICAgICAgXCJpbm5lckhUTUxcIjogX3ZtLl9zKF92bS5zdXJ2ZXkucHJvY2Vzc2VkTG9hZGluZ0h0bWwpXG4gICAgfVxuICB9KSA6IF92bS5fZSgpLCBfdm0uX3YoXCIgXCIpLCAoX3ZtLnN1cnZleS5zdGF0ZSA9PT0gJ2VtcHR5JykgPyBfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLmJvZHlcbiAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5lbXB0eVN1cnZleVRleHQpKV0pIDogX3ZtLl9lKCldLCAyKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi0xNmJjOWEzMlwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtMTZiYzlhMzIhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvc3VydmV5LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2Jywge1xuICAgIGRvbVByb3BzOiB7XG4gICAgICBcImlubmVySFRNTFwiOiBfdm0uX3MoX3ZtLnF1ZXN0aW9uLnByb2Nlc3NlZEh0bWwpXG4gICAgfVxuICB9KVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi0xODQ5MDgxMFwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtMTg0OTA4MTAhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvaHRtbC52dWVcbi8vIG1vZHVsZSBpZCA9IDEwNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ3RhYmxlJywge1xuICAgIGNsYXNzOiBfdm0uY3NzLm11bHRpcGxldGV4dC5yb290XG4gIH0sIF92bS5fbCgoX3ZtLnF1ZXN0aW9uLmdldFJvd3MoKSksIGZ1bmN0aW9uKHJvdykge1xuICAgIHJldHVybiBfYygndHInLCBbX3ZtLl9sKChyb3cpLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIFtfYygndGQnLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uY3NzLm11bHRpcGxldGV4dC5pdGVtVGl0bGVcbiAgICAgIH0sIFtfdm0uX3YoX3ZtLl9zKGl0ZW0uZnVsbFRpdGxlKSldKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3RkJywgWyghX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkpID8gX2MoJ2lucHV0Jywge1xuICAgICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICB2YWx1ZTogKGl0ZW0udmFsdWUpLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwiaXRlbS52YWx1ZVwiXG4gICAgICAgIH1dLFxuICAgICAgICBjbGFzczogX3ZtLmNzcy5tdWx0aXBsZXRleHQuaXRlbVZhbHVlLFxuICAgICAgICBzdGF0aWNTdHlsZToge1xuICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCJcbiAgICAgICAgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgICAgXCJzaXplXCI6IF92bS5xdWVzdGlvbi5pdGVtU2l6ZSxcbiAgICAgICAgICBcInBsYWNlaG9sZGVyXCI6IGl0ZW0ucGxhY2VIb2xkZXIsXG4gICAgICAgICAgXCJpZFwiOiBpbmRleCA9PT0gMCA/IF92bS5xdWVzdGlvbi5pbnB1dElkIDogJydcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICBcInZhbHVlXCI6IF92bS5fcyhpdGVtLnZhbHVlKVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIFwiaW5wdXRcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkgOiBfYygnZGl2Jywge1xuICAgICAgICBjbGFzczogX3ZtLmNzcy5tdWx0aXBsZXRleHQuaXRlbVZhbHVlLFxuICAgICAgICBzdGF0aWNTdHlsZToge1xuICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCJcbiAgICAgICAgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBcInNpemVcIjogX3ZtLnF1ZXN0aW9uLml0ZW1TaXplXG4gICAgICAgIH1cbiAgICAgIH0sIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udmFsdWUpKV0pXSksIF92bS5fdihcIiBcIiksIHZvaWQgMF1cbiAgICB9KV0sIDIpXG4gIH0pKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi0zNjg3Yjk4YVwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtMzY4N2I5OGEhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2JywgW19jKCdoNCcsIHtcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgdmFsdWU6IChfdm0uaGFzVGl0bGUpLFxuICAgICAgZXhwcmVzc2lvbjogXCJoYXNUaXRsZVwiXG4gICAgfV0sXG4gICAgY2xhc3M6IF92bS5jc3MucGFnZVRpdGxlXG4gIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5udW0gKyBfdm0ucGFnZS5wcm9jZXNzZWRUaXRsZSkpXSksIF92bS5fdihcIiBcIiksIF92bS5fbCgoX3ZtLnJvd3MpLCBmdW5jdGlvbihyb3cpIHtcbiAgICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICB2YWx1ZTogKHJvdy52aXNpYmxlKSxcbiAgICAgICAgZXhwcmVzc2lvbjogXCJyb3cudmlzaWJsZVwiXG4gICAgICB9XSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLnJvd1xuICAgIH0sIFtfYygnc3VydmV5LXJvdycsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwicm93XCI6IHJvdyxcbiAgICAgICAgXCJzdXJ2ZXlcIjogX3ZtLnN1cnZleSxcbiAgICAgICAgXCJjc3NcIjogX3ZtLmNzc1xuICAgICAgfVxuICAgIH0pXSwgMSlcbiAgfSldLCAyKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi0zYjJlYzRkY1wiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtM2IyZWM0ZGMhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvcGFnZS52dWVcbi8vIG1vZHVsZSBpZCA9IDEwOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICBzdHlsZTogKHtcbiAgICAgIG92ZXJmbG93WDogX3ZtLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwgPyAnc2Nyb2xsJyA6ICcnXG4gICAgfSlcbiAgfSwgW19jKCd0YWJsZScsIHtcbiAgICBjbGFzczogX3ZtLmNzcy5tYXRyaXhkeW5hbWljLnJvb3RcbiAgfSwgW19jKCd0aGVhZCcsIFtfYygndHInLCBbX3ZtLl9sKChfdm0ucXVlc3Rpb24uY29sdW1ucyksIGZ1bmN0aW9uKGNvbHVtbikge1xuICAgIHJldHVybiBfYygndGgnLCB7XG4gICAgICBzdHlsZTogKHtcbiAgICAgICAgbWluV2lkdGg6IF92bS5xdWVzdGlvbi5nZXRDb2x1bW5XaWR0aChjb2x1bW4pXG4gICAgICB9KVxuICAgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5nZXRDb2x1bW5UaXRsZShjb2x1bW4pKSldKVxuICB9KSwgX3ZtLl92KFwiIFwiKSwgKCFfdm0ucXVlc3Rpb24uaXNSZWFkT25seSkgPyBfYygndGgnKSA6IF92bS5fZSgpXSwgMildKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3Rib2R5JywgX3ZtLl9sKChfdm0ucm93cyksIGZ1bmN0aW9uKHJvdykge1xuICAgIHJldHVybiBfYygndHInLCBbX3ZtLl9sKChyb3cuY2VsbHMpLCBmdW5jdGlvbihjZWxsKSB7XG4gICAgICByZXR1cm4gX2MoJ3RkJywgW19jKCdzdXJ2ZXktZXJyb3JzJywge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIFwicXVlc3Rpb25cIjogY2VsbC5xdWVzdGlvbixcbiAgICAgICAgICBcImNzc1wiOiBfdm0uY3NzXG4gICAgICAgIH1cbiAgICAgIH0pLCBfdm0uX3YoXCIgXCIpLCBfYygnc3VydmV5LScgKyBjZWxsLnF1ZXN0aW9uLmdldFR5cGUoKSwge1xuICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgXCJxdWVzdGlvblwiOiBjZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgIFwiY3NzXCI6IF92bS5jc3NcbiAgICAgICAgfVxuICAgICAgfSldLCAxKVxuICAgIH0pLCBfdm0uX3YoXCIgXCIpLCAoIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5KSA/IF9jKCd0ZCcsIFtfYygnaW5wdXQnLCB7XG4gICAgICBjbGFzczogX3ZtLmNzcy5tYXRyaXhkeW5hbWljLmJ1dHRvbixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiLFxuICAgICAgICBcInZhbHVlXCI6IF92bS5xdWVzdGlvbi5yZW1vdmVSb3dUZXh0XG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0ucmVtb3ZlUm93Q2xpY2socm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSldKSA6IF92bS5fZSgpXSwgMilcbiAgfSkpXSksIF92bS5fdihcIiBcIiksICghX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkpID8gX2MoJ2lucHV0Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLm1hdHJpeGR5bmFtaWMuYnV0dG9uLFxuICAgIGF0dHJzOiB7XG4gICAgICBcInR5cGVcIjogXCJidXR0b25cIixcbiAgICAgIFwidmFsdWVcIjogX3ZtLnF1ZXN0aW9uLmFkZFJvd1RleHRcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImNsaWNrXCI6IF92bS5hZGRSb3dDbGlja1xuICAgIH1cbiAgfSkgOiBfdm0uX2UoKV0pXG59LHN0YXRpY1JlbmRlckZuczogW119XG5tb2R1bGUuZXhwb3J0cy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpLnJlcmVuZGVyKFwiZGF0YS12LTQzNGY0ZDYxXCIsIG1vZHVsZS5leHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzP2lkPWRhdGEtdi00MzRmNGQ2MSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTA5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2JywgWyghX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkpID8gX2MoJ2lucHV0Jywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgIHZhbHVlOiAoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpLFxuICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5jb21tZW50XCJcbiAgICB9XSxcbiAgICBjbGFzczogX3ZtLmNzcy5xdWVzdGlvbi5jb21tZW50LFxuICAgIGF0dHJzOiB7XG4gICAgICBcInR5cGVcIjogXCJ0ZXh0XCJcbiAgICB9LFxuICAgIGRvbVByb3BzOiB7XG4gICAgICBcInZhbHVlXCI6IF92bS5fcyhfdm0ucXVlc3Rpb24uY29tbWVudClcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImlucHV0XCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgIF92bS5xdWVzdGlvbi5jb21tZW50ID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSkgOiBfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLnF1ZXN0aW9uLmNvbW1lbnRcbiAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpKV0pXSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtNDM4MGZhMTRcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LTQzODBmYTE0IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2JywgWyghX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkpID8gX2MoJ2lucHV0Jywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcInR5cGVcIjogXCJmaWxlXCIsXG4gICAgICBcImlkXCI6IF92bS5xdWVzdGlvbi5pbnB1dElkXG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgXCJjaGFuZ2VcIjogX3ZtLmRvQ2hhbmdlXG4gICAgfVxuICB9KSA6IF92bS5fZSgpLCBfdm0uX3YoXCIgXCIpLCBfYygnZGl2JywgW19jKCdpbWcnLCB7XG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgIHZhbHVlOiAoX3ZtLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSksXG4gICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnByZXZpZXdWYWx1ZVwiXG4gICAgfV0sXG4gICAgYXR0cnM6IHtcbiAgICAgIFwic3JjXCI6IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgIFwiaGVpZ2h0XCI6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCxcbiAgICAgIFwid2lkdGhcIjogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICB9XG4gIH0pXSldKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi00N2M1Y2Q2ZVwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtNDdjNWNkNmUhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZmlsZS52dWVcbi8vIG1vZHVsZSBpZCA9IDExMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ2Zvcm0nLCB7XG4gICAgY2xhc3M6IF92bS5jc3MucmFkaW9ncm91cC5yb290XG4gIH0sIFtfdm0uX2woKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyksIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgICBjbGFzczogX3ZtLmNzcy5yYWRpb2dyb3VwLml0ZW0sXG4gICAgICBzdHlsZTogKHtcbiAgICAgICAgJ3dpZHRoJzogX3ZtLmNvbFdpZHRoLFxuICAgICAgICAnbWFyZ2luLXJpZ2h0JzogX3ZtLnF1ZXN0aW9uLmNvbENvdW50ID09PSAwID8gJzVweCcgOiAnMHB4J1xuICAgICAgfSlcbiAgICB9LCBbX2MoJ2xhYmVsJywge1xuICAgICAgY2xhc3M6IF92bS5jc3MucmFkaW9ncm91cC5sYWJlbFxuICAgIH0sIFtfYygnaW5wdXQnLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICB2YWx1ZTogKF92bS5xdWVzdGlvbi52YWx1ZSksXG4gICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24udmFsdWVcIlxuICAgICAgfV0sXG4gICAgICBhdHRyczoge1xuICAgICAgICBcInR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICBcIm5hbWVcIjogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgIFwiaWRcIjogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyAnXycgKyBpdGVtLnZhbHVlLFxuICAgICAgICBcImRpc2FibGVkXCI6IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICB9LFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBpdGVtLnZhbHVlLFxuICAgICAgICBcImNoZWNrZWRcIjogX3ZtLl9xKF92bS5xdWVzdGlvbi52YWx1ZSwgaXRlbS52YWx1ZSlcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS5xdWVzdGlvbi52YWx1ZSA9IGl0ZW0udmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLCBfdm0uX3YoXCIgXCIpLCBfYygnc3BhbicsIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udGV4dCkpXSldKV0pXG4gIH0pLCBfdm0uX3YoXCIgXCIpLCBfYygnc3VydmV5LW90aGVyLWNob2ljZScsIHtcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgdmFsdWU6IChfdm0ucXVlc3Rpb24uaGFzT3RoZXIgJiYgX3ZtLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCksXG4gICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFwiXG4gICAgfV0sXG4gICAgY2xhc3M6IF92bS5jc3MucmFkaW9ncm91cC5vdGhlcixcbiAgICBhdHRyczoge1xuICAgICAgXCJxdWVzdGlvblwiOiBfdm0ucXVlc3Rpb24sXG4gICAgICBcImNzc1wiOiBfdm0uY3NzXG4gICAgfVxuICB9KV0sIDIpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5tb2R1bGUuZXhwb3J0cy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpLnJlcmVuZGVyKFwiZGF0YS12LTVhMDYxYjcxXCIsIG1vZHVsZS5leHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzP2lkPWRhdGEtdi01YTA2MWI3MSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2JywgX3ZtLl9sKChfdm0ucm93LmVsZW1lbnRzKSwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBfYygnZGl2Jywge1xuICAgICAgY2xhc3M6IF92bS5jc3MucXVlc3Rpb24ucm9vdCxcbiAgICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICAgIFwidmVydGljYWwtYWxpZ25cIjogXCJ0b3BcIlxuICAgICAgfSxcbiAgICAgIHN0eWxlOiAoe1xuICAgICAgICBkaXNwbGF5OiBlbGVtZW50LnZpc2libGUgPyAnaW5saW5lLWJsb2NrJyA6ICdub25lJyxcbiAgICAgICAgbWFyZ2luTGVmdDogX3ZtLmdldEluZGVudFNpemUoZWxlbWVudCwgZWxlbWVudC5pbmRlbnQpLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6IF92bS5nZXRJbmRlbnRTaXplKGVsZW1lbnQsIGVsZW1lbnQucmlnaHRJbmRlbnQpLFxuICAgICAgICB3aWR0aDogZWxlbWVudC5yZW5kZXJXaWR0aFxuICAgICAgfSksXG4gICAgICBhdHRyczoge1xuICAgICAgICBcImlkXCI6IGVsZW1lbnQuaWRcbiAgICAgIH1cbiAgICB9LCBbKGVsZW1lbnQuaGFzVGl0bGUpID8gX2MoJ2g1Jywge1xuICAgICAgZGlyZWN0aXZlczogW3tcbiAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgIHZhbHVlOiAoX3ZtLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb24gPT09ICd0b3AnKSxcbiAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uID09PSAndG9wJ1wiXG4gICAgICB9XSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLnF1ZXN0aW9uLnRpdGxlXG4gICAgfSwgW192bS5fdihfdm0uX3MoZWxlbWVudC5mdWxsVGl0bGUpKV0pIDogX3ZtLl9lKCksIF92bS5fdihcIiBcIiksIF9jKCdzdXJ2ZXktZXJyb3JzJywge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJxdWVzdGlvblwiOiBlbGVtZW50LFxuICAgICAgICBcImNzc1wiOiBfdm0uY3NzXG4gICAgICB9XG4gICAgfSksIF92bS5fdihcIiBcIiksIF9jKF92bS5nZXRXaWRnZXRDb21wb25lbnROYW1lKGVsZW1lbnQpLCB7XG4gICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBcInF1ZXN0aW9uXCI6IGVsZW1lbnQsXG4gICAgICAgIFwiY3NzXCI6IF92bS5jc3NcbiAgICAgIH1cbiAgICB9KSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2RpdicsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQuaGFzQ29tbWVudCksXG4gICAgICAgIGV4cHJlc3Npb246IFwiZWxlbWVudC5oYXNDb21tZW50XCJcbiAgICAgIH1dXG4gICAgfSwgW19jKCdkaXYnLCBbX3ZtLl92KF92bS5fcyhlbGVtZW50LmNvbW1lbnRUZXh0KSldKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3N1cnZleS1jb21tZW50Jywge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJxdWVzdGlvblwiOiBlbGVtZW50LFxuICAgICAgICBcImNzc1wiOiBfdm0uY3NzXG4gICAgICB9XG4gICAgfSldLCAxKSwgX3ZtLl92KFwiIFwiKSwgKGVsZW1lbnQuaGFzVGl0bGUpID8gX2MoJ2g1Jywge1xuICAgICAgZGlyZWN0aXZlczogW3tcbiAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgIHZhbHVlOiAoX3ZtLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb24gPT09ICdib3R0b20nKSxcbiAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uID09PSAnYm90dG9tJ1wiXG4gICAgICB9XSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLnF1ZXN0aW9uLnRpdGxlXG4gICAgfSwgW192bS5fdihfdm0uX3MoZWxlbWVudC5mdWxsVGl0bGUpKV0pIDogX3ZtLl9lKCldLCAxKVxuICB9KSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtNjI5NWI0YzZcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LTYyOTViNGM2IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3Jvdy52dWVcbi8vIG1vZHVsZSBpZCA9IDExM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICBjbGFzczogX3ZtLmNzcy5kcm9wZG93bi5yb290XG4gIH0sIFsoIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5KSA/IF9jKCdzZWxlY3QnLCB7XG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgdmFsdWU6IChfdm0ucXVlc3Rpb24udmFsdWUpLFxuICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgfV0sXG4gICAgY2xhc3M6IF92bS5jc3MuZHJvcGRvd24uY29udHJvbCxcbiAgICBhdHRyczoge1xuICAgICAgXCJpZFwiOiBfdm0ucXVlc3Rpb24uaW5wdXRJZFxuICAgIH0sXG4gICAgb246IHtcbiAgICAgIFwiY2hhbmdlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICBfdm0ucXVlc3Rpb24udmFsdWUgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgcmV0dXJuIG8uc2VsZWN0ZWRcbiAgICAgICAgfSkubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICB2YXIgdmFsID0gXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO1xuICAgICAgICAgIHJldHVybiB2YWxcbiAgICAgICAgfSlbMF1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtfYygnb3B0aW9uJywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcInZhbHVlXCI6IFwiXCJcbiAgICB9XG4gIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbikpXSksIF92bS5fdihcIiBcIiksIF92bS5fbCgoX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzKSwgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICByZXR1cm4gX2MoJ29wdGlvbicsIHtcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwidmFsdWVcIjogaXRlbS52YWx1ZVxuICAgICAgfVxuICAgIH0sIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udGV4dCkpXSlcbiAgfSldLCAyKSA6IF9jKCdkaXYnLCB7XG4gICAgY2xhc3M6IF92bS5jc3MuZHJvcGRvd24uY29udHJvbCxcbiAgICBhdHRyczoge1xuICAgICAgXCJ0ZXh0XCI6IF92bS5xdWVzdGlvbi52YWx1ZVxuICAgIH1cbiAgfSksIF92bS5fdihcIiBcIiksIF9jKCdzdXJ2ZXktb3RoZXItY2hvaWNlJywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICB2YWx1ZTogKF92bS5xdWVzdGlvbi5oYXNPdGhlciAmJiBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkKSxcbiAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzT3RoZXIgJiYgcXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXCJcbiAgICB9XSxcbiAgICBjbGFzczogX3ZtLmNzcy5yYWRpb2dyb3VwLm90aGVyLFxuICAgIGF0dHJzOiB7XG4gICAgICBcInF1ZXN0aW9uXCI6IF92bS5xdWVzdGlvbixcbiAgICAgIFwiY3NzXCI6IF92bS5jc3NcbiAgICB9XG4gIH0pXSwgMSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtNjRkNzFhNDRcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LTY0ZDcxYTQ0IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2JywgWyghX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkpID8gX2MoJ2lucHV0Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLnRleHQsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwidHlwZVwiOiBfdm0ucXVlc3Rpb24uaW5wdXRUeXBlLFxuICAgICAgXCJzaXplXCI6IF92bS5xdWVzdGlvbi5zaXplLFxuICAgICAgXCJpZFwiOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLnF1ZXN0aW9uLnBsYWNlSG9sZGVyXG4gICAgfSxcbiAgICBkb21Qcm9wczoge1xuICAgICAgXCJ2YWx1ZVwiOiBfdm0ucXVlc3Rpb24udmFsdWVcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImNoYW5nZVwiOiBfdm0uY2hhbmdlXG4gICAgfVxuICB9KSA6IF9jKCdkaXYnLCB7XG4gICAgY2xhc3M6IF92bS5jc3MudGV4dFxuICB9LCBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24udmFsdWUpKV0pXSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtNjdiYmFmMGNcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LTY3YmJhZjBjIS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3RleHQudnVlXG4vLyBtb2R1bGUgaWQgPSAxMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgc3R5bGU6ICh7XG4gICAgICBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8gJ3Njcm9sbCcgOiAnJ1xuICAgIH0pXG4gIH0sIFtfYygndGFibGUnLCB7XG4gICAgY2xhc3M6IF92bS5jc3MubWF0cml4ZHJvcGRvd24ucm9vdFxuICB9LCBbX2MoJ3RoZWFkJywgW19jKCd0cicsIFtfYygndGgnKSwgX3ZtLl92KFwiIFwiKSwgX3ZtLl9sKChfdm0ucXVlc3Rpb24uY29sdW1ucyksIGZ1bmN0aW9uKGNvbHVtbikge1xuICAgIHJldHVybiBfYygndGgnLCB7XG4gICAgICBzdHlsZTogKHtcbiAgICAgICAgbWluV2lkdGg6IF92bS5xdWVzdGlvbi5nZXRDb2x1bW5XaWR0aChjb2x1bW4pXG4gICAgICB9KVxuICAgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5nZXRDb2x1bW5UaXRsZShjb2x1bW4pKSldKVxuICB9KV0sIDIpXSksIF92bS5fdihcIiBcIiksIF9jKCd0Ym9keScsIF92bS5fbCgoX3ZtLnF1ZXN0aW9uLnZpc2libGVSb3dzKSwgZnVuY3Rpb24ocm93KSB7XG4gICAgcmV0dXJuIF9jKCd0cicsIFtfYygndGQnLCBbX3ZtLl92KF92bS5fcyhyb3cudGV4dCkpXSksIF92bS5fdihcIiBcIiksIF92bS5fbCgocm93LmNlbGxzKSwgZnVuY3Rpb24oY2VsbCkge1xuICAgICAgcmV0dXJuIF9jKCd0ZCcsIFtfYygnc3VydmV5LWVycm9ycycsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBcInF1ZXN0aW9uXCI6IF92bS5xdWVzdGlvbixcbiAgICAgICAgICBcImNzc1wiOiBfdm0uY3NzXG4gICAgICAgIH1cbiAgICAgIH0pLCBfdm0uX3YoXCIgXCIpLCBfYygnc3VydmV5LScgKyBjZWxsLnF1ZXN0aW9uLmdldFR5cGUoKSwge1xuICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgXCJxdWVzdGlvblwiOiBjZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgIFwiY3NzXCI6IF92bS5jc3NcbiAgICAgICAgfVxuICAgICAgfSldLCAxKVxuICAgIH0pXSwgMilcbiAgfSkpXSldKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi03NGE2NTU1ZlwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtNzRhNjU1NWYhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlXG4vLyBtb2R1bGUgaWQgPSAxMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgIHZhbHVlOiAoISFfdm0ucXVlc3Rpb24uZXJyb3JzICYmIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCksXG4gICAgICBleHByZXNzaW9uOiBcIiEhcXVlc3Rpb24uZXJyb3JzICYmIHF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXCJcbiAgICB9XSxcbiAgICBjbGFzczogX3ZtLmNzcy5lcnJvci5yb290LFxuICAgIGF0dHJzOiB7XG4gICAgICBcInJvbGVcIjogXCJhbGVydFwiXG4gICAgfVxuICB9LCBfdm0uX2woKF92bS5xdWVzdGlvbi5lcnJvcnMpLCBmdW5jdGlvbihlcnJvcikge1xuICAgIHJldHVybiBfYygnZGl2JywgW19jKCdzcGFuJywge1xuICAgICAgY2xhc3M6IF92bS5jc3MuZXJyb3IuaWNvbixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbiAgICAgIH1cbiAgICB9KSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3NwYW4nLCB7XG4gICAgICBjbGFzczogX3ZtLmNzcy5lcnJvci5pdGVtXG4gICAgfSwgW192bS5fdihfdm0uX3MoZXJyb3IuZ2V0VGV4dCgpKSldKV0pXG4gIH0pKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi03ZjVmMGE3OFwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtN2Y1ZjBhNzghLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZXJyb3JzLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygndGFibGUnLCB7XG4gICAgY2xhc3M6IF92bS5jc3MubWF0cml4LnJvb3RcbiAgfSwgW19jKCd0aGVhZCcsIFtfYygndHInLCBbX2MoJ3RoJywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICB2YWx1ZTogKF92bS5xdWVzdGlvbi5oYXNSb3dzKSxcbiAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzUm93c1wiXG4gICAgfV1cbiAgfSksIF92bS5fdihcIiBcIiksIF92bS5fbCgoX3ZtLnF1ZXN0aW9uLmNvbHVtbnMpLCBmdW5jdGlvbihjb2x1bW4pIHtcbiAgICByZXR1cm4gX2MoJ3RoJywgW192bS5fdihfdm0uX3MoY29sdW1uLnRleHQpKV0pXG4gIH0pXSwgMildKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3Rib2R5JywgX3ZtLl9sKChfdm0ucXVlc3Rpb24udmlzaWJsZVJvd3MpLCBmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG4gICAgcmV0dXJuIF9jKCd0cicsIFtfYygndGQnLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgdmFsdWU6IChfdm0ucXVlc3Rpb24uaGFzUm93cyksXG4gICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzUm93c1wiXG4gICAgICB9XVxuICAgIH0sIFtfdm0uX3YoX3ZtLl9zKHJvdy50ZXh0KSldKSwgX3ZtLl92KFwiIFwiKSwgX3ZtLl9sKChfdm0ucXVlc3Rpb24uY29sdW1ucyksIGZ1bmN0aW9uKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgIHJldHVybiBfYygndGQnLCBbX2MoJ2lucHV0Jywge1xuICAgICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICB2YWx1ZTogKHJvdy52YWx1ZSksXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJyb3cudmFsdWVcIlxuICAgICAgICB9XSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICAgIFwibmFtZVwiOiByb3cuZnVsbE5hbWUsXG4gICAgICAgICAgXCJkaXNhYmxlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgICBcImlkXCI6IChjb2x1bW5JbmRleCA9PT0gMCkgJiYgKHJvd0luZGV4ID09PSAwKSA/IF92bS5xdWVzdGlvbi5pbnB1dElkIDogJydcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICBcInZhbHVlXCI6IGNvbHVtbi52YWx1ZSxcbiAgICAgICAgICBcImNoZWNrZWRcIjogX3ZtLl9xKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXSlcbiAgICB9KV0sIDIpXG4gIH0pKV0pXG59LHN0YXRpY1JlbmRlckZuczogW119XG5tb2R1bGUuZXhwb3J0cy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpLnJlcmVuZGVyKFwiZGF0YS12LWFmMDFkMDY0XCIsIG1vZHVsZS5leHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzP2lkPWRhdGEtdi1hZjAxZDA2NCEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXgudnVlXG4vLyBtb2R1bGUgaWQgPSAxMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCBbX2MoJ2g0Jywge1xuICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICB2YWx1ZTogKF92bS5oYXNUaXRsZSksXG4gICAgICBleHByZXNzaW9uOiBcImhhc1RpdGxlXCJcbiAgICB9XSxcbiAgICBjbGFzczogX3ZtLmNzcy5wYWdlVGl0bGVcbiAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnByb2Nlc3NlZFRpdGxlKSldKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2RpdicsIHtcbiAgICBzdHlsZTogKHtcbiAgICAgIG1hcmdpbkxlZnQ6IF92bS5nZXRJbmRlbnRTaXplKF92bS5xdWVzdGlvbiwgX3ZtLnF1ZXN0aW9uLmlubmVySW5kZW50KVxuICAgIH0pXG4gIH0sIF92bS5fbCgoX3ZtLnJvd3MpLCBmdW5jdGlvbihyb3cpIHtcbiAgICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICB2YWx1ZTogKHJvdy52aXNpYmxlKSxcbiAgICAgICAgZXhwcmVzc2lvbjogXCJyb3cudmlzaWJsZVwiXG4gICAgICB9XSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLnJvd1xuICAgIH0sIFtfYygnc3VydmV5LXJvdycsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwicm93XCI6IHJvdyxcbiAgICAgICAgXCJzdXJ2ZXlcIjogX3ZtLnN1cnZleSxcbiAgICAgICAgXCJjc3NcIjogX3ZtLmNzc1xuICAgICAgfVxuICAgIH0pXSwgMSlcbiAgfSkpXSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtYmY4MzFiZjJcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LWJmODMxYmYyIS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3BhbmVsLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2JywgW19jKCdkaXYnLCB7XG4gICAgY2xhc3M6IF92bS5jc3MucmF0aW5nLnJvb3RcbiAgfSwgX3ZtLl9sKChfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMpLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgIHJldHVybiBfYygnbGFiZWwnLCB7XG4gICAgICBjbGFzczogX3ZtLmdldENzcyhpdGVtKVxuICAgIH0sIFtfYygnaW5wdXQnLCB7XG4gICAgICBzdGF0aWNTdHlsZToge1xuICAgICAgICBcImRpc3BsYXlcIjogXCJub25lXCJcbiAgICAgIH0sXG4gICAgICBhdHRyczoge1xuICAgICAgICBcInR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICBcIm5hbWVcIjogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgIFwiaWRcIjogX3ZtLnF1ZXN0aW9uLm5hbWUgKyBpbmRleCxcbiAgICAgICAgXCJkaXNhYmxlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwidmFsdWVcIjogaXRlbS52YWx1ZVxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiY2hhbmdlXCI6IF92bS5jaGFuZ2VcbiAgICAgIH1cbiAgICB9KSwgX3ZtLl92KFwiIFwiKSwgKGluZGV4ID09PSAwKSA/IF9jKCdzcGFuJywgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvbikpXSkgOiBfdm0uX2UoKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3NwYW4nLCBbX3ZtLl92KF92bS5fcyhpdGVtLnRleHQpKV0pLCBfdm0uX3YoXCIgXCIpLCAoaW5kZXggPT09IF92bS5xdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcy5sZW5ndGggLSAxKSA/IF9jKCdzcGFuJywgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvbikpXSkgOiBfdm0uX2UoKV0pXG4gIH0pKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ3N1cnZleS1vdGhlci1jaG9pY2UnLCB7XG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgIHZhbHVlOiAoX3ZtLnF1ZXN0aW9uLmhhc090aGVyKSxcbiAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzT3RoZXJcIlxuICAgIH1dLFxuICAgIGNsYXNzOiBfdm0uY3NzLnJhdGluZy5vdGhlcixcbiAgICBhdHRyczoge1xuICAgICAgXCJxdWVzdGlvblwiOiBfdm0ucXVlc3Rpb24sXG4gICAgICBcImNzc1wiOiBfdm0uY3NzXG4gICAgfVxuICB9KV0sIDEpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5tb2R1bGUuZXhwb3J0cy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpLnJlcmVuZGVyKFwiZGF0YS12LWNkMjIzOGFjXCIsIG1vZHVsZS5leHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzP2lkPWRhdGEtdi1jZDIyMzhhYyEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9yYXRpbmcudnVlXG4vLyBtb2R1bGUgaWQgPSAxMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgY2xhc3M6IF92bS5jc3Mud2luZG93LnJvb3QsXG4gICAgc3RhdGljU3R5bGU6IHtcbiAgICAgIFwicG9zaXRpb25cIjogXCJmaXhlZFwiLFxuICAgICAgXCJib3R0b21cIjogXCIzcHhcIixcbiAgICAgIFwicmlnaHRcIjogXCIxMHB4XCJcbiAgICB9XG4gIH0sIFtfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIucm9vdFxuICB9LCBbX2MoJ2EnLCB7XG4gICAgc3RhdGljU3R5bGU6IHtcbiAgICAgIFwid2lkdGhcIjogXCIxMDAlXCJcbiAgICB9LFxuICAgIGF0dHJzOiB7XG4gICAgICBcImhyZWZcIjogXCIjXCJcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImNsaWNrXCI6IF92bS5kb0V4cGFuZFxuICAgIH1cbiAgfSwgW19jKCdzcGFuJywge1xuICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgc3RhdGljU3R5bGU6IHtcbiAgICAgIFwicGFkZGluZy1yaWdodFwiOiBcIjEwcHhcIlxuICAgIH1cbiAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN1cnZleS50aXRsZSkpXSksIF92bS5fdihcIiBcIiksIF9jKCdzcGFuJywge1xuICAgIGNsYXNzOiBfdm0uZXhwYW5kZWRDc3MsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbiAgICB9XG4gIH0pXSldKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2RpdicsIHtcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgdmFsdWU6IChfdm0uZXhwYW5kZWQpLFxuICAgICAgZXhwcmVzc2lvbjogXCJleHBhbmRlZFwiXG4gICAgfV0sXG4gICAgY2xhc3M6IF92bS5jc3Mud2luZG93LmJvZHlcbiAgfSwgW19jKCdzdXJ2ZXknLCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIFwic3VydmV5XCI6IF92bS5zdXJ2ZXlcbiAgICB9XG4gIH0pXSwgMSldKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxubW9kdWxlLmV4cG9ydHMucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKS5yZXJlbmRlcihcImRhdGEtdi1lODVjYTcwNlwiLCBtb2R1bGUuZXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci5qcz9pZD1kYXRhLXYtZTg1Y2E3MDYhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvd2luZG93LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzLFxuICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICBcIndpZHRoXCI6IFwiNjAlXCJcbiAgICB9XG4gIH0sIFtfYygnZGl2Jywge1xuICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQmFyLFxuICAgIHN0eWxlOiAoe1xuICAgICAgd2lkdGg6IF92bS5wcm9ncmVzc1xuICAgIH0pLFxuICAgIGF0dHJzOiB7XG4gICAgICBcInJvbGVcIjogXCJwcm9ncmVzc2JhclwiLFxuICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IFwiMFwiLFxuICAgICAgXCJhcmlhLXZhbHVlbWF4XCI6IFwiMTAwXCJcbiAgICB9XG4gIH0sIFtfYygnc3BhbicsIFtfdm0uX3YoX3ZtLl9zKF92bS5zdXJ2ZXkucHJvZ3Jlc3NUZXh0KSldKV0pXSlcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cbm1vZHVsZS5leHBvcnRzLnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikucmVyZW5kZXIoXCJkYXRhLXYtZWI3NGZhMGNcIiwgbW9kdWxlLmV4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIuanM/aWQ9ZGF0YS12LWViNzRmYTBjIS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMTIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG1vZGVsXHJcbmV4cG9ydCAqIGZyb20gJy4vY2h1bmtzL21vZGVsJztcclxuXHJcbi8vIGxvY2FsaXphdGlvblxyXG5pbXBvcnQgJy4vY2h1bmtzL2xvY2FsaXphdGlvbic7XHJcblxyXG4vLyBoZWxwZXJzXHJcbmV4cG9ydCAqIGZyb20gICcuL2NodW5rcy9oZWxwZXJzJztcclxuXHJcbmV4cG9ydCB7c3VydmV5Q3NzfSBmcm9tICcuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkJztcclxuLy8gY3NzIHN0YW5kYXJkXHJcbmV4cG9ydCB7ZGVmYXVsdFN0YW5kYXJkQ3NzfSBmcm9tICcuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkJztcclxuLy8gY3NzIGJvb3RzdHJhcFxyXG5leHBvcnQge2RlZmF1bHRCb290c3RyYXBDc3N9IGZyb20gJy4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwJztcclxuXHJcbmV4cG9ydCB7VnVlU3VydmV5TW9kZWwgYXMgTW9kZWx9IGZyb20gJy4uL3Z1ZS9zdXJ2ZXlNb2RlbCc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBTdXJ2ZXl9IGZyb20gJy4uL3Z1ZS9zdXJ2ZXkudnVlJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFdpbmRvd30gZnJvbSAnLi4vdnVlL3dpbmRvdy52dWUnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgUGFnZX0gZnJvbSAnLi4vdnVlL3BhZ2UudnVlJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFJhZGlvZ3JvdXB9IGZyb20gJy4uL3Z1ZS9yYWRpb2dyb3VwLnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBPdGhlckNob2ljZX0gZnJvbSAnLi4vdnVlL290aGVyQ2hvaWNlLnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBSYXRpbmd9IGZyb20gJy4uL3Z1ZS9yYXRpbmcudnVlJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIENvbW1lbnR9IGZyb20gJy4uL3Z1ZS9jb21tZW50LnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDaGVja2JveH0gZnJvbSAnLi4vdnVlL2NoZWNrYm94LnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBUZXh0fSBmcm9tICcuLi92dWUvdGV4dC52dWUnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgTXVsdGlwbGVUZXh0fSBmcm9tICcuLi92dWUvbXVsdGlwbGV0ZXh0LnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBNYXRyaXh9IGZyb20gJy4uL3Z1ZS9tYXRyaXgudnVlJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERyb3Bkb3dufSBmcm9tICcuLi92dWUvZHJvcGRvd24udnVlJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIEZpbGV9IGZyb20gJy4uL3Z1ZS9maWxlLnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBNYXRyaXhEcm9wZG93bn0gZnJvbSAnLi4vdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBFcnJvcnN9IGZyb20gJy4uL3Z1ZS9lcnJvcnMudnVlJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIEh0bWx9IGZyb20gJy4uL3Z1ZS9odG1sLnZ1ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBNYXRyaXhEeW5hbWljfSBmcm9tICcuLi92dWUvbWF0cml4ZHluYW1pYy52dWUnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgUHJvZ3Jlc3N9IGZyb20gJy4uL3Z1ZS9wcm9ncmVzcy52dWUnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgUGFuZWx9IGZyb20gJy4uL3Z1ZS9wYW5lbC52dWUnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgUm93fSBmcm9tICcuLi92dWUvcm93LnZ1ZSc7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL3Z1ZS50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/0.12.8/survey.vue.min.js b/0.12.8/survey.vue.min.js new file mode 100644 index 00000000..96553d15 --- /dev/null +++ b/0.12.8/survey.vue.min.js @@ -0,0 +1,25 @@ +/*! + * surveyjs - Survey JavaScript library v0.12.8 + * Copyright (c) 2015-2017 Devsoft Baltic OÜ - http://surveyjs.org/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define("Survey",["vue"],t):"object"==typeof exports?exports.Survey=t(require("vue")):e.Survey=t(e.Vue)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=124)}([function(e,t,r){"use strict";function n(e,t){function r(){this.constructor=e}for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}r.d(t,"a",function(){return o}),t.b=n,r.d(t,"c",function(){return i});var o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,r,s):o(t,r))||s);return i>3&&s&&Object.defineProperty(t,r,s),s}},function(e,t,r){"use strict";r.d(t,"a",function(){return n}),r.d(t,"b",function(){return o});var n={currentLocale:"",locales:{},getString:function(e){var t=this.currentLocale?this.locales[this.currentLocale]:o;return t&&t[e]||(t=o),t[e]},getLocales:function(){var e=[];e.push("");for(var t in this.locales)e.push(t);return e.sort(),e}},o={pagePrevText:"Previous",pageNextText:"Next",completeText:"Complete",otherItemText:"Other (describe)",progressText:"Page {0} of {1}",emptySurvey:"There is no visible page or question in the survey.",completingSurvey:"Thank you for completing the survey!",loadingSurvey:"Survey is loading...",optionsCaption:"Choose...",requiredError:"Please answer the question.",requiredInAllRowsError:"Please answer questions in all rows.",numericError:"The value should be numeric.",textMinLength:"Please enter at least {0} symbols.",textMaxLength:"Please enter less than {0} symbols.",textMinMaxLength:"Please enter more than {0} and less than {1} symbols.",minRowCountError:"Please fill in at least {0} rows.",minSelectError:"Please select at least {0} variants.",maxSelectError:"Please select no more than {0} variants.",numericMinMax:"The '{0}' should be equal or more than {1} and equal or less than {2}",numericMin:"The '{0}' should be equal or more than {1}",numericMax:"The '{0}' should be equal or less than {1}",invalidEmail:"Please enter a valid e-mail address.",urlRequestError:"The request returned error '{0}'. {1}",urlGetChoicesError:"The request returned empty data or the 'path' property is incorrect",exceedMaxSize:"The file size should not exceed {0}.",otherRequiredError:"Please enter the other value.",uploadingFile:"Your file is uploading. Please wait several seconds and try again.",addRow:"Add row",removeRow:"Remove",choices_firstItem:"first item",choices_secondItem:"second item",choices_thirdItem:"third item",matrix_column:"Column",matrix_row:"Row"};n.locales.en=o,String.prototype.format||(String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,function(t,r){return void 0!==e[r]?e[r]:t})})},function(t,r){t.exports=e},function(e,t,r){"use strict";var n=r(0);r.d(t,"h",function(){return o}),r.d(t,"e",function(){return i}),r.d(t,"d",function(){return s}),r.d(t,"b",function(){return a}),r.d(t,"j",function(){return u}),r.d(t,"g",function(){return l}),r.d(t,"f",function(){return c}),r.d(t,"c",function(){return p}),r.d(t,"i",function(){return h}),r.d(t,"a",function(){return d});var o=function(){function e(e){this.name=e,this.typeValue=null,this.choicesValue=null,this.choicesfunc=null,this.className=null,this.alternativeName=null,this.classNamePart=null,this.baseClassName=null,this.defaultValue=null,this.readOnly=!1,this.visible=!0,this.isLocalizable=!1,this.serializationProperty=null,this.onGetValue=null}return Object.defineProperty(e.prototype,"type",{get:function(){return this.typeValue?this.typeValue:"string"},set:function(e){this.typeValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasToUseGetValue",{get:function(){return this.onGetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.isDefaultValue=function(e){return this.defaultValue?this.defaultValue==e:!e},e.prototype.getValue=function(e){return this.onGetValue?this.onGetValue(e):this.serializationProperty?e[this.serializationProperty].getJson():e[this.name]},e.prototype.getPropertyValue=function(e){return this.isLocalizable?e[this.serializationProperty].text:this.getValue(e)},Object.defineProperty(e.prototype,"hasToUseSetValue",{get:function(){return this.onSetValue||this.serializationProperty},enumerable:!0,configurable:!0}),e.prototype.setValue=function(e,t,r){this.onSetValue?this.onSetValue(e,t,r):this.serializationProperty?e[this.serializationProperty].setJson(t):e[this.name]=t},e.prototype.getObjType=function(e){return this.classNamePart?e.replace(this.classNamePart,""):e},e.prototype.getClassName=function(e){return this.classNamePart&&e.indexOf(this.classNamePart)<0?e+this.classNamePart:e},Object.defineProperty(e.prototype,"choices",{get:function(){return null!=this.choicesValue?this.choicesValue:null!=this.choicesfunc?this.choicesfunc():null},enumerable:!0,configurable:!0}),e.prototype.setChoices=function(e,t){this.choicesValue=e,this.choicesfunc=t},e}(),i=function(){function e(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null),this.name=e,this.creator=r,this.parentName=n,this.properties=null,this.requiredProperties=null,this.properties=new Array;for(var o=0;o-1&&(n=r.substring(i+1),r=r.substring(0,i)),r=this.getPropertyName(r);var s=new o(r);if(n&&(s.type=n),"object"==typeof t){if(t.type&&(s.type=t.type),t.default&&(s.defaultValue=t.default),!1===t.visible&&(s.visible=!1),t.isRequired&&this.makePropertyRequired(s.name),t.choices){var a="function"==typeof t.choices?t.choices:null,u="function"!=typeof t.choices?t.choices:null;s.setChoices(u,a)}if(t.onGetValue&&(s.onGetValue=t.onGetValue),t.onSetValue&&(s.onSetValue=t.onSetValue),t.serializationProperty){s.serializationProperty=t.serializationProperty;s.serializationProperty&&0==s.serializationProperty.indexOf("loc")&&(s.isLocalizable=!0)}t.isLocalizable&&(s.isLocalizable=t.isLocalizable),t.className&&(s.className=t.className),t.baseClassName&&(s.baseClassName=t.baseClassName),t.classNamePart&&(s.classNamePart=t.classNamePart),t.alternativeName&&(s.alternativeName=t.alternativeName)}return s}},e.prototype.getPropertyName=function(t){return 0==t.length||t[0]!=e.requiredSymbol?t:(t=t.slice(1),this.makePropertyRequired(t),t)},e.prototype.makePropertyRequired=function(e){this.requiredProperties||(this.requiredProperties=new Array),this.requiredProperties.push(e)},e}();i.requiredSymbol="!",i.typeSymbol=":";var s=function(){function e(){this.classes={},this.childrenClasses={},this.classProperties={},this.classRequiredProperties={}}return e.prototype.addClass=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var o=new i(e,t,r,n);if(this.classes[e]=o,n){this.childrenClasses[n]||(this.childrenClasses[n]=[]),this.childrenClasses[n].push(o)}return o},e.prototype.overrideClassCreatore=function(e,t){var r=this.findClass(e);r&&(r.creator=t)},e.prototype.getProperties=function(e){var t=this.classProperties[e];return t||(t=new Array,this.fillProperties(e,t),this.classProperties[e]=t),t},e.prototype.findProperty=function(e,t){for(var r=this.getProperties(e),n=0;n=0&&e.requiredProperties.splice(r,1))},e.prototype.emptyClassPropertiesHash=function(e){this.classProperties[e.name]=null;for(var t=this.getChildrenClasses(e.name),r=0;r0&&(n.description+=", "),n.description+=o[i].name;n.description+="."}return n}return n.b(t,e),t}(a),l=function(e){function t(t,r,n){var o=e.call(this,r,n)||this;o.baseClassName=t,o.type=r,o.message=n,o.description="The following types are available: ";for(var i=d.metaData.getChildrenClasses(t,!0),s=0;s0&&(o.description+=", "),o.description+="'"+i[s].name+"'";return o.description+=".",o}return n.b(t,e),t}(a),c=function(e){function t(t,r){var n=e.call(this,r,"missingtypeproperty","The property type is missing in the object. Please take a look at property: '"+t+"'.")||this;return n.propertyName=t,n.baseClassName=r,n}return n.b(t,e),t}(l),p=function(e){function t(t,r){var n=e.call(this,r,"incorrecttypeproperty","The property type is incorrect in the object. Please take a look at property: '"+t+"'.")||this;return n.propertyName=t,n.baseClassName=r,n}return n.b(t,e),t}(l),h=function(e){function t(t,r){var n=e.call(this,"requiredproperty","The property '"+t+"' is required in class '"+r+"'.")||this;return n.propertyName=t,n.className=r,n}return n.b(t,e),t}(a),d=function(){function e(){this.errors=new Array}return Object.defineProperty(e,"metaData",{get:function(){return e.metaDataValue},enumerable:!0,configurable:!0}),e.prototype.toJsonObject=function(e){return this.toJsonObjectCore(e,null)},e.prototype.toObject=function(t,r){if(t){var n=null;if(r.getType&&(n=e.metaData.getProperties(r.getType())),n)for(var o in t)if(o!=e.typePropertyName)if(o!=e.positionPropertyName){var i=this.findProperty(n,o);i?this.valueToObj(t[o],r,o,i):this.addNewError(new u(o.toString(),r.getType()),t)}else r[o]=t[o]}},e.prototype.toJsonObjectCore=function(t,r){if(!t.getType)return t;var n={};null==r||r.className||(n[e.typePropertyName]=r.getObjType(t.getType()));for(var o=e.metaData.getProperties(t.getType()),i=0;i0?o:null}else n=this.toJsonObjectCore(n,r);r.isDefaultValue(n)||(t[r.name]=n)}},e.prototype.valueToObj=function(e,t,r,n){if(null!=e){if(null!=n&&n.hasToUseSetValue)return void n.setValue(t,e,this);if(this.isValueArray(e))return void this.valueToArray(e,t,n.name,n);var o=this.createNewObj(e,n);o.newObj&&(this.toObject(e,o.newObj),e=o.newObj),o.error||(t[n.name]=e)}},e.prototype.isValueArray=function(e){return e&&Array.isArray(e)},e.prototype.createNewObj=function(t,r){var n={newObj:null,error:null},o=t[e.typePropertyName];return!o&&null!=r&&r.className&&(o=r.className),o=r.getClassName(o),n.newObj=o?e.metaData.createClass(o):null,n.error=this.checkNewObjectOnErrors(n.newObj,t,r,o),n},e.prototype.checkNewObjectOnErrors=function(t,r,n,o){var i=null;if(t){var s=e.metaData.getRequiredProperties(o);if(s)for(var a=0;a0&&t[r].splice(0,t[r].length);for(var o=0;o0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return this.errors.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"requiredText",{get:function(){return null!=this.survey&&this.isRequired?this.survey.requiredText:""},enumerable:!0,configurable:!0}),t.prototype.addError=function(e){this.errors.push(e),this.fireCallback(this.errorsChangedCallback)},t.prototype.checkForErrors=function(e){var t=this.errors?this.errors.length:0;if(this.errors=[],this.onCheckForErrors(this.errors),0==this.errors.length&&this.value){var r=this.runValidators();r&&this.errors.push(r)}if(this.survey&&0==this.errors.length){var r=this.survey.validateQuestion(this.name);r&&this.errors.push(r)}e&&(t!=this.errors.length||t>0)&&this.fireCallback(this.errorsChangedCallback)},t.prototype.onCheckForErrors=function(e){this.hasRequiredError()&&this.errors.push(new u.d)},t.prototype.hasRequiredError=function(){return this.isRequired&&this.isEmpty()},t.prototype.runValidators=function(){return(new l.h).run(this)},t.prototype.setNewValue=function(e){this.setNewValueInData(e),this.onValueChanged()},t.prototype.setNewValueInData=function(e){this.isValueChangedInSurvey||(e=this.valueToData(e),this.setValueCore(e))},t.prototype.getValueCore=function(){return null!=this.data?this.data.getValue(this.name):this.questionValue},t.prototype.setValueCore=function(e){null!=this.data?this.data.setValue(this.name,e):this.questionValue=e},t.prototype.valueFromData=function(e){return e},t.prototype.valueToData=function(e){return e},t.prototype.onValueChanged=function(){},t.prototype.setNewComment=function(e){null!=this.data?this.data.setComment(this.name,e):this.questionComment=e},t.prototype.onSurveyValueChanged=function(e){this.isValueChangedInSurvey=!0,this.value=this.valueFromData(e),this.fireCallback(this.commentChangedCallback),this.isValueChangedInSurvey=!1},t.prototype.getValidatorTitle=function(){return null},t}(i.a);o.a.metaData.addClass("question",[{name:"title:text",serializationProperty:"locTitle"},{name:"commentText",serializationProperty:"locCommentText"},"isRequired:boolean","readOnly:boolean",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"}],null,"questionbase")},function(e,t,r){"use strict";r.d(t,"a",function(){return n}),r.d(t,"b",function(){return o});var n={currentType:"",getCss:function(){var e=this.currentType?this[this.currentType]:o;return e||(e=o),e}},o={root:"sv_main",header:"",body:"sv_body",footer:"sv_nav",navigationButton:"",navigation:{complete:"",prev:"",next:""},progress:"sv_progress",progressBar:"",pageTitle:"sv_p_title",row:"sv_row",question:{root:"sv_q",title:"sv_q_title",comment:"",indent:20},error:{root:"sv_q_erbox",icon:"",item:""},checkbox:{root:"sv_qcbc",item:"sv_q_checkbox",other:"sv_q_other"},comment:"",dropdown:{root:"",control:""},matrix:{root:"sv_q_matrix"},matrixdropdown:{root:"sv_q_matrix"},matrixdynamic:{root:"table",button:""},multipletext:{root:"",itemTitle:"",itemValue:""},radiogroup:{root:"sv_qcbc",item:"sv_q_radiogroup",label:"",other:"sv_q_other"},rating:{root:"sv_q_rating",item:"sv_q_rating_item"},text:"",window:{root:"sv_window",body:"sv_window_content",header:{root:"sv_window_title",title:"",button:"",buttonExpanded:"",buttonCollapsed:""}}};n.standard=o},function(e,t,r){"use strict";var n=r(8);r.d(t,"a",function(){return o});var o=function(){function e(e,t){void 0===t&&(t=null),this.locTextValue=new n.a(null),t&&(this.locText.text=t),this.value=e}return e.createArray=function(t){var r=[];return e.setupArray(r,t),r},e.setupArray=function(e,t){e.push=function(e){var r=Array.prototype.push.call(this,e);return e.locOwner=t,r},e.splice=function(e,r){for(var n=[],o=2;o-1&&(this.itemValue=r.slice(0,n),this.text=r.slice(n+1))}},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasText",{get:function(){return!!this.locText.text},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.hasText?this.locText.text:this.value?this.value.toString():null},set:function(e){this.locText.text=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(t){if(void 0!==t.value){var r=null;this.isObjItemValue(t)&&(t.itemValue=t.itemValue,this.locText.setJson(t.locText.getJson()),r=e.itemValueProp),this.copyAttributes(t,r)}else this.value=t},e.prototype.isObjItemValue=function(e){return void 0!==e.getType&&"itemvalue"==e.getType()},e.prototype.copyAttributes=function(e,t){for(var r in e)"function"!=typeof e[r]&&(t&&t.indexOf(r)>-1||("text"==r?this.locText.setJson(e[r]):this[r]=e[r]))},e}();o.Separator="|",o.itemValueProp=["text","value","hasText","locOwner","locText"]},function(e,t,r){"use strict";var n=r(0),o=r(3),i=r(11),s=r(13),a=r(1),u=r(10),l=r(16),c=r(8);r.d(t,"b",function(){return p}),r.d(t,"a",function(){return h});var p=function(e){function t(t){var r=e.call(this,t)||this;r.visibleChoicesCache=null,r.otherItemValue=new s.a("other",a.a.getString("otherItemText")),r.choicesFromUrl=null,r.cachedValueForUrlRequestion=null,r.storeOthersAsComment=!0,r.choicesOrderValue="none",r.isSettingComment=!1,r.choicesValues=s.a.createArray(r),r.choicesByUrl=r.createRestfull(),r.locOtherTextValue=new c.a(r),r.locOtherErrorTextValue=new c.a(r);var n=r;return r.choicesByUrl.getResultCallback=function(e){n.onLoadChoicesFromUrl(e)},r}return n.b(t,e),Object.defineProperty(t.prototype,"otherItem",{get:function(){return this.otherItemValue.text=this.otherText?this.otherText:a.a.getString("otherItemText"),this.otherItemValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.getStoreOthersAsComment()?this.getHasOther(this.value):this.getHasOther(this.cachedValue)},enumerable:!0,configurable:!0}),t.prototype.getHasOther=function(e){return e==this.otherItem.value},t.prototype.createRestfull=function(){return new l.a},t.prototype.getComment=function(){return this.getStoreOthersAsComment()?e.prototype.getComment.call(this):this.commentValue},t.prototype.setComment=function(t){this.getStoreOthersAsComment()?e.prototype.setComment.call(this,t):this.isSettingComment||t==this.commentValue||(this.isSettingComment=!0,this.commentValue=t,this.isOtherSelected&&this.setNewValueInData(this.cachedValue),this.isSettingComment=!1)},t.prototype.setNewValue=function(t){t&&(this.cachedValueForUrlRequestion=t),e.prototype.setNewValue.call(this,t)},t.prototype.valueFromData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueFromData.call(this,t):(this.cachedValue=this.valueFromDataCore(t),this.cachedValue)},t.prototype.valueToData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueToData.call(this,t):(this.cachedValue=t,this.valueToDataCore(t))},t.prototype.valueFromDataCore=function(e){return this.hasUnknownValue(e)?e==this.otherItem.value?e:(this.comment=e,this.otherItem.value):e},t.prototype.valueToDataCore=function(e){return e==this.otherItem.value&&this.getComment()&&(e=this.getComment()),e},t.prototype.hasUnknownValue=function(e){if(!e)return!1;for(var t=this.activeChoices,r=0;r0||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback);var r=null;e&&e.length>0&&(r=new Array,s.a.setData(r,e)),this.choicesFromUrl=r,this.onVisibleChoicesChanged(),this.cachedValueForUrlRequestion&&(this.value=this.cachedValueForUrlRequestion)},t.prototype.onVisibleChoicesChanged=function(){this.visibleChoicesCache=null,this.fireCallback(this.choicesChangedCallback)},t.prototype.sortVisibleChoices=function(e){var t=this.choicesOrder.toLowerCase();return"asc"==t?this.sortArray(e,1):"desc"==t?this.sortArray(e,-1):"random"==t?this.randomizeArray(e):e},t.prototype.sortArray=function(e,t){return e.sort(function(e,r){return e.textr.text?1*t:0})},t.prototype.randomizeArray=function(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e},t.prototype.clearUnusedValues=function(){e.prototype.clearUnusedValues.call(this),this.isOtherSelected||(this.comment=null)},t}(i.a),h=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.colCountValue=1,r}return n.b(t,e),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<0||e>4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t}(p);o.a.metaData.addClass("selectbase",["hasComment:boolean","hasOther:boolean",{name:"choices:itemvalues",onGetValue:function(e){return s.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"otherText",serializationProperty:"locOtherText"},{name:"otherErrorText",serializationProperty:"locOtherErrorText"},{name:"storeOthersAsComment:boolean",default:!0}],null,"question"),o.a.metaData.addClass("checkboxbase",[{name:"colCount:number",default:1,choices:[0,1,2,3,4]}],null,"selectbase")},function(e,t,r){"use strict";var n=r(25),o=r(17);r.d(t,"b",function(){return i}),r.d(t,"c",function(){return s}),r.d(t,"a",function(){return a});var i=function(){function e(){this.opValue="equal"}return Object.defineProperty(e,"operators",{get:function(){return null!=e.operatorsValue?e.operatorsValue:(e.operatorsValue={empty:function(e,t){return!e},notempty:function(e,t){return!!e},equal:function(e,t){return e==t},notequal:function(e,t){return e!=t},contains:function(e,t){return e&&e.indexOf&&e.indexOf(t)>-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},e.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"operator",{get:function(){return this.opValue},set:function(t){t&&(t=t.toLowerCase(),e.operators[t]&&(this.opValue=t))},enumerable:!0,configurable:!0}),e.prototype.perform=function(t,r){return void 0===t&&(t=null),void 0===r&&(r=null),t||(t=this.left),r||(r=this.right),e.operators[this.operator](this.getPureValue(t),this.getPureValue(r))},e.prototype.getPureValue=function(e){if(!e||"string"!=typeof e)return e;e.length>0&&("'"==e[0]||'"'==e[0])&&(e=e.substr(1));var t=e.length;return t>0&&("'"==e[t-1]||'"'==e[t-1])&&(e=e.substr(0,t-1)),e},e}();i.operatorsValue=null;var s=function(){function e(){this.connectiveValue="and",this.children=[]}return Object.defineProperty(e.prototype,"connective",{get:function(){return this.connectiveValue},set:function(e){e&&(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e||(this.connectiveValue=e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0==this.children.length},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.children=[],this.connective="and"},e}(),a=function(){function e(e){this.root=new s,this.expression=e,this.processValue=new o.a}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,(new n.a).parse(this.expressionValue,this.root))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){return this.values=e,this.runNode(this.root)},e.prototype.runNode=function(e){for(var t="and"==e.connective,r=0;r-1?this.path.split(";"):this.path.split(","),0==e.length&&e.push(this.path),e},t.prototype.getValue=function(e){return this.valueName?e[this.valueName]:Object.keys(e).length<1?null:e[Object.keys(e)[0]]},t.prototype.getTitle=function(e){return this.titleName?e[this.titleName]:null},t}(o.b);s.a.metaData.addClass("choicesByUrl",["url","path","valueName","titleName"],function(){return new l})},function(e,t,r){"use strict";r.d(t,"a",function(){return n});var n=function(){function e(){}return e.prototype.getFirstName=function(e){if(!e)return e;for(var t="",r=0;r0;){if(!o&&"["==e[0]){if(!Array.isArray(n))return r;for(var i=1,s="";i=n.length)return r;n=n[i]}else{o||(e=e.substr(1));var a=this.getFirstName(e);if(!a)return r;if(!n[a])return r;n=n[a],e=e.substr(a.length)}o=!1}return r.value=n,r.hasValue=!0,r},e.prototype.getIntValue=function(e){return"0"==e||(0|e)>0&&e%1==0?Number(e):-1},e}()},function(e,t,r){"use strict";var n=r(0),o=r(3),i=r(11),s=r(6),a=r(13),u=r(1),l=r(14),c=r(16),p=r(7),h=r(8);r.d(t,"b",function(){return d}),r.d(t,"a",function(){return f}),r.d(t,"c",function(){return m}),r.d(t,"d",function(){return v});var d=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this)||this;return n.name=t,n.isRequired=!1,n.hasOther=!1,n.minWidth="",n.cellType="default",n.inputType="text",n.choicesOrder="none",n.locOwner=null,n.colCountValue=-1,n.choicesValue=a.a.createArray(n),n.locTitleValue=new h.a(n),n.locOptionsCaptionValue=new h.a(n),n.locPlaceHolderValue=new h.a(n),n.choicesByUrl=new c.a,n}return n.b(t,e),t.prototype.getType=function(){return"matrixdropdowncolumn"},Object.defineProperty(t.prototype,"title",{get:function(){return this.locTitle.text?this.locTitle.text:this.name},set:function(e){this.locTitle.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.locTitleValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<-1||e>4||(this.colCountValue=e)},enumerable:!0,configurable:!0}),t.prototype.getLocale=function(){return this.locOwner?this.locOwner.getLocale():""},t}(s.b),f=function(){function e(e,t,r){this.column=e,this.row=t,this.questionValue=r.createQuestion(this.row,this.column),this.questionValue.setData(t)}return Object.defineProperty(e.prototype,"question",{get:function(){return this.questionValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.question.value},set:function(e){this.question.value=e},enumerable:!0,configurable:!0}),e}(),m=function(){function e(t,r){this.rowValues={},this.rowComments={},this.isSettingValue=!1,this.cells=[],this.data=t,this.value=r,this.idValue=e.getId(),this.buildCells()}return e.getId=function(){return"srow_"+e.idCounter++},Object.defineProperty(e.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowName",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.rowValues},set:function(e){if(this.isSettingValue=!0,this.rowValues={},null!=e)for(var t in e)this.rowValues[t]=e[t];for(var r=0;r4||(this.columnColCountValue=e,this.fireCallback(this.updateCellsCallbak))},enumerable:!0,configurable:!0}),t.prototype.getColumnTitle=function(e){var t=e.title;if(e.isRequired&&this.survey){var r=this.survey.requiredText;r&&(r+=" "),t=r+t}return t},t.prototype.getColumnWidth=function(e){return e.minWidth?e.minWidth:this.columnMinWidth},Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){a.a.setData(this.choicesValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.locOptionsCaption.text?this.locOptionsCaption.text:u.a.getString("optionsCaption")},set:function(e){this.locOptionsCaption.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.locOptionsCaptionValue},enumerable:!0,configurable:!0}),t.prototype.addColumn=function(e,t){void 0===t&&(t=null);var r=new d(e,t);return this.columnsValue.push(r),r},Object.defineProperty(t.prototype,"visibleRows",{get:function(){return this.generatedVisibleRows=this.generateRows(),this.generatedVisibleRows},enumerable:!0,configurable:!0}),t.prototype.generateRows=function(){return null},t.prototype.createMatrixRow=function(e,t,r){return null},t.prototype.createNewValue=function(e){return e||{}},t.prototype.getRowValue=function(e,t,r){void 0===r&&(r=!1);var n=t[e.rowName]?t[e.rowName]:null;return!n&&r&&(n={},t[e.rowName]=n),n},t.prototype.onBeforeValueChanged=function(e){},t.prototype.onValueChanged=function(){if(!this.isRowChanging&&(this.onBeforeValueChanged(this.value),this.generatedVisibleRows&&0!=this.generatedVisibleRows.length)){this.isRowChanging=!0;for(var e=this.createNewValue(this.value),t=0;t0)return r[n].question}return null},t.prototype.createQuestion=function(e,t){var r=this.createQuestionCore(e,t);return r.name=t.name,r.isRequired=t.isRequired,r.hasOther=t.hasOther,r.readOnly=this.readOnly,r.setData(this.survey),t.hasOther&&r instanceof l.b&&(r.storeOthersAsComment=!1),r},t.prototype.createQuestionCore=function(e,t){var r="default"==t.cellType?this.cellType:t.cellType,n=this.getQuestionName(e,t);return"checkbox"==r?this.createCheckbox(n,t):"radiogroup"==r?this.createRadiogroup(n,t):"text"==r?this.createText(n,t):"comment"==r?this.createComment(n,t):this.createDropdown(n,t)},t.prototype.getQuestionName=function(e,t){return e.rowName+"_"+t.name},t.prototype.getColumnChoices=function(e){return e.choices&&e.choices.length>0?e.choices:this.choices},t.prototype.getColumnOptionsCaption=function(e){return e.optionsCaption?e.optionsCaption:this.optionsCaption},t.prototype.createDropdown=function(e,t){var r=this.createCellQuestion("dropdown",e);return this.setSelectBaseProperties(r,t),r.optionsCaption=this.getColumnOptionsCaption(t),r},t.prototype.createCheckbox=function(e,t){var r=this.createCellQuestion("checkbox",e);return this.setSelectBaseProperties(r,t),r.colCount=t.colCount>-1?t.colCount:this.columnColCount,r},t.prototype.createRadiogroup=function(e,t){var r=this.createCellQuestion("radiogroup",e);return this.setSelectBaseProperties(r,t),r.colCount=t.colCount>-1?t.colCount:this.columnColCount,r},t.prototype.setSelectBaseProperties=function(e,t){e.choicesOrder=t.choicesOrder,e.choices=this.getColumnChoices(t),e.choicesByUrl.setData(t.choicesByUrl),e.choicesByUrl.isEmpty||e.choicesByUrl.run()},t.prototype.createText=function(e,t){var r=this.createCellQuestion("text",e);return r.inputType=t.inputType,r.placeHolder=t.placeHolder,r},t.prototype.createComment=function(e,t){var r=this.createCellQuestion("comment",e);return r.placeHolder=t.placeHolder,r},t.prototype.createCellQuestion=function(e,t){return p.a.Instance.createQuestion(e,t)},t.prototype.deleteRowValue=function(e,t){return delete e[t.rowName],0==Object.keys(e).length?null:e},t.prototype.onRowChanged=function(e,t){var r=this.createNewValue(this.value),n=this.getRowValue(e,r,!0);for(var o in n)delete n[o];if(t){t=JSON.parse(JSON.stringify(t));for(var o in t)n[o]=t[o]}0==Object.keys(n).length&&(r=this.deleteRowValue(r,e)),this.isRowChanging=!0,this.setNewValue(r),this.isRowChanging=!1},t}(i.a);o.a.metaData.addClass("matrixdropdowncolumn",["name",{name:"title",serializationProperty:"locTitle"},{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"default",choices:["default","dropdown","checkbox","radiogroup","text","comment"]},{name:"colCount",default:-1,choices:[-1,0,1,2,3,4]},"isRequired:boolean","hasOther:boolean","minWidth",{name:"placeHolder",serializationProperty:"locPlaceHolder"},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]}],function(){return new d("")}),o.a.metaData.addClass("matrixdropdownbase",[{name:"columns:matrixdropdowncolumns",className:"matrixdropdowncolumn"},"horizontalScroll:boolean",{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"dropdown",choices:["dropdown","checkbox","radiogroup","text","comment"]},{name:"columnColCount",default:0,choices:[0,1,2,3,4]},"columnMinWidth"],function(){return new v("")},"question")},function(e,t,r){"use strict";var n=r(0),o=r(6),i=r(3),s=r(15);r.d(t,"a",function(){return a});var a=function(e){function t(r){var n=e.call(this)||this;return n.name=r,n.conditionRunner=null,n.visibleIf="",n.visibleValue=!0,n.startWithNewLineValue=!0,n.visibleIndexValue=-1,n.width="",n.renderWidthValue="",n.rightIndentValue=0,n.indent=0,n.idValue=t.getQuestionId(),n.onCreating(),n}return n.b(t,e),t.getQuestionId=function(){return"sq_"+t.questionCounter++},Object.defineProperty(t.prototype,"isPanel",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this.visibleValue},set:function(e){e!=this.visible&&(this.visibleValue=e,this.fireCallback(this.visibilityChangedCallback),this.fireCallback(this.rowVisibilityChangedCallback),this.survey&&this.survey.questionVisibilityChanged(this,this.visible))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isVisible",{get:function(){return this.visible||this.survey&&this.survey.isDesignMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isReadOnly",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleIndex",{get:function(){return this.visibleIndexValue},enumerable:!0,configurable:!0}),t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),!1},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasInput",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasComment",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.idValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startWithNewLine",{get:function(){return this.startWithNewLineValue},set:function(e){this.startWithNewLine!=e&&(this.startWithNewLineValue=e,this.startWithNewLineChangedCallback&&this.startWithNewLineChangedCallback())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderWidth",{get:function(){return this.renderWidthValue},set:function(e){e!=this.renderWidth&&(this.renderWidthValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rightIndent",{get:function(){return this.rightIndentValue},set:function(e){e!=this.rightIndent&&(this.rightIndentValue=e,this.fireCallback(this.renderWidthChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.focus=function(e){void 0===e&&(e=!1)},t.prototype.setData=function(e){this.data=e,e&&e.questionAdded&&(this.surveyValue=e),this.onSetData()},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),t.prototype.fireCallback=function(e){e&&e()},t.prototype.onSetData=function(){},t.prototype.onCreating=function(){},t.prototype.runCondition=function(e){this.visibleIf&&(this.conditionRunner||(this.conditionRunner=new s.a(this.visibleIf)),this.conditionRunner.expression=this.visibleIf,this.visible=this.conditionRunner.run(e))},t.prototype.onSurveyValueChanged=function(e){},t.prototype.onSurveyLoad=function(){},t.prototype.setVisibleIndex=function(e){this.visibleIndexValue!=e&&(this.visibleIndexValue=e,this.fireCallback(this.visibleIndexChangedCallback))},t.prototype.supportGoNextPageAutomatic=function(){return!1},t.prototype.clearUnusedValues=function(){},t.prototype.onLocaleChanged=function(){},t.prototype.getLocale=function(){return this.data?this.data.getLocale():""},t}(o.b);a.questionCounter=100,i.a.metaData.addClass("questionbase",["!name",{name:"visible:boolean",default:!0},"visibleIf:expression",{name:"width"},{name:"startWithNewLine:boolean",default:!0},{name:"indent:number",default:0,choices:[0,1,2,3]}])},function(e,t,r){"use strict";var n=r(0),o=r(3),i=r(6),s=r(27),a=r(21),u=r(17),l=r(26),c=r(1),p=r(10),h=r(29),d=r(8);r.d(t,"a",function(){return f});var f=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this)||this;r.surveyId=null,r.surveyPostId=null,r.clientId=null,r.cookieName=null,r.sendResultOnPageNext=!1,r.commentPrefix="-Comment",r.focusFirstQuestionAutomatic=!0,r.showNavigationButtons=!0,r.showTitle=!0,r.showPageTitles=!0,r.showCompletedPage=!0,r.requiredText="*",r.questionStartIndex="",r.showProgressBar="off",r.storeOthersAsComment=!0,r.goNextPageAutomatic=!1,r.pages=new Array,r.triggers=new Array,r.clearInvisibleValues=!1,r.currentPageValue=null,r.valuesHash={},r.variablesHash={},r.showPageNumbersValue=!1,r.showQuestionNumbersValue="on",r.questionTitleLocationValue="top",r.localeValue="",r.isCompleted=!1,r.isLoading=!1,r.processedTextValues={},r.isValidatingOnServerValue=!1,r.modeValue="edit",r.isDesignModeValue=!1,r.onComplete=new i.a,r.onPartialSend=new i.a,r.onCurrentPageChanged=new i.a,r.onValueChanged=new i.a,r.onVisibleChanged=new i.a,r.onPageVisibleChanged=new i.a,r.onQuestionAdded=new i.a,r.onQuestionRemoved=new i.a,r.onPanelAdded=new i.a,r.onPanelRemoved=new i.a,r.onValidateQuestion=new i.a,r.onProcessHtml=new i.a,r.onSendResult=new i.a,r.onGetResult=new i.a,r.onUploadFile=new i.a,r.onAfterRenderSurvey=new i.a,r.onAfterRenderPage=new i.a,r.onAfterRenderQuestion=new i.a,r.onAfterRenderPanel=new i.a,r.jsonErrors=null,r.isLoadingFromJsonValue=!1,r.locTitleValue=new d.a(r),r.locCompletedHtmlValue=new d.a(r),r.locPagePrevTextValue=new d.a(r),r.locPageNextTextValue=new d.a(r),r.locCompleteTextValue=new d.a(r),r.locQuestionTitleTemplateValue=new d.a(r);var n=r;return r.textPreProcessor=new a.a,r.textPreProcessor.onHasValue=function(e){return n.hasProcessedTextValue(e)},r.textPreProcessor.onProcess=function(e){return n.getProcessedTextValue(e)},r.pages.push=function(e){return e.data=n,Array.prototype.push.call(this,e)},r.triggers.push=function(e){return e.setOwner(n),Array.prototype.push.call(this,e)},r.updateProcessedTextValues(),r.onBeforeCreating(),t&&(r.setJsonObject(t),r.surveyId&&r.loadSurveyFromService(r.surveyId)),r.onCreating(),r}return n.b(t,e),t.prototype.getType=function(){return"survey"},Object.defineProperty(t.prototype,"locale",{get:function(){return this.localeValue},set:function(e){this.localeValue=e,c.a.currentLocale=e;for(var t=0;t0&&(e[t]=this.valuesHash[t]);return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visiblePages",{get:function(){if(this.isDesignMode)return this.pages;for(var e=new Array,t=0;t0&&(this.currentPage=e[0]),this.currentPageValue},set:function(e){var t=this.visiblePages;if(!(null!=e&&t.indexOf(e)<0)&&e!=this.currentPageValue){var r=this.currentPageValue;this.currentPageValue=e,this.updateCustomWidgets(e),this.currentPageChanged(e,r)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPageNo",{get:function(){return this.visiblePages.indexOf(this.currentPage)},set:function(e){this.visiblePages;e<0||e>=this.visiblePages.length||(this.currentPage=this.visiblePages[e])},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){this.currentPageValue&&(this.currentPageValue.scrollToTop(),this.currentPageValue.focusFirstQuestion())},Object.defineProperty(t.prototype,"state",{get:function(){return this.isLoading?"loading":this.isCompleted?"completed":this.currentPage?"running":"empty"},enumerable:!0,configurable:!0}),t.prototype.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),e&&(this.data=null,this.variablesHash={}),this.isCompleted=!1,t&&this.visiblePageCount>0&&(this.currentPage=this.visiblePages[0])},t.prototype.mergeValues=function(e,t){if(t&&e)for(var r in e){var n=e[r];n&&"object"==typeof n?(t[r]||(t[r]={}),this.mergeValues(n,t[r])):t[r]=n}},t.prototype.updateCustomWidgets=function(e){if(e)for(var t=0;t-1},enumerable:!0,configurable:!0}),t.prototype.setCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT")},t.prototype.deleteCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=;")},t.prototype.nextPage=function(){return!this.isLastPage&&((!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doNextPage(),!0)))},Object.defineProperty(t.prototype,"isCurrentPageHasErrors",{get:function(){return null==this.currentPage||this.currentPage.hasErrors(!0,!0)},enumerable:!0,configurable:!0}),t.prototype.prevPage=function(){if(this.isFirstPage)return!1;var e=this.visiblePages,t=e.indexOf(this.currentPage);this.currentPage=e[t-1]},t.prototype.completeLastPage=function(){return(!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doComplete(),!0))},Object.defineProperty(t.prototype,"isFirstPage",{get:function(){return null==this.currentPage||0==this.visiblePages.indexOf(this.currentPage)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLastPage",{get:function(){if(null==this.currentPage)return!0;var e=this.visiblePages;return e.indexOf(this.currentPage)==e.length-1},enumerable:!0,configurable:!0}),t.prototype.doComplete=function(){this.clearUnusedValues(),this.setCookie(),this.setCompleted(),this.onComplete.fire(this,null),this.surveyPostId&&this.sendResult()},Object.defineProperty(t.prototype,"isValidatingOnServer",{get:function(){return this.isValidatingOnServerValue},enumerable:!0,configurable:!0}),t.prototype.setIsValidatingOnServer=function(e){e!=this.isValidatingOnServer&&(this.isValidatingOnServerValue=e,this.onIsValidatingOnServerChanged())},t.prototype.onIsValidatingOnServerChanged=function(){},t.prototype.doServerValidation=function(){if(!this.onServerValidateQuestions)return!1;for(var e=this,t={data:{},errors:{},survey:this,complete:function(){e.completeServerValidation(t)}},r=0;r"+this.getLocString("completingSurvey")+""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedLoadingHtml",{get:function(){return"

"+this.getLocString("loadingSurvey")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){if(null==this.currentPage)return"";var e=this.visiblePages,t=e.indexOf(this.currentPage)+1;return this.getLocString("progressText").format(t,e.length)},enumerable:!0,configurable:!0}),t.prototype.afterRenderSurvey=function(e){this.onAfterRenderSurvey.fire(this,{survey:this,htmlElement:e})},t.prototype.afterRenderPage=function(e){this.onAfterRenderPage.isEmpty||this.onAfterRenderPage.fire(this,{page:this.currentPage,htmlElement:e})},t.prototype.afterRenderQuestion=function(e,t){this.onAfterRenderQuestion.fire(this,{question:e,htmlElement:t})},t.prototype.afterRenderPanel=function(e,t){this.onAfterRenderPanel.fire(this,{panel:e,htmlElement:t})},t.prototype.uploadFile=function(e,t,r,n){var o=!0;return this.onUploadFile.fire(this,{name:e,file:t,accept:o}),!!o&&(!r&&this.surveyPostId&&this.uploadFileCore(e,t,n),!0)},t.prototype.uploadFileCore=function(e,t,r){var n=this;r&&r("uploading"),(new l.a).sendFile(this.surveyPostId,t,function(t,o){r&&r(t?"success":"error"),t&&n.setValue(e,o)})},t.prototype.getPage=function(e){return this.pages[e]},t.prototype.addPage=function(e){null!=e&&(this.pages.push(e),this.updateVisibleIndexes())},t.prototype.addNewPage=function(e){var t=this.createNewPage(e);return this.addPage(t),t},t.prototype.removePage=function(e){var t=this.pages.indexOf(e);t<0||(this.pages.splice(t,1),this.currentPageValue==e&&(this.currentPage=this.pages.length>0?this.pages[0]:null),this.updateVisibleIndexes())},t.prototype.getQuestionByName=function(e,t){void 0===t&&(t=!1);var r=this.getAllQuestions();t&&(e=e.toLowerCase());for(var n=0;n0&&(this.jsonErrors=t.errors),this.isLoadingFromJsonValue=!1,this.updateProcessedTextValues(),this.hasCookie&&this.doComplete(),this.doElementsOnLoad(),this.runConditions(),this.updateVisibleIndexes()}},t.prototype.onBeforeCreating=function(){},t.prototype.onCreating=function(){},t.prototype.updateProcessedTextValues=function(){this.processedTextValues={};var e=this;this.processedTextValues.pageno=function(t){return null!=e.currentPage?e.visiblePages.indexOf(e.currentPage)+1:0},this.processedTextValues.pagecount=function(t){return e.visiblePageCount};for(var t=this.getAllQuestions(),r=0;r=0;r--){var n=t[r],o=this.getName(e.substring(n.start+1,n.end));if(this.canProcessName(o)&&(!this.onHasValue||this.onHasValue(o))){var i=this.onProcess(o);null==i&&(i=""),e=e.substr(0,n.start)+i+e.substr(n.end+1)}}return e},e.prototype.getItems=function(e){for(var t=[],r=e.length,o=-1,i="",s=0;s-1){var a=new n;a.start=o,a.end=s,t.push(a)}o=-1}return t},e.prototype.getName=function(e){if(e)return e.trim()},e.prototype.canProcessName=function(e){if(!e)return!1;for(var t=0;tr.value?(r.error=new i.a(this.getErrorText(t)),r):this.maxValue&&this.maxValue0&&e.length0&&e.length>this.maxLength?new u(null,new i.a(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return this.minLength>0&&this.maxLength>0?s.a.getString("textMinMaxLength").format(this.minLength,this.maxLength):this.minLength>0?s.a.getString("textMinLength").format(this.minLength):s.a.getString("textMaxLength").format(this.maxLength)},t}(l),d=function(e){function t(t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=e.call(this)||this;return n.minCount=t,n.maxCount=r,n}return n.b(t,e),t.prototype.getType=function(){return"answercountvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),null==e||e.constructor!=Array)return null;var r=e.length;return this.minCount&&rthis.maxCount?new u(null,new i.a(this.getErrorText(s.a.getString("maxSelectError").format(this.maxCount)))):null},t.prototype.getDefaultErrorText=function(e){return e},t}(l),f=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this)||this;return r.regex=t,r}return n.b(t,e),t.prototype.getType=function(){return"regexvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),this.regex&&e?new RegExp(this.regex).test(e)?null:new u(e,new i.a(this.getErrorText(t))):null},t}(l),m=function(e){function t(){var t=e.call(this)||this;return t.re=/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,t}return n.b(t,e),t.prototype.getType=function(){return"emailvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),e?this.re.test(e)?null:new u(e,new i.a(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return s.a.getString("invalidEmail")},t}(l);a.a.metaData.addClass("surveyvalidator",["text"]),a.a.metaData.addClass("numericvalidator",["minValue:number","maxValue:number"],function(){return new p},"surveyvalidator"),a.a.metaData.addClass("textvalidator",["minLength:number","maxLength:number"],function(){return new h},"surveyvalidator"),a.a.metaData.addClass("answercountvalidator",["minCount:number","maxCount:number"],function(){return new d},"surveyvalidator"),a.a.metaData.addClass("regexvalidator",["regex"],function(){return new f},"surveyvalidator"),a.a.metaData.addClass("emailvalidator",[],function(){return new m},"surveyvalidator")},function(e,t,r){"use strict";r.d(t,"a",function(){return n});var n={methods:{getIndentSize:function(e,t){if(t<1)return"";if(!e.data)return"";var r=e.data.css;return r?t*r.question.indent+"px":""}}}},function(e,t){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function o(e){if(c===setTimeout)return setTimeout(e,0);if((c===r||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function i(e){if(p===clearTimeout)return clearTimeout(e);if((p===n||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&d&&(m=!1,d.length?f=d.concat(f):v=-1,f.length&&a())}function a(){if(!m){var e=o(s);m=!0;for(var t=f.length;t;){for(d=f,f=[];++v1)for(var r=1;r1&&(t="("+t+")"),t},e.prototype.conditionToString=function(e){if(!e.right||!e.operator)return"";var t=e.left;t&&!this.isNumeric(t)&&(t="'"+t+"'");var r=t+" "+this.operationToString(e.operator);if(this.isNoRightOperation(e.operator))return r;var n=e.right;return n&&!this.isNumeric(n)&&(n="'"+n+"'"),r+" "+n},e.prototype.operationToString=function(e){return"equal"==e?"=":"notequal"==e?"!=":"greater"==e?">":"less"==e?"<":"greaterorequal"==e?">=":"lessorequal"==e?"<=":e},e.prototype.isNumeric=function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)},e.prototype.parseText=function(){return this.node=this.root,this.expressionNodes=[],this.expressionNodes.push(this.node),this.readConditions()&&this.at>=this.length},e.prototype.readConditions=function(){var e=this.readCondition();if(!e)return e;var t=this.readConnective();return!t||(this.addConnective(t),this.readConditions())},e.prototype.readCondition=function(){var e=this.readExpression();if(e<0)return!1;if(1==e)return!0;var t=this.readString();if(!t)return!1;var r=this.readOperator();if(!r)return!1;var o=new n.b;if(o.left=t,o.operator=r,!this.isNoRightOperation(r)){var i=this.readString();if(!i)return!1;o.right=i}return this.addCondition(o),!0},e.prototype.readExpression=function(){if(this.skip(),this.at>=this.length||"("!=this.ch)return 0;this.at++,this.pushExpression();var e=this.readConditions();return e?(this.skip(),e=")"==this.ch,this.at++,this.popExpression(),1):-1},Object.defineProperty(e.prototype,"ch",{get:function(){return this.text.charAt(this.at)},enumerable:!0,configurable:!0}),e.prototype.skip=function(){for(;this.at"==e||"<"==e||"="==e||"!"==e},e.prototype.isBrackets=function(e){return"("==e||")"==e},e.prototype.readString=function(){if(this.skip(),this.at>=this.length)return null;var e=this.at,t=this.isQuotes(this.ch);t&&this.at++;for(var r=this.isOperatorChar(this.ch);this.at1&&this.isQuotes(n[0])){var o=n.length-1;this.isQuotes(n[n.length-1])&&o--,n=n.substr(1,o)}return n},e.prototype.isNoRightOperation=function(e){return"empty"==e||"notempty"==e},e.prototype.readOperator=function(){var e=this.readString();return e?(e=e.toLowerCase(),">"==e&&(e="greater"),"<"==e&&(e="less"),">="!=e&&"=>"!=e||(e="greaterorequal"),"<="!=e&&"=<"!=e||(e="lessorequal"),"="!=e&&"=="!=e||(e="equal"),"<>"!=e&&"!="!=e||(e="notequal"),"contain"==e&&(e="contains"),"notcontain"==e&&(e="notcontains"),e):null},e.prototype.readConnective=function(){var e=this.readString();return e?(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e&&(e=null),e):null},e.prototype.pushExpression=function(){var e=new n.c;this.expressionNodes.push(e),this.node=e},e.prototype.popExpression=function(){var e=this.expressionNodes.pop();this.node=this.expressionNodes[this.expressionNodes.length-1],this.node.children.push(e)},e.prototype.addCondition=function(e){this.node.children.push(e)},e.prototype.addConnective=function(e){if(this.node.children.length<2)this.node.connective=e;else if(this.node.connective!=e){var t=this.node.connective,r=this.node.children;this.node.clear(),this.node.connective=e;var o=new n.c;o.connective=t,o.children=r,this.node.children.push(o);var i=new n.c;this.node.children.push(i),this.node=i}},e}()},function(e,t,r){"use strict";r.d(t,"a",function(){return n});var n=function(){function e(){}return e.prototype.loadSurvey=function(t,r){var n=new XMLHttpRequest;n.open("GET",e.serviceUrl+"/getSurvey?surveyId="+t),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.onload=function(){var e=JSON.parse(n.response);r(200==n.status,e,n.response)},n.send()},e.prototype.sendResult=function(t,r,n,o,i){void 0===o&&(o=null),void 0===i&&(i=!1);var s=new XMLHttpRequest;s.open("POST",e.serviceUrl+"/post/"),s.setRequestHeader("Content-Type","application/json; charset=utf-8");var a={postId:t,surveyResult:JSON.stringify(r)};o&&(a.clientId=o),i&&(a.isPartialCompleted=!0);var u=JSON.stringify(a);s.onload=s.onerror=function(){n&&n(200==s.status,s.response)},s.send(u)},e.prototype.sendFile=function(t,r,n){var o=new XMLHttpRequest;o.onload=o.onerror=function(){n&&n(200==o.status,JSON.parse(o.response))},o.open("POST",e.serviceUrl+"/upload/",!0);var i=new FormData;i.append("file",r),i.append("postId",t),o.send(i)},e.prototype.getResult=function(t,r,n){var o=new XMLHttpRequest,i="resultId="+t+"&name="+r;o.open("GET",e.serviceUrl+"/getResult?"+i),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");o.onload=function(){var e=null,t=null;if(200==o.status){e=JSON.parse(o.response),t=[];for(var r in e.QuestionResult){var i={name:r,value:e.QuestionResult[r]};t.push(i)}}n(200==o.status,e,t,o.response)},o.send()},e.prototype.isCompleted=function(t,r,n){var o=new XMLHttpRequest,i="resultId="+t+"&clientId="+r;o.open("GET",e.serviceUrl+"/isCompleted?"+i),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");o.onload=function(){var e=null;200==o.status&&(e=JSON.parse(o.response)),n(200==o.status,e,o.response)},o.send()},e}();n.serviceUrl="https://dxsurveyapi.azurewebsites.net/api/Survey"},function(e,t,r){"use strict";var n=r(0),o=r(3),i=r(6),s=r(28);r.d(t,"a",function(){return a});var a=function(e){function t(t){void 0===t&&(t="");var r=e.call(this,t)||this;return r.name=t,r.numValue=-1,r.navigationButtonsVisibility="inherit",r}return n.b(t,e),t.prototype.getType=function(){return"page"},Object.defineProperty(t.prototype,"num",{get:function(){return this.numValue},set:function(e){this.numValue!=e&&(this.numValue=e,this.onNumChanged(e))},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){for(var e=0;e0},e}(),c=function(e){function t(r){void 0===r&&(r="");var n=e.call(this)||this;n.name=r,n.dataValue=null,n.rowValues=null,n.conditionRunner=null,n.elementsValue=new Array,n.isQuestionsReady=!1,n.questionsValue=new Array,n.parent=null,n.visibleIf="",n.visibleIndex=-1,n.visibleValue=!0,n.idValue=t.getPanelId(),n.locTitleValue=new u.a(n);var o=n;return n.elementsValue.push=function(e){return o.doOnPushElement(this,e)},n.elementsValue.splice=function(e,t){for(var r=[],n=2;n=e.length||i.push(e[s+t]);var a=(u=Array.prototype.splice).call.apply(u,[e,t,r].concat(n));this.markQuestionListDirty(),n||(n=[]);for(var s=0;s-1){r.updateVisible();break}}},t.prototype.buildRows=function(){for(var e=new Array,t=0;t=this.elements.length?this.elements.push(e):this.elements.splice(t,0,e))},t.prototype.addQuestion=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addPanel=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addNewQuestion=function(e,t){var r=a.a.Instance.createQuestion(e,t);return this.addQuestion(r),r},t.prototype.addNewPanel=function(e){var t=this.createNewPanel(e);return this.addPanel(t),t},t.prototype.createNewPanel=function(e){return new p(e)},t.prototype.removeElement=function(e){var t=this.elements.indexOf(e);if(t<0){for(var r=0;r0)return!0;var o=ne.get(t);return o.delete(r),o.size>0||(ne.delete(t),!0)}function d(e,t){for(var r=e.length-1;r>=0;--r){var n=e[r],o=n(t);if(!V(o)&&!T(o)){if(!N(o))throw new TypeError;t=o}}return t}function f(e,t,r,n){for(var o=e.length-1;o>=0;--o){var i=e[o],s=i(t,r,n);if(!V(s)&&!T(s)){if(!_(s))throw new TypeError;n=s}}return n}function m(e,t,r){var n=ne.get(e);if(V(n)){if(!r)return;n=new ee,ne.set(e,n)}var o=n.get(t);if(V(o)){if(!r)return;o=new ee,n.set(t,o)}return o}function v(e,t,r){if(g(e,t,r))return!0;var n=Q(t);return!T(n)&&v(e,n,r)}function g(e,t,r){var n=m(t,r,!1);return!V(n)&&q(n.has(e))}function y(e,t,r){if(g(e,t,r))return b(e,t,r);var n=Q(t);return T(n)?void 0:y(e,n,r)}function b(e,t,r){var n=m(t,r,!1);if(!V(n))return n.get(e)}function w(e,t,r,n){m(r,n,!0).set(e,t)}function x(e,t){var r=C(e,t),n=Q(e);if(null===n)return r;var o=x(n,t);if(o.length<=0)return r;if(r.length<=0)return o;for(var i=new te,s=[],a=0,u=r;a=0&&e=this._keys.length?(this._index=-1,this._keys=o,this._values=o):this._index++,{value:t,done:!1}}return{value:void 0,done:!0}},e.prototype.throw=function(e){throw this._index>=0&&(this._index=-1,this._keys=o,this._values=o),e},e.prototype.return=function(e){return this._index>=0&&(this._index=-1,this._keys=o,this._values=o),{value:e,done:!0}},e}();return function(){function o(){this._keys=[],this._values=[],this._cacheKey=n,this._cacheIndex=-2}return Object.defineProperty(o.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),o.prototype.has=function(e){return this._find(e,!1)>=0},o.prototype.get=function(e){var t=this._find(e,!1);return t>=0?this._values[t]:void 0},o.prototype.set=function(e,t){var r=this._find(e,!0);return this._values[r]=t,this},o.prototype.delete=function(e){var t=this._find(e,!1);if(t>=0){for(var r=this._keys.length,o=t+1;o0?100/e+"%":""},enumerable:!0,configurable:!0}),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-checkbox",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-comment",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-dropdown",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(i.a));n.c([s.Prop],a.prototype,"question",void 0),n.c([s.Prop],a.prototype,"css",void 0),a=n.c([s.Component],a),t.default=a,i.a.component("survey-errors",a)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t.prototype.doChange=function(e){var t=e.target||e.srcElement;window.FileReader&&(!t||!t.files||t.files.length<1||this.question.loadFile(t.files[0]))},t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-file",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(i.a));n.c([s.Prop],a.prototype,"question",void 0),n.c([s.Prop],a.prototype,"css",void 0),a=n.c([s.Component],a),t.default=a,i.a.component("survey-html",a)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-matrix",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-matrixdropdown",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),Object.defineProperty(t.prototype,"rows",{get:function(){return this.question.visibleRows},enumerable:!0,configurable:!0}),t.prototype.removeRowClick=function(e){var t=this.question.cachedVisibleRows,r=t.indexOf(e);r>-1&&this.question.removeRow(r)},t.prototype.addRowClick=function(){this.question.addRow()},t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-matrixdynamic",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-multipletext",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t}(i.a));n.c([s.Prop],a.prototype,"question",void 0),n.c([s.Prop],a.prototype,"css",void 0),a=n.c([s.Component],a),t.default=a,i.a.component("survey-other-choice",a)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(23)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!!this.page.title&&this.survey.showPageTitles},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"num",{get:function(){return this.page.num>0?this.page.num+". ":""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.page.rows},enumerable:!0,configurable:!0}),t}(i.a);n.c([s.Prop],u.prototype,"survey",void 0),n.c([s.Prop],u.prototype,"page",void 0),n.c([s.Prop],u.prototype,"css",void 0),u=n.c([r.i(s.Component)({mixins:[a.a]})],u),t.default=u,i.a.component("survey-page",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(23)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),Object.defineProperty(t.prototype,"rows",{get:function(){return this.question.rows},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return this.question.title.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"survey",{get:function(){return this.question.data},enumerable:!0,configurable:!0}),t}(i.a);n.c([s.Prop],u.prototype,"question",void 0),n.c([s.Prop],u.prototype,"isEditMode",void 0),n.c([s.Prop],u.prototype,"css",void 0),u=n.c([r.i(s.Component)({mixins:[a.a]})],u),t.default=u,i.a.component("survey-panel",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),Object.defineProperty(t.prototype,"progress",{get:function(){return this.survey.getProgress()+"%"},enumerable:!0,configurable:!0}),t}(i.a));n.c([s.Prop],a.prototype,"survey",void 0),n.c([s.Prop],a.prototype,"css",void 0),a=n.c([s.Component],a),t.default=a,i.a.component("survey-progress",a)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),Object.defineProperty(t.prototype,"colWidth",{get:function(){var e=this.question.colCount;return e>0?100/e+"%":""},enumerable:!0,configurable:!0}),t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-radiogroup",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.selection="",t}return n.b(t,e),t.prototype.getCss=function(e){var t=this.css.rating.item;return this.selection!=e.value&&this.question.value!=e.value||(t+=" active"),t},t.prototype.change=function(e){this.selection=this.question.value=e.target.value},t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-rating",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(23)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t.prototype.getWidgetComponentName=function(e){return e.customWidget?e.customWidget.name:"survey-"+e.getType()},t}(i.a);n.c([s.Prop],u.prototype,"row",void 0),n.c([s.Prop],u.prototype,"css",void 0),n.c([s.Prop],u.prototype,"survey",void 0),u=n.c([r.i(s.Component)({mixins:[a.a]})],u),t.default=u,i.a.component("survey-row",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(12)),u=function(e){function t(){return e.call(this)||this}return n.b(t,e),t.prototype.forceUpdate=function(){this.$forceUpdate()},t.prototype.mounted=function(){this.survey.renderCallback=this.forceUpdate},t.prototype.beforeDestroy=function(){this.survey.renderCallback=void 0},Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!!this.survey.title&&this.survey.showTitle},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasCompletedPage",{get:function(){return this.survey.showCompletedPage&&"completed"===this.survey.state},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"css",{get:function(){return this.survey.css},enumerable:!0,configurable:!0}),t.prototype.getNavBtnClasses=function(e){var t=this.css.navigation[e];return this.css.navigationButton+" "+t},t.prototype.prevPage=function(){this.survey.prevPage()},t.prototype.nextPage=function(){this.survey.nextPage()},t.prototype.completeLastPage=function(){this.survey.completeLastPage()},t}(i.a);n.c([s.Prop],u.prototype,"survey",void 0),u=n.c([s.Component],u),t.default=u,Object.defineProperty(u,"cssType",{get:function(){return a.a.currentType},set:function(e){a.a.currentType=e},enumerable:!0,configurable:!1}),i.a.component("survey",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(9)),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.b(t,e),t.prototype.change=function(e){this.question.value=e.target.value},t}(a.a);u=n.c([s.Component],u),t.default=u,i.a.component("survey-text",u)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),i=r.n(o),s=r(4),a=(r.n(s),r(12)),u=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.expanded=!1,t}return n.b(t,e),Object.defineProperty(t.prototype,"css",{get:function(){return a.a.getCss()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"expandedCss",{get:function(){return this.expanded?this.css.window.header.buttonCollapsed:this.css.window.header.buttonExpanded},enumerable:!0,configurable:!0}),t.prototype.doExpand=function(){this.expanded=!this.expanded},t}(i.a);n.c([s.Prop],u.prototype,"survey",void 0),u=n.c([s.Component],u),t.default=u,i.a.component("survey-window",u)},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Předchozí",pageNextText:"Další",completeText:"Hotovo",otherItemText:"Jiná odpověď (napište)",progressText:"Strana {0} z {1}",emptySurvey:"Průzkumu neobsahuje žádné otázky.",completingSurvey:"Děkujeme za vyplnění průzkumu!",loadingSurvey:"Probíhá načítání průzkumu...",optionsCaption:"Vyber...",requiredError:"Odpovězte prosím na otázku.",requiredInAllRowsError:"Odpovězte prosím na všechny otázky.",numericError:"V tomto poli lze zadat pouze čísla.",textMinLength:"Zadejte prosím alespoň {0} znaků.",textMaxLength:"Zadejte prosím méně než {0} znaků.",textMinMaxLength:"Zadejte prosím více než {0} a méně než {1} znaků.",minRowCountError:"Vyplňte prosím alespoň {0} řádků.",minSelectError:"Vyberte prosím alespoň {0} varianty.",maxSelectError:"Nevybírejte prosím více než {0} variant.",numericMinMax:"Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}",numericMin:"Odpověď '{0}' by mělo být větší nebo rovno {1}",numericMax:"Odpověď '{0}' by mělo být menší nebo rovno {1}",invalidEmail:"Zadejte prosím platnou e-mailovou adresu.",urlRequestError:"Požadavek vrátil chybu '{0}'. {1}",urlGetChoicesError:"Požadavek nevrátil data nebo cesta je neplatná",exceedMaxSize:"Velikost souboru by neměla být větší než {0}.",otherRequiredError:"Zadejte prosím jinou hodnotu.",uploadingFile:"Váš soubor se nahrává. Zkuste to prosím za několik sekund.",addRow:"Přidat řádek",removeRow:"Odstranit"};n.a.locales.cz=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Tilbage",pageNextText:"Videre",completeText:"Færdig",progressText:"Side {0} af {1}",emptySurvey:"Der er ingen synlige spørgsmål.",completingSurvey:"Mange tak for din besvarelse!",loadingSurvey:"Spørgeskemaet hentes fra serveren...",otherItemText:"Valgfrit svar...",optionsCaption:"Vælg...",requiredError:"Besvar venligst spørgsmålet.",numericError:"Angiv et tal.",textMinLength:"Angiv mindst {0} tegn.",minSelectError:"Vælg venligst mindst {0} svarmulighed(er).",maxSelectError:"Vælg venligst færre {0} svarmuligheder(er).",numericMinMax:"'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}",numericMin:"'{0}' skal være lig med eller større end {1}",numericMax:"'{0}' skal være lig med eller mindre end {1}",invalidEmail:"Angiv venligst en gyldig e-mail adresse.",exceedMaxSize:"Filstørrelsen må ikke overstige {0}.",otherRequiredError:"Angiv en værdi for dit valgfrie svar."};n.a.locales.da=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Vorige",pageNextText:"Volgende",completeText:"Afsluiten",otherItemText:"Andere",progressText:"Pagina {0} van {1}",emptySurvey:"Er is geen zichtbare pagina of vraag in deze vragenlijst",completingSurvey:"Bedankt om deze vragenlijst in te vullen",loadingSurvey:"De vragenlijst is aan het laden...",optionsCaption:"Kies...",requiredError:"Gelieve een antwoord in te vullen",numericError:"Het antwoord moet een getal zijn",textMinLength:"Gelieve minsten {0} karakters in te vullen.",minSelectError:"Gelieve minimum {0} antwoorden te selecteren.",maxSelectError:"Gelieve niet meer dan {0} antwoorden te selecteren.",numericMinMax:"Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}",numericMin:"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}",numericMax:"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}",invalidEmail:"Gelieve een geldig e-mailadres in te vullen.",exceedMaxSize:"De grootte van het bestand mag niet groter zijn dan {0}.",otherRequiredError:"Gelieve het veld 'Andere' in te vullen"};n.a.locales.nl=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Edellinen",pageNextText:"Seuraava",completeText:"Valmis",otherItemText:"Muu (kuvaile)",progressText:"Sivu {0}/{1}",emptySurvey:"Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.",completingSurvey:"Kiitos kyselyyn vastaamisesta!",loadingSurvey:"Kyselyä ladataan palvelimelta...",optionsCaption:"Valitse...",requiredError:"Vastaa kysymykseen, kiitos.",numericError:"Arvon tulee olla numeerinen.",textMinLength:"Ole hyvä ja syötä vähintään {0} merkkiä.",minSelectError:"Ole hyvä ja valitse vähintään {0} vaihtoehtoa.",maxSelectError:"Ole hyvä ja valitse enintään {0} vaihtoehtoa.",numericMinMax:"'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}",numericMin:"'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}",numericMax:"'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}",invalidEmail:"Syötä validi sähköpostiosoite.",otherRequiredError:'Ole hyvä ja syötä "Muu (kuvaile)"'};n.a.locales.fi=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Précédent",pageNextText:"Suivant",completeText:"Terminer",otherItemText:"Autre (préciser)",progressText:"Page {0} sur {1}",emptySurvey:"Il n'y a ni page visible ni question visible dans ce questionnaire",completingSurvey:"Merci d'avoir répondu au questionnaire!",loadingSurvey:"Le questionnaire est en cours de chargement...",optionsCaption:"Choisissez...",requiredError:"La réponse à cette question est obligatoire.",requiredInAllRowsError:"Toutes les lignes sont obligatoires",numericError:"La réponse doit être un nombre.",textMinLength:"Merci d'entrer au moins {0} symboles.",minSelectError:"Merci de sélectionner au moins {0}réponses.",maxSelectError:"Merci de sélectionner au plus {0}réponses.",numericMinMax:"Votre réponse '{0}' doit êtresupérieure ou égale à {1} et inférieure ouégale à {2}",numericMin:"Votre réponse '{0}' doit êtresupérieure ou égale à {1}",numericMax:"Votre réponse '{0}' doit êtreinférieure ou égale à {1}",invalidEmail:"Merci d'entrer une adresse mail valide.",exceedMaxSize:"La taille du fichier ne doit pas excéder {0}.",otherRequiredError:"Merci de préciser le champ 'Autre'."};n.a.locales.fr=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Zurück",pageNextText:"Weiter",completeText:"Fertig",progressText:"Seite {0} von {1}",emptySurvey:"Es gibt keine sichtbare Frage.",completingSurvey:"Vielen Dank für das Ausfüllen des Fragebogens!",loadingSurvey:"Der Fragebogen wird vom Server geladen...",otherItemText:"Benutzerdefinierte Antwort...",optionsCaption:"Wählen...",requiredError:"Bitte antworten Sie auf die Frage.",numericError:"Der Wert sollte eine Zahl sein.",textMinLength:"Bitte geben Sie mindestens {0} Symbole.",minSelectError:"Bitte wählen Sie mindestens {0} Varianten.",maxSelectError:"Bitte wählen Sie nicht mehr als {0} Varianten.",numericMinMax:"'{0}' sollte gleich oder größer sein als {1} und gleich oder kleiner als {2}",numericMin:"'{0}' sollte gleich oder größer sein als {1}",numericMax:"'{0}' sollte gleich oder kleiner als {1}",invalidEmail:"Bitte geben Sie eine gültige Email-Adresse ein.",exceedMaxSize:"Die Dateigröße soll nicht mehr als {0}.",otherRequiredError:"Bitte geben Sie einen Wert für Ihre benutzerdefinierte Antwort ein."};n.a.locales.de=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Προηγούμενο",pageNextText:"Επόμενο",completeText:"Ολοκλήρωση",otherItemText:"Άλλο (παρακαλώ διευκρινίστε)",progressText:"Σελίδα {0} από {1}",emptySurvey:"Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.",completingSurvey:"Ευχαριστούμε για την συμπλήρωση αυτου του ερωτηματολογίου!",loadingSurvey:"Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...",optionsCaption:"Επιλέξτε...",requiredError:"Παρακαλώ απαντήστε στην ερώτηση.",requiredInAllRowsError:"Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.",numericError:"Η τιμή πρέπει να είναι αριθμιτική.",textMinLength:"Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.",minRowCountError:"Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.",minSelectError:"Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.",maxSelectError:"Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.",numericMinMax:"Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}",numericMin:"Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}",numericMax:"Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}",invalidEmail:"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.",urlRequestError:"Η αίτηση επέστρεψε σφάλμα '{0}'. {1}",urlGetChoicesError:"Η αίτηση επέστρεψε κενά δεδομένα ή η ιδότητα 'μονοπάτι/path' είναι εσφαλέμένη",exceedMaxSize:"Το μέγεθος δεν μπορεί να υπερβένει τα {0}.",otherRequiredError:"Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.",uploadingFile:"Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.",addRow:"Προσθήκη γραμμής",removeRow:"Αφαίρεση"};n.a.locales.gr=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Wstecz",pageNextText:"Dalej",completeText:"Gotowe",otherItemText:"Inna odpowiedź (wpisz)",progressText:"Strona {0} z {1}",emptySurvey:"Nie ma widocznych pytań.",completingSurvey:"Dziękujemy za wypełnienie ankiety!",loadingSurvey:"Trwa wczytywanie ankiety...",optionsCaption:"Wybierz...",requiredError:"Proszę odpowiedzieć na to pytanie.",requiredInAllRowsError:"Proszę odpowiedzieć na wszystkie pytania.",numericError:"W tym polu można wpisać tylko liczby.",textMinLength:"Proszę wpisać co najmniej {0} znaków.",textMaxLength:"Proszę wpisać mniej niż {0} znaków.",textMinMaxLength:"Proszę wpisać więcej niż {0} i mniej niż {1} znaków.",minRowCountError:"Proszę uzupełnić przynajmniej {0} wierszy.",minSelectError:"Proszę wybrać co najmniej {0} pozycji.",maxSelectError:"Proszę wybrać nie więcej niż {0} pozycji.",numericMinMax:"Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}",numericMin:"Odpowiedź '{0}' powinna być większa lub równa {1}",numericMax:"Odpowiedź '{0}' powinna być mniejsza lub równa {1}",invalidEmail:"Proszę podać prawidłowy adres email.",urlRequestError:"Żądanie zwróciło błąd '{0}'. {1}",urlGetChoicesError:"Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa",exceedMaxSize:"Rozmiar przesłanego pliku nie może przekraczać {0}.",otherRequiredError:"Proszę podać inną odpowiedź.",uploadingFile:"Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.",addRow:"Dodaj wiersz",removeRow:"Usuń"};n.a.locales.pl=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Precedent",pageNextText:"Următor",completeText:"Finalizare",otherItemText:"Altul(precizaţi)",progressText:"Pagina {0} din {1}",emptySurvey:"Nu sunt întrebări pentru acest chestionar",completingSurvey:"Vă mulţumim pentru timpul acordat!",loadingSurvey:"Chestionarul se încarcă...",optionsCaption:"Alegeţi...",requiredError:"Răspunsul la această întrebare este obligatoriu.",requiredInAllRowsError:"Toate răspunsurile sunt obligatorii",numericError:"Răspunsul trebuie să fie numeric.",textMinLength:"Trebuie să introduci minim {0} caractere.",minSelectError:"Trebuie să selectezi minim {0} opţiuni.",maxSelectError:"Trebuie să selectezi maxim {0} opţiuni.",numericMinMax:"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}",numericMin:"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}",numericMax:"Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}",invalidEmail:"Trebuie să introduceţi o adresa de email validă.",exceedMaxSize:"Dimensiunea fişierului nu trebuie să depăşească {0}.",otherRequiredError:"Trebuie să completezi câmpul 'Altul'."};n.a.locales.ro=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Назад",pageNextText:"Далее",completeText:"Готово",progressText:"Страница {0} из {1}",emptySurvey:"Нет ни одного вопроса.",completingSurvey:"Благодарим Вас за заполнение анкеты!",loadingSurvey:"Загрузка с сервера...",otherItemText:"Другое (пожалуйста, опишите)",optionsCaption:"Выбрать...",requiredError:"Пожалуйста, ответьте на вопрос.",numericError:"Ответ должен быть числом.",textMinLength:"Пожалуйста, введите хотя бы {0} символов.",minSelectError:"Пожалуйста, выберите хотя бы {0} вариантов.",maxSelectError:"Пожалуйста, выберите не более {0} вариантов.",numericMinMax:"'{0}' должно быть равным или больше, чем {1}, и равным или меньше, чем {2}",numericMin:"'{0}' должно быть равным или больше, чем {1}",numericMax:"'{0}' должно быть равным или меньше, чем {1}",invalidEmail:"Пожалуйста, введите действительный адрес электронной почты.",otherRequiredError:'Пожалуйста, введите данные в поле "Другое"'};n.a.locales.ru=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Föregående",pageNextText:"Nästa",completeText:"Färdig",otherItemText:"Annat (beskriv)",progressText:"Sida {0} av {1}",emptySurvey:"Det finns ingen synlig sida eller fråga i enkäten.",completingSurvey:"Tack för att du genomfört enkäten!!",loadingSurvey:"Enkäten laddas...",optionsCaption:"Välj...",requiredError:"Var vänlig besvara frågan.",requiredInAllRowsError:"Var vänlig besvara frågorna på alla rader.",numericError:"Värdet ska vara numeriskt.",textMinLength:"Var vänlig ange minst {0} tecken.",minRowCountError:"Var vänlig fyll i minst {0} rader.",minSelectError:"Var vänlig välj åtminstone {0} varianter.",maxSelectError:"Var vänlig välj inte fler än {0} varianter.",numericMinMax:"'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}",numericMin:"'{0}' ska vara lika med eller mer än {1}",numericMax:"'{0}' ska vara lika med eller mindre än {1}",invalidEmail:"Var vänlig ange en korrekt e-postadress.",urlRequestError:"Förfrågan returnerade felet '{0}'. {1}",urlGetChoicesError:"Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt",exceedMaxSize:"Filstorleken får ej överstiga {0}.",otherRequiredError:"Var vänlig ange det andra värdet.",uploadingFile:"Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.",addRow:"Lägg till rad",removeRow:"Ta bort"};n.a.locales.sv=o},function(e,t,r){"use strict";var n=r(1),o={pagePrevText:"Geri",pageNextText:"İleri",completeText:"Anketi Tamamla",otherItemText:"Diğer (açıklayınız)",progressText:"Sayfa {0} / {1}",emptySurvey:"Ankette görüntülenecek sayfa ya da soru mevcut değil.",completingSurvey:"Anketimizi tamamladığınız için teşekkür ederiz.",loadingSurvey:"Anket sunucudan yükleniyor ...",optionsCaption:"Seçiniz ...",requiredError:"Lütfen soruya cevap veriniz",numericError:"Girilen değer numerik olmalıdır",textMinLength:"En az {0} sembol giriniz.",minRowCountError:"Lütfen en az {0} satırı doldurun.",minSelectError:"Lütfen en az {0} seçeneği seçiniz.",maxSelectError:"Lütfen {0} adetten fazla seçmeyiniz.",numericMinMax:"The '{0}' should be equal or more than {1} and equal or less than {2}",numericMin:"'{0}' değeri {1} değerine eşit veya büyük olmalıdır",numericMax:"'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.",invalidEmail:"Lütfen geçerli bir eposta adresi giriniz.",urlRequestError:"Talebi şu hatayı döndü '{0}'. {1}",urlGetChoicesError:"Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.",exceedMaxSize:"Dosya boyutu {0} değerini geçemez.",otherRequiredError:"Lütfen diğer değerleri giriniz.",uploadingFile:"Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.",addRow:"Satır Ekle",removeRow:"Kaldır"};n.a.locales.tr=o},function(e,t,r){"use strict";var n=r(0),o=r(3),i=r(7),s=r(14);r.d(t,"a",function(){return a});var a=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r}return n.b(t,e),t.prototype.getHasOther=function(e){return!(!e||!Array.isArray(e))&&e.indexOf(this.otherItem.value)>=0},t.prototype.valueFromDataCore=function(e){if(!e||!Array.isArray(e))return e;for(var t=0;t0&&e.size>this.maxSize&&this.errors.push(new a.b(this.maxSize)),(t!=this.errors.length||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback),this.errors.length>0},t.prototype.isFileImage=function(e){if(e&&e.type){return 0==e.type.toLowerCase().indexOf("image")}},t}(o.a);i.a.metaData.addClass("file",["showPreview:boolean","imageHeight","imageWidth","storeDataAsText:boolean","maxSize:number"],function(){return new l("")},"question"),s.a.Instance.registerQuestion("file",function(e){return new l(e)})},function(e,t,r){"use strict";var n=r(0),o=r(19),i=r(3),s=r(7),a=r(8);r.d(t,"a",function(){return u});var u=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.locHtmlValue=new a.a(r),r}return n.b(t,e),t.prototype.getType=function(){return"html"},Object.defineProperty(t.prototype,"html",{get:function(){return this.locHtml.text},set:function(e){this.locHtml.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locHtml",{get:function(){return this.locHtmlValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedHtml",{get:function(){return this.survey?this.survey.processHtml(this.html):this.html},enumerable:!0,configurable:!0}),t}(o.a);i.a.metaData.addClass("html",[{name:"html:html",serializationProperty:"locHtml"}],function(){return new u("")},"questionbase"),s.a.Instance.registerQuestion("html",function(e){return new u(e)})},function(e,t,r){"use strict";var n=r(0),o=r(6),i=r(13),s=r(11),a=r(3),u=r(1),l=r(10),c=r(7);r.d(t,"a",function(){return p}),r.d(t,"b",function(){return h});var p=function(e){function t(t,r,n,o,i){var s=e.call(this)||this;return s.name=t,s.text=r,s.fullName=n,s.data=o,s.rowValue=i,s}return n.b(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.rowValue},set:function(e){this.rowValue=e,this.data&&this.data.onMatrixRowChanged(this),this.onValueChanged()},enumerable:!0,configurable:!0}),t.prototype.onValueChanged=function(){},t}(o.b),h=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.isRowChanging=!1,r.isAllRowRequired=!1,r.columnsValue=i.a.createArray(r),r.rowsValue=i.a.createArray(r),r}return n.b(t,e),t.prototype.getType=function(){return"matrix"},Object.defineProperty(t.prototype,"hasRows",{get:function(){return this.rowsValue.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columns",{get:function(){return this.columnsValue},set:function(e){i.a.setData(this.columnsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.rowsValue},set:function(e){i.a.setData(this.rowsValue,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRows",{get:function(){var e=new Array,t=this.value;t||(t={});for(var r=0;rt.MaxRowCount)){if(this.rowCountValue=e,this.value&&this.value.length>e){var r=this.value;r.splice(e),this.value=r}this.fireCallback(this.rowCountChangedCallback)}},enumerable:!0,configurable:!0}),t.prototype.addRow=function(){this.generatedVisibleRows&&this.generatedVisibleRows.push(this.createMatrixRow(null)),this.rowCount++},t.prototype.removeRow=function(e){if(!(e<0||e>=this.rowCount)){if(this.generatedVisibleRows&&ethis.rowCount&&t.splice(this.rowCount-1);for(var r=t.length;r0){r=!1;break}return r?null:e},t.prototype.getRowValueByIndex=function(e,t){return t>=0&&t4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getRows=function(){for(var e=this.colCount,t=this.items,r=[],n=0,o=0;o=e&&(n=0);return r},t.prototype.onValueChanged=function(){e.prototype.onValueChanged.call(this),this.onItemValueChanged()},t.prototype.createTextItem=function(e,t){return new p(e,t)},t.prototype.onItemValueChanged=function(){if(!this.isMultipleItemValueChanging)for(var e=0;e0?this.rateValues:t.defaultRateValues},enumerable:!0,configurable:!0}),t.prototype.getType=function(){return"rating"},t.prototype.supportGoNextPageAutomatic=function(){return!0},t.prototype.supportComment=function(){return!0},t.prototype.supportOther=function(){return!0},Object.defineProperty(t.prototype,"minRateDescription",{get:function(){return this.locMinRateDescription.text},set:function(e){this.locMinRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMinRateDescription",{get:function(){return this.locMinRateDescriptionValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxRateDescription",{get:function(){return this.locMaxRateDescription.text},set:function(e){this.locMaxRateDescription.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locMaxRateDescription",{get:function(){return this.locMaxRateDescriptionValue},enumerable:!0,configurable:!0}),t}(i.a);l.defaultRateValues=[],o.a.setData(l.defaultRateValues,[1,2,3,4,5]),s.a.metaData.addClass("rating",["hasComment:boolean",{name:"rateValues:itemvalues",onGetValue:function(e){return o.a.getData(e.rateValues)},onSetValue:function(e,t){e.rateValues=t}},{name:"minRateDescription",alternativeName:"mininumRateDescription",serializationProperty:"locMinRateDescription"},{name:"maxRateDescription",alternativeName:"maximumRateDescription",serializationProperty:"locMaxRateDescription"}],function(){return new l("")},"question"),a.a.Instance.registerQuestion("rating",function(e){return new l(e)})},function(e,t,r){"use strict";var n=r(0),o=r(7),i=r(3),s=r(11),a=r(8);r.d(t,"a",function(){return u});var u=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.size=25,r.inputType="text",r.locPlaceHolderValue=new a.a(r),r}return n.b(t,e),t.prototype.getType=function(){return"text"},t.prototype.isEmpty=function(){return e.prototype.isEmpty.call(this)||""==this.value},t.prototype.supportGoNextPageAutomatic=function(){return!0},Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.locPlaceHolder.text},set:function(e){this.locPlaceHolder.text=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.locPlaceHolderValue},enumerable:!0,configurable:!0}),t.prototype.setNewValue=function(t){t=this.correctValueType(t),e.prototype.setNewValue.call(this,t)},t.prototype.correctValueType=function(e){return e&&("number"==this.inputType||"range"==this.inputType)?this.isNumber(e)?parseFloat(e):"":e},t.prototype.isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},t}(s.a);i.a.metaData.addClass("text",[{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]},{name:"size:number",default:25},{name:"placeHolder",serializationProperty:"locPlaceHolder"}],function(){return new u("")},"question"),o.a.Instance.registerQuestion("text",function(e){return new u(e)})},function(e,t,r){"use strict";var n=r(0),o=r(6),i=r(20);r.d(t,"a",function(){return s});var s=function(e){function t(t){var r=e.call(this)||this;return r.surveyValue=r.createSurvey(t),r.surveyValue.showTitle=!1,r.windowElement=document.createElement("div"),r}return n.b(t,e),t.prototype.getType=function(){return"window"},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isShowing",{get:function(){return this.isShowingValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpanded",{get:function(){return this.isExpandedValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{get:function(){return this.titleValue?this.titleValue:this.survey.title},set:function(e){this.titleValue=e},enumerable:!0,configurable:!0}),t.prototype.expand=function(){this.expandcollapse(!0)},t.prototype.collapse=function(){this.expandcollapse(!1)},t.prototype.createSurvey=function(e){return new i.a(e)},t.prototype.expandcollapse=function(e){this.isExpandedValue=e},t}(o.b);s.surveyElementName="windowSurveyJS"},function(e,t,r){"use strict";var n=r(0),o=r(6),i=r(3);r.d(t,"e",function(){return s}),r.d(t,"a",function(){return a}),r.d(t,"d",function(){return u}),r.d(t,"b",function(){return l}),r.d(t,"c",function(){return c});var s=function(e){function t(){var t=e.call(this)||this;return t.opValue="equal",t}return n.b(t,e),Object.defineProperty(t,"operators",{get:function(){return null!=t.operatorsValue?t.operatorsValue:(t.operatorsValue={empty:function(e,t){return!e},notempty:function(e,t){return!!e},equal:function(e,t){return e==t},notequal:function(e,t){return e!=t},contains:function(e,t){return e&&e.indexOf&&e.indexOf(t)>-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},t.operatorsValue)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"operator",{get:function(){return this.opValue},set:function(e){e&&(e=e.toLowerCase(),t.operators[e]&&(this.opValue=e))},enumerable:!0,configurable:!0}),t.prototype.check=function(e){t.operators[this.operator](e,this.value)?this.onSuccess():this.onFailure()},t.prototype.onSuccess=function(){},t.prototype.onFailure=function(){},t}(o.b);s.operatorsValue=null;var a=function(e){function t(){var t=e.call(this)||this;return t.owner=null,t}return n.b(t,e),t.prototype.setOwner=function(e){this.owner=e},Object.defineProperty(t.prototype,"isOnNextPage",{get:function(){return!1},enumerable:!0,configurable:!0}),t}(s),u=function(e){function t(){var t=e.call(this)||this;return t.pages=[],t.questions=[],t}return n.b(t,e),t.prototype.getType=function(){return"visibletrigger"},t.prototype.onSuccess=function(){this.onTrigger(this.onItemSuccess)},t.prototype.onFailure=function(){this.onTrigger(this.onItemFailure)},t.prototype.onTrigger=function(e){if(this.owner)for(var t=this.owner.getObjects(this.pages,this.questions),r=0;r0&&i("Component class must inherit Vue or its descendant class when class property is used."),o}function a(e,t){void 0===t&&(t={}),t.name=t.name||e._componentTag;var r=e.prototype;Object.getOwnPropertyNames(r).forEach(function(e){if("constructor"!==e){if(c.indexOf(e)>-1)return void(t[e]=r[e]);var n=Object.getOwnPropertyDescriptor(r,e);"function"==typeof n.value?(t.methods||(t.methods={}))[e]=n.value:(n.get||n.set)&&((t.computed||(t.computed={}))[e]={get:n.get,set:n.set})}}),(t.mixins||(t.mixins=[])).push({data:function(){return s(this,e)}}),p.forEach(function(e){return e(t)}),p=[];var n=Object.getPrototypeOf(e.prototype);return(n instanceof l?n.constructor:l).extend(t)}function u(e){return"function"==typeof e?a(e):function(t){return a(t,e)}}/** + * vue-class-component v5.0.0 + * (c) 2015-2017 Evan You + * @license MIT + */ +Object.defineProperty(t,"__esModule",{value:!0});var l=n(r(2)),c=["data","beforeCreate","created","beforeMount","mounted","beforeDestroy","destroyed","beforeUpdate","updated","activated","deactivated","render"],p=[];!function(e){function t(e){c.push.apply(c,e)}e.registerHooks=t}(u||(u={}));var h=u;t.default=h,t.createDecorator=o}).call(t,r(24))},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("form",{class:e.css.checkbox.root},e._l(e.question.visibleChoices,function(t,n){return r("div",{class:e.css.radiogroup.item,style:{width:e.colWidth,"margin-right":0===e.question.colCount?"5px":"0px"}},[r("label",{class:e.css.radiogroup.item},[r("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"checkbox",name:e.question.name,id:e.question.inputId+"_"+t.value,disabled:e.question.isReadOnly},domProps:{value:t.value,checked:Array.isArray(e.value)?e._i(e.value,t.value)>-1:e.value},on:{click:function(r){var n=e.value,o=r.target,i=!!o.checked;if(Array.isArray(n)){var s=t.value,a=e._i(n,s);i?a<0&&(e.value=n.concat(s)):a>-1&&(e.value=n.slice(0,a).concat(n.slice(a+1)))}else e.value=i}}}),e._v(" "),r("span",[e._v(e._s(t.text))]),e._v(" "),r("survey-other-choice",{directives:[{name:"show",rawName:"v-show",value:e.question.hasOther&&e.question.isOtherSelected,expression:"question.hasOther && question.isOtherSelected"}],class:e.css.radiogroup.other,attrs:{question:e.question,css:e.css}})],1)])}))},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[e.question.isReadOnly?r("div",{class:e.css.comment.root,attrs:{text:e.question.value}}):r("textarea",{directives:[{name:"model",rawName:"v-model",value:e.question.value,expression:"question.value"}],class:e.css.comment.root,attrs:{type:"text",id:e.question.inputId,cols:e.question.cols,rows:e.question.rows,placeholder:e.question.placeHolder},domProps:{value:e._s(e.question.value)},on:{input:function(t){t.target.composing||(e.question.value=t.target.value)}}})])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{class:e.css.root},[e.hasTitle?r("div",{class:e.css.header},[r("h3",[e._v(e._s(e.survey.processedTitle))])]):e._e(),e._v(" "),"running"===e.survey.state?[r("div",{class:e.css.body},["top"==e.survey.showProgressBar?r("survey-progress",{attrs:{survey:e.survey,css:e.css}}):e._e(),e._v(" "),r("survey-page",{attrs:{id:"sq-page",survey:e.survey,page:e.survey.currentPage,css:e.css}}),e._v(" "),"bottom"==e.survey.showProgressBar?r("survey-progress",{staticStyle:{"margin-top":"10px"},attrs:{survey:e.survey,css:e.css}}):e._e()],1),e._v(" "),e.survey.isNavigationButtonsShowing?r("div",{class:e.css.footer},[r("input",{directives:[{name:"show",rawName:"v-show",value:!e.survey.isFirstPage,expression:"!survey.isFirstPage"}],class:e.getNavBtnClasses("prev"),attrs:{type:"button",value:e.survey.pagePrevText},on:{click:e.prevPage}}),e._v(" "),r("input",{directives:[{name:"show",rawName:"v-show",value:!e.survey.isLastPage,expression:"!survey.isLastPage"}],class:e.getNavBtnClasses("next"),attrs:{type:"button",value:e.survey.pageNextText},on:{click:e.nextPage}}),e._v(" "),e.survey.isEditMode?r("input",{directives:[{name:"show",rawName:"v-show",value:e.survey.isLastPage,expression:"survey.isLastPage"}],class:e.getNavBtnClasses("complete"),attrs:{type:"button",value:e.survey.completeText},on:{click:e.completeLastPage}}):e._e()]):e._e()]:e._e(),e._v(" "),e.hasCompletedPage?r("div",{domProps:{innerHTML:e._s(e.survey.processedCompletedHtml)}}):e._e(),e._v(" "),"loading"===e.survey.state?r("div",{domProps:{innerHTML:e._s(e.survey.processedLoadingHtml)}}):e._e(),e._v(" "),"empty"===e.survey.state?r("div",{class:e.css.body},[e._v(e._s(e.survey.emptySurveyText))]):e._e()],2)},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{domProps:{innerHTML:e._s(e.question.processedHtml)}})},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("table",{class:e.css.multipletext.root},e._l(e.question.getRows(),function(t){return r("tr",[e._l(t,function(t,n){return[r("td",{class:e.css.multipletext.itemTitle},[e._v(e._s(t.fullTitle))]),e._v(" "),r("td",[e.question.isReadOnly?r("div",{class:e.css.multipletext.itemValue,staticStyle:{float:"left"},attrs:{size:e.question.itemSize}},[e._v(e._s(t.value))]):r("input",{directives:[{name:"model",rawName:"v-model",value:t.value,expression:"item.value"}],class:e.css.multipletext.itemValue,staticStyle:{float:"left"},attrs:{type:"text",size:e.question.itemSize,placeholder:t.placeHolder,id:0===n?e.question.inputId:""},domProps:{value:e._s(t.value)},on:{input:function(e){e.target.composing||(t.value=e.target.value)}}})]),e._v(" "),void 0]})],2)}))},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("h4",{directives:[{name:"show",rawName:"v-show",value:e.hasTitle,expression:"hasTitle"}],class:e.css.pageTitle},[e._v(e._s(e.num+e.page.processedTitle))]),e._v(" "),e._l(e.rows,function(t){return r("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"row.visible"}],class:e.css.row},[r("survey-row",{attrs:{row:t,survey:e.survey,css:e.css}})],1)})],2)},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{style:{overflowX:e.question.horizontalScroll?"scroll":""}},[r("table",{class:e.css.matrixdynamic.root},[r("thead",[r("tr",[e._l(e.question.columns,function(t){return r("th",{style:{minWidth:e.question.getColumnWidth(t)}},[e._v(e._s(e.question.getColumnTitle(t)))])}),e._v(" "),e.question.isReadOnly?e._e():r("th")],2)]),e._v(" "),r("tbody",e._l(e.rows,function(t){return r("tr",[e._l(t.cells,function(t){return r("td",[r("survey-errors",{attrs:{question:t.question,css:e.css}}),e._v(" "),r("survey-"+t.question.getType(),{tag:"component",attrs:{question:t.question,css:e.css}})],1)}),e._v(" "),e.question.isReadOnly?e._e():r("td",[r("input",{class:e.css.matrixdynamic.button,attrs:{type:"button",value:e.question.removeRowText},on:{click:function(r){e.removeRowClick(t)}}})])],2)}))]),e._v(" "),e.question.isReadOnly?e._e():r("input",{class:e.css.matrixdynamic.button,attrs:{type:"button",value:e.question.addRowText},on:{click:e.addRowClick}})])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[e.question.isReadOnly?r("div",{class:e.css.question.comment},[e._v(e._s(e.question.comment))]):r("input",{directives:[{name:"model",rawName:"v-model",value:e.question.comment,expression:"question.comment"}],class:e.css.question.comment,attrs:{type:"text"},domProps:{value:e._s(e.question.comment)},on:{input:function(t){t.target.composing||(e.question.comment=t.target.value)}}})])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[e.question.isReadOnly?e._e():r("input",{attrs:{type:"file",id:e.question.inputId},on:{change:e.doChange}}),e._v(" "),r("div",[r("img",{directives:[{name:"show",rawName:"v-show",value:e.question.previewValue,expression:"question.previewValue"}],attrs:{src:e.question.value,height:e.question.imageHeight,width:e.question.imageWidth}})])])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("form",{class:e.css.radiogroup.root},[e._l(e.question.visibleChoices,function(t,n){return r("div",{class:e.css.radiogroup.item,style:{width:e.colWidth,"margin-right":0===e.question.colCount?"5px":"0px"}},[r("label",{class:e.css.radiogroup.label},[r("input",{directives:[{name:"model",rawName:"v-model",value:e.question.value,expression:"question.value"}],attrs:{type:"radio",name:e.question.name,id:e.question.inputId+"_"+t.value,disabled:e.question.isReadOnly},domProps:{value:t.value,checked:e._q(e.question.value,t.value)},on:{click:function(r){e.question.value=t.value}}}),e._v(" "),r("span",[e._v(e._s(t.text))])])])}),e._v(" "),r("survey-other-choice",{directives:[{name:"show",rawName:"v-show",value:e.question.hasOther&&e.question.isOtherSelected,expression:"question.hasOther && question.isOtherSelected"}],class:e.css.radiogroup.other,attrs:{question:e.question,css:e.css}})],2)},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",e._l(e.row.elements,function(t){return r("div",{class:e.css.question.root,staticStyle:{"vertical-align":"top"},style:{display:t.visible?"inline-block":"none",marginLeft:e.getIndentSize(t,t.indent),paddingRight:e.getIndentSize(t,t.rightIndent),width:t.renderWidth},attrs:{id:t.id}},[t.hasTitle?r("h5",{directives:[{name:"show",rawName:"v-show",value:"top"===e.survey.questionTitleLocation,expression:"survey.questionTitleLocation === 'top'"}],class:e.css.question.title},[e._v(e._s(t.fullTitle))]):e._e(),e._v(" "),r("survey-errors",{attrs:{question:t,css:e.css}}),e._v(" "),r(e.getWidgetComponentName(t),{tag:"component",attrs:{question:t,css:e.css}}),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:t.hasComment,expression:"element.hasComment"}]},[r("div",[e._v(e._s(t.commentText))]),e._v(" "),r("survey-comment",{attrs:{question:t,css:e.css}})],1),e._v(" "),t.hasTitle?r("h5",{directives:[{name:"show",rawName:"v-show",value:"bottom"===e.survey.questionTitleLocation,expression:"survey.questionTitleLocation === 'bottom'"}],class:e.css.question.title},[e._v(e._s(t.fullTitle))]):e._e()],1)}))},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{class:e.css.dropdown.root},[e.question.isReadOnly?r("div",{class:e.css.dropdown.control,attrs:{text:e.question.value}}):r("select",{directives:[{name:"model",rawName:"v-model",value:e.question.value,expression:"question.value"}],class:e.css.dropdown.control,attrs:{id:e.question.inputId},on:{change:function(t){e.question.value=Array.prototype.filter.call(t.target.options,function(e){return e.selected}).map(function(e){return"_value"in e?e._value:e.value})[0]}}},[r("option",{attrs:{value:""}},[e._v(e._s(e.question.optionsCaption))]),e._v(" "),e._l(e.question.visibleChoices,function(t,n){return r("option",{domProps:{value:t.value}},[e._v(e._s(t.text))])})],2),e._v(" "),r("survey-other-choice",{directives:[{name:"show",rawName:"v-show",value:e.question.hasOther&&e.question.isOtherSelected,expression:"question.hasOther && question.isOtherSelected"}],class:e.css.radiogroup.other,attrs:{question:e.question,css:e.css}})],1)},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[e.question.isReadOnly?r("div",{class:e.css.text},[e._v(e._s(e.question.value))]):r("input",{class:e.css.text,attrs:{type:e.question.inputType,size:e.question.size,id:e.question.inputId,placeholder:e.question.placeHolder},domProps:{value:e.question.value},on:{change:e.change}})])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{style:{overflowX:e.question.horizontalScroll?"scroll":""}},[r("table",{class:e.css.matrixdropdown.root},[r("thead",[r("tr",[r("th"),e._v(" "),e._l(e.question.columns,function(t){return r("th",{style:{minWidth:e.question.getColumnWidth(t)}},[e._v(e._s(e.question.getColumnTitle(t)))])})],2)]),e._v(" "),r("tbody",e._l(e.question.visibleRows,function(t){return r("tr",[r("td",[e._v(e._s(t.text))]),e._v(" "),e._l(t.cells,function(t){return r("td",[r("survey-errors",{attrs:{question:e.question,css:e.css}}),e._v(" "),r("survey-"+t.question.getType(),{tag:"component",attrs:{question:t.question,css:e.css}})],1)})],2)}))])])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{directives:[{name:"show",rawName:"v-show",value:!!e.question.errors&&e.question.errors.length>0,expression:"!!question.errors && question.errors.length > 0"}],class:e.css.error.root,attrs:{role:"alert"}},e._l(e.question.errors,function(t){return r("div",[r("span",{class:e.css.error.icon,attrs:{"aria-hidden":"true"}}),e._v(" "),r("span",{class:e.css.error.item},[e._v(e._s(t.getText()))])])}))},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("table",{class:e.css.matrix.root},[r("thead",[r("tr",[r("th",{directives:[{name:"show",rawName:"v-show",value:e.question.hasRows,expression:"question.hasRows"}]}),e._v(" "),e._l(e.question.columns,function(t){return r("th",[e._v(e._s(t.text))])})],2)]),e._v(" "),r("tbody",e._l(e.question.visibleRows,function(t,n){return r("tr",[r("td",{directives:[{name:"show",rawName:"v-show",value:e.question.hasRows,expression:"question.hasRows"}]},[e._v(e._s(t.text))]),e._v(" "),e._l(e.question.columns,function(o,i){return r("td",[r("input",{directives:[{name:"model",rawName:"v-model",value:t.value,expression:"row.value"}],attrs:{type:"radio",name:t.fullName,disabled:e.question.isReadOnly,id:0===i&&0===n?e.question.inputId:""},domProps:{value:o.value,checked:e._q(t.value,o.value)},on:{click:function(e){t.value=o.value}}})])})],2)}))])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("h4",{directives:[{name:"show",rawName:"v-show",value:e.hasTitle,expression:"hasTitle"}],class:e.css.pageTitle},[e._v(e._s(e.question.processedTitle))]),e._v(" "),r("div",{style:{marginLeft:e.getIndentSize(e.question,e.question.innerIndent)}},e._l(e.rows,function(t){return r("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"row.visible"}],class:e.css.row},[r("survey-row",{attrs:{row:t,survey:e.survey,css:e.css}})],1)}))])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("div",{class:e.css.rating.root},e._l(e.question.visibleRateValues,function(t,n){return r("label",{class:e.getCss(t)},[r("input",{staticStyle:{display:"none"},attrs:{type:"radio",name:e.question.name,id:e.question.name+n,disabled:e.question.isReadOnly},domProps:{value:t.value},on:{change:e.change}}),e._v(" "),0===n?r("span",[e._v(e._s(e.question.minRateDescription))]):e._e(),e._v(" "),r("span",[e._v(e._s(t.text))]),e._v(" "),n===e.question.visibleRateValues.length-1?r("span",[e._v(e._s(e.question.maxRateDescription))]):e._e()])})),e._v(" "),r("survey-other-choice",{directives:[{name:"show",rawName:"v-show",value:e.question.hasOther,expression:"question.hasOther"}],class:e.css.rating.other,attrs:{question:e.question,css:e.css}})],1)},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{class:e.css.window.root,staticStyle:{position:"fixed",bottom:"3px",right:"10px"}},[r("div",{class:e.css.window.header.root},[r("a",{staticStyle:{width:"100%"},attrs:{href:"#"},on:{click:e.doExpand}},[r("span",{class:e.css.window.header.title,staticStyle:{"padding-right":"10px"}},[e._v(e._s(e.survey.title))]),e._v(" "),r("span",{class:e.expandedCss,attrs:{"aria-hidden":"true"}})])]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:e.expanded,expression:"expanded"}],class:e.css.window.body},[r("survey",{attrs:{survey:e.survey}})],1)])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t,r){e.exports={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{class:e.css.progress,staticStyle:{width:"60%"}},[r("div",{class:e.css.progressBar,style:{width:e.progress},attrs:{role:"progressbar","aria-valuemin":"0","aria-valuemax":"100"}},[r("span",[e._v(e._s(e.survey.progressText))])])])},staticRenderFns:[]},e.exports.render._withStripped=!0},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(32);r.d(t,"Version",function(){return n.a}),r.d(t,"AnswerCountValidator",function(){return n.b}),r.d(t,"EmailValidator",function(){return n.c}),r.d(t,"NumericValidator",function(){return n.d}),r.d(t,"RegexValidator",function(){return n.e}),r.d(t,"SurveyValidator",function(){return n.f}),r.d(t,"TextValidator",function(){return n.g}),r.d(t,"ValidatorResult",function(){return n.h}),r.d(t,"ValidatorRunner",function(){return n.i}),r.d(t,"Base",function(){return n.j}),r.d(t,"Event",function(){return n.k}),r.d(t,"SurveyError",function(){return n.l}),r.d(t,"ItemValue",function(){return n.m}),r.d(t,"LocalizableString",function(){return n.n}),r.d(t,"ChoicesRestfull",function(){return n.o}),r.d(t,"Condition",function(){return n.p}),r.d(t,"ConditionNode",function(){return n.q}),r.d(t,"ConditionRunner",function(){return n.r}),r.d(t,"ConditionsParser",function(){return n.s}),r.d(t,"ProcessValue",function(){return n.t}),r.d(t,"CustomError",function(){return n.u}),r.d(t,"ExceedSizeError",function(){return n.v}),r.d(t,"RequreNumericError",function(){return n.w}),r.d(t,"JsonError",function(){return n.x}),r.d(t,"JsonIncorrectTypeError",function(){return n.y}),r.d(t,"JsonMetadata",function(){return n.z}),r.d(t,"JsonMetadataClass",function(){return n.A}),r.d(t,"JsonMissingTypeError",function(){return n.B}),r.d(t,"JsonMissingTypeErrorBase",function(){return n.C}),r.d(t,"JsonObject",function(){return n.D}),r.d(t,"JsonObjectProperty",function(){return n.E}),r.d(t,"JsonRequiredPropertyError",function(){return n.F}),r.d(t,"JsonUnknownPropertyError",function(){return n.G}),r.d(t,"MatrixDropdownCell",function(){return n.H}),r.d(t,"MatrixDropdownColumn",function(){return n.I}),r.d(t,"MatrixDropdownRowModelBase",function(){return n.J}),r.d(t,"QuestionMatrixDropdownModelBase",function(){return n.K}),r.d(t,"MatrixDropdownRowModel",function(){return n.L}),r.d(t,"QuestionMatrixDropdownModel",function(){return n.M}),r.d(t,"MatrixDynamicRowModel",function(){return n.N}),r.d(t,"QuestionMatrixDynamicModel",function(){return n.O}),r.d(t,"MatrixRowModel",function(){return n.P}),r.d(t,"QuestionMatrixModel",function(){return n.Q}),r.d(t,"MultipleTextItemModel",function(){return n.R}),r.d(t,"QuestionMultipleTextModel",function(){return n.S}),r.d(t,"PanelModel",function(){return n.T}),r.d(t,"PanelModelBase",function(){return n.U}),r.d(t,"QuestionRowModel",function(){return n.V}),r.d(t,"PageModel",function(){return n.W}),r.d(t,"Question",function(){return n.X}),r.d(t,"QuestionBase",function(){return n.Y}),r.d(t,"QuestionCheckboxBase",function(){return n.Z}),r.d(t,"QuestionSelectBase",function(){return n._0}),r.d(t,"QuestionCheckboxModel",function(){return n._1}),r.d(t,"QuestionCommentModel",function(){return n._2}),r.d(t,"QuestionDropdownModel",function(){return n._3}),r.d(t,"QuestionFactory",function(){return n._4}),r.d(t,"ElementFactory",function(){return n._5}),r.d(t,"QuestionFileModel",function(){return n._6}),r.d(t,"QuestionHtmlModel",function(){return n._7}),r.d(t,"QuestionRadiogroupModel",function(){return n._8}),r.d(t,"QuestionRatingModel",function(){return n._9}),r.d(t,"QuestionTextModel",function(){return n._10}),r.d(t,"SurveyModel",function(){return n._11}),r.d(t,"SurveyTrigger",function(){return n._12}),r.d(t,"SurveyTriggerComplete",function(){return n._13}),r.d(t,"SurveyTriggerSetValue",function(){return n._14}),r.d(t,"SurveyTriggerVisible",function(){return n._15}),r.d(t,"Trigger",function(){return n._16}),r.d(t,"SurveyWindowModel",function(){return n._17}),r.d(t,"TextPreProcessor",function(){return n._18}),r.d(t,"dxSurveyService",function(){return n._19}),r.d(t,"surveyLocalization",function(){return n._20}),r.d(t,"surveyStrings",function(){return n._21}),r.d(t,"QuestionCustomWidget",function(){return n._22}),r.d(t,"CustomWidgetCollection",function(){return n._23});var o=(r(31),r(0));r.d(t,"__assign",function(){return o.a}),r.d(t,"__extends",function(){return o.b}),r.d(t,"__decorate",function(){return o.c});var i=r(12);r.d(t,"surveyCss",function(){return i.a}),r.d(t,"defaultStandardCss",function(){return i.b});var s=r(30);r.d(t,"defaultBootstrapCss",function(){return s.a});var a=r(33);r.d(t,"Model",function(){return a.a});var u=r(51),l=r.n(u);r.d(t,"Survey",function(){return l.a});var c=r(53),p=r.n(c);r.d(t,"Window",function(){return p.a});var h=r(45),d=r.n(h);r.d(t,"Page",function(){return d.a});var f=r(48),m=r.n(f);r.d(t,"Radiogroup",function(){return m.a});var v=r(44),g=r.n(v);r.d(t,"OtherChoice",function(){return g.a});var y=r(49),b=r.n(y);r.d(t,"Rating",function(){return b.a});var w=r(35),x=r.n(w);r.d(t,"Comment",function(){return x.a});var C=r(34),P=r.n(C);r.d(t,"Checkbox",function(){return P.a});var V=r(52),T=r.n(V);r.d(t,"Text",function(){return T.a});var O=r(43),_=r.n(O);r.d(t,"MultipleText",function(){return _.a});var j=r(40),R=r.n(j);r.d(t,"Matrix",function(){return R.a});var q=r(36),S=r.n(q);r.d(t,"Dropdown",function(){return S.a});var k=r(38),E=r.n(k);r.d(t,"File",function(){return E.a});var M=r(41),N=r.n(M);r.d(t,"MatrixDropdown",function(){return N.a});var I=r(37),D=r.n(I);r.d(t,"Errors",function(){return D.a});var L=r(39),A=r.n(L);r.d(t,"Html",function(){return A.a});var z=r(42),F=r.n(z);r.d(t,"MatrixDynamic",function(){return F.a});var Q=r(47),H=r.n(Q);r.d(t,"Progress",function(){return H.a});var B=r(46),W=r.n(B);r.d(t,"Panel",function(){return W.a});var U=r(50),G=r.n(U);r.d(t,"Row",function(){return G.a})}])}); \ No newline at end of file diff --git a/0.12.8/surveyeditor.css b/0.12.8/surveyeditor.css new file mode 100644 index 00000000..70a56ce0 --- /dev/null +++ b/0.12.8/surveyeditor.css @@ -0,0 +1,291 @@ +/*! + * surveyjs Editor v0.12.8 + * (c) Devsoft Baltic O� - http://surveyjs.io/ + * Github - https://github.com/surveyjs/editor + * License: (http://editor.surveyjs.io/license.html) + */ +html body { + background-color: #fff; } + +@media (max-width: 816px) { + .svd_container .nav-tabs.svd_menu > li.active > a { + color: #1ab394; + background-color: transparent; + border: none; } + .svd_container .nav-tabs.svd_menu > li.active > a:hover, .svd_container .nav-tabs.svd_menu > li.active > a:focus { + color: #1ab394; + background-color: transparent; } } + +.svd_object_editor { + background-color: #fff; + height: 75vh; + overflow-y: scroll; } + +.svd_container { + position: relative; } + .svd_container * { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; } + .svd_container .svd_menu { + background-color: #fff; + border-top: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; + padding: 19px 15px 0 15px; } + .svd_container .svd_menu > li > a { + color: #676a6c; + border: none; + border-radius: 0; + padding: 8px 9px 9px 11px; + width: 115px; + text-align: center; + font-size: 11px; } + .svd_container .svd_menu > li > a:hover, .svd_container .svd_menu > li > a:focus { + background-color: #f3f3f4; + border-bottom: 1px solid #f3f3f4; } + .svd_container .svd_menu > li.active > a { + color: #1ab394; + background-color: #f3f3f4; + border: 1px solid #e7eaec; + border-bottom-color: #f3f3f4; } + .svd_container .svd_menu > li.active > a:hover, .svd_container .svd_menu > li.active > a:focus { + color: #1ab394; + background-color: #f3f3f4; } + .svd_container .svd_actions { + padding: 0 0 5px 0; } + .svd_container .svd_actions .btn.btn-primary { + margin-right: 10px; + font-size: 11px; } + .svd_container .svd_actions .btn-group.open .dropdown-toggle { + background-color: #1ab394; + border-color: #1ab394; } + .svd_container .svd_actions .dropdown-menu > .active > a { + background-color: #1ab394; } + .svd_container .svd_content { + background-color: #f3f3f4; + padding: 10px 30px 30px 30px; + margin: 0; } + .svd_container .svd_content .svd_survey_designer .svd_toolbox { + background-color: #f3f3f4; + border: none; } + .svd_container .svd_content .svd_survey_designer .svd_toolbox .panel-heading { + background-color: #f3f3f4; + color: #676a6c; + border: none; + padding: 0 0 30px 0; + font-size: 15px; } + .svd_container .svd_content .svd_survey_designer .svd_toolbox .btn-group-vertical .btn { + background-color: #f3f3f4; + border: none; + padding: 8px 0; + border-bottom: 1px solid #e7eaec; + box-shadow: none; } + .svd_container .svd_content .svd_survey_designer .svd_toolbox .btn-group-vertical .btn [class^="icon-"], .svd_container .svd_content .svd_survey_designer .svd_toolbox .btn-group-vertical .btn [class*=" icon-"] { + font-size: 16px; + position: absolute; + color: #676a6c; } + .svd_container .svd_content .svd_survey_designer .svd_toolbox .btn-group-vertical .btn .icon-default { + color: #1ab394; } + .svd_container .svd_content .svd_survey_designer .svd_toolbox .btn-group-vertical .btn .svd_toolbox_item_text { + margin-left: 35px; + color: #676a6c; + top: -2px; + position: relative; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor { + background-color: #fff; + border-top: 2px solid #e7eaec; + padding: 10px 15px 0 15px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor .nav-tabs { + border: none; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor .nav-tabs li.active .svd_page_nav { + border: 1px solid #ddd; + color: #1ab394; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor .nav-tabs li .svd_page_nav { + border: 1px solid #e7eaec; + border-radius: 3px; + padding: 7px 10px 7px 12px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor .svd_add_new_page_btn { + border: none; + padding: 0; + margin: 5px; + box-shadow: none; + background-color: transparent; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor .svd_add_new_page_btn:hover { + background-color: transparent; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_pages_editor .svd_add_new_page_btn .glyphicon-plus { + color: #676a6c; + margin-top: 3px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor { + background-color: #fff; + height: 75vh; + overflow-y: scroll; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question { + box-shadow: none; + border-radius: 0; + padding: 20px 9px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question .svd_question_menu { + position: absolute; + right: 5px; + top: 5px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question .svd_question_menu .dropdown-toggle { + background-color: transparent; + border: none; + box-shadow: none; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question .svd_question_menu .dropdown-toggle .glyphicon-option-horizontal { + color: #1ab394; + font-size: 20px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question .svd_question_menu .dropdown-menu { + top: 25px; + right: 0; + left: auto; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question .svd_question_menu .dropdown-menu li { + margin: 5px; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question .svd_question_menu .dropdown-menu li .btn { + width: 100%; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question_container .svd_question { + background-color: #f9f9f9; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; } + .svd_container .svd_content .svd_survey_designer .svd_editors .svd_questions_editor .panel-body .svd_question_container .svd_question.svd_q_selected { + border: 1px solid #1ab394 !important; } + .svd_container .svd_content .svd_survey_designer .svd_properties { + border: none; + border-top: 2px solid #e7eaec; + border-radius: 0; + padding: 0; } + .svd_container .svd_content .svd_survey_designer .svd_properties .panel-heading { + background-color: #fff; + border: none; + border-bottom: 1px solid #e7eaec; } + .svd_container .svd_content .svd_survey_designer .svd_properties .panel-heading .custom-select { + display: inline-block; + width: 100%; } + .svd_container .svd_content .svd_survey_designer .svd_properties .panel-heading .btn { + display: inline-block; + padding: 0; + margin: 0 0 0 10px; + border: none; } + .svd_container .svd_content .svd_survey_designer .svd_properties .panel-heading .btn:hover { + background-color: transparent; } + .svd_container .svd_content .svd_survey_designer .svd_properties .input-group-btn .btn { + margin-left: 5px; + border: none; + background: transparent; } + .svd_container .svd_content .svd_survey_designer .svd_properties .input-group-btn .btn:active { + box-shadow: none; } + .svd_container .svd_content .svd_survey_designer .svd_properties input[type="checkbox"].form-control { + width: 25px; } + .svd_container .svd_content .svd_survey_designer .svd_properties .table { + color: #676a6c; + font-weight: 600; } + .svd_container .svd_content .svd_survey_designer .svd_properties .table .active > td:nth-child(1) { + border-left: 1px solid #fff; } + .svd_container .svd_content .svd_survey_designer .svd_properties .table td { + border: none; + height: 40px; + padding: 0 10px 0 10px; + vertical-align: middle; } + .svd_container .svd_content .svd_survey_designer .svd_properties .table td:nth-child(2) { + color: #a7a7a7; } + .svd_container .svd_content .svd_json_editor { + height: 450px; } + .svd_container .svd_content .svd_json_editor_area { + height: 450px; + width: 100%; } + +.svd_container [draggable] { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + user-select: none; + /* Required to make elements draggable in old WebKit */ + -khtml-user-drag: element; + -webkit-user-drag: element; } + +.svd_container .svd_table-nowrap { + table-layout: fixed; } + +.svd_container .svd_table-nowrap td { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + +.svd_container .svd_q_selected { + border: 1px solid #1ab394 !important; } + +.svd_container .svd_q_design { + pointer-events: none; } + +.svd_container .svd_q_design_border { + position: relative; } + +.svd_container .svd_dragover { + pointer-events: none; + width: 100%; + height: 5px; + border: 2px dashed #000; } + +.svd_container .svd_navbarbuttons { + margin-top: 3px; } + +@font-face { + font-family: 'icomoon'; + src: url("fonts/icomoon.eot?sbpmys"); + src: url("fonts/icomoon.eot?sbpmys#iefix") format("embedded-opentype"), url("fonts/icomoon.ttf?sbpmys") format("truetype"), url("fonts/icomoon.woff?sbpmys") format("woff"), url("fonts/icomoon.svg?sbpmys#icomoon") format("svg"); + font-weight: normal; + font-style: normal; } + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.icon-panel:before { + content: "\E90D"; } + +.icon-checkbox:before { + content: "\E900"; } + +.icon-comment:before { + content: "\E901"; } + +.icon-dropdown:before { + content: "\E902"; } + +.icon-file:before { + content: "\E903"; } + +.icon-html:before { + content: "\E904"; } + +.icon-default:before { + content: "\E905"; } + +.icon-matrixdynamic:before { + content: "\E906"; } + +.icon-matrixdropdown:before { + content: "\E907"; } + +.icon-matrix:before { + content: "\E908"; } + +.icon-multipletext:before { + content: "\E909"; } + +.icon-radiogroup:before { + content: "\E90A"; } + +.icon-rating:before { + content: "\E90B"; } + +.icon-text:before { + content: "\E90C"; } diff --git a/0.12.8/surveyeditor.js b/0.12.8/surveyeditor.js new file mode 100644 index 00000000..89553f14 --- /dev/null +++ b/0.12.8/surveyeditor.js @@ -0,0 +1,6009 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("knockout"), require("survey-knockout"), require("jquery"), require("bootstrap")); + else if(typeof define === 'function' && define.amd) + define("SurveyEditor", ["knockout", "survey-knockout", "jquery", "bootstrap"], factory); + else if(typeof exports === 'object') + exports["SurveyEditor"] = factory(require("knockout"), require("survey-knockout"), require("jquery"), require("bootstrap")); + else + root["SurveyEditor"] = factory(root["ko"], root["Survey"], root["jQuery"], root["bootstrap"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_24__, __WEBPACK_EXTERNAL_MODULE_34__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ 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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 61); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_1__; + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return editorLocalization; }); +/* unused harmony export defaultStrings */ +var editorLocalization = { + currentLocale: "", + locales: {}, + getString: function (strName, locale) { + if (locale === void 0) { locale = null; } + if (!locale) + locale = this.currentLocale; + var loc = locale ? this.locales[locale] : defaultStrings; + if (!loc) + loc = defaultStrings; + var path = strName.split('.'); + var obj = loc; + for (var i = 0; i < path.length; i++) { + obj = obj[path[i]]; + if (!obj) { + if (loc === defaultStrings) + return path[i]; + return this.getString(strName, "en"); + } + } + return obj; + }, + getPropertyName: function (strName, local) { + if (local === void 0) { local = null; } + var obj = this.getProperty(strName, local); + if (obj["name"]) + return obj["name"]; + return obj; + }, + getPropertyTitle: function (strName, local) { + if (local === void 0) { local = null; } + var obj = this.getProperty(strName, local); + if (obj["title"]) + return obj["title"]; + return ""; + }, + getProperty: function (strName, local) { + if (local === void 0) { local = null; } + var obj = this.getString("p." + strName, local); + if (obj !== strName) + return obj; + var pos = strName.indexOf('_'); + if (pos < -1) + return obj; + strName = strName.substr(pos + 1); + return this.getString("p." + strName, local); + }, + getLocales: function () { + var res = []; + res.push(""); + for (var key in this.locales) { + res.push(key); + } + return res; + } +}; +var defaultStrings = { + //survey templates + survey: { + dropQuestion: "Please drop a question here.", + copy: "Copy", + addToToolbox: "Add to toolbox", + deletePanel: "Delete Panel", + deleteQuestion: "Delete Question" + }, + //questionTypes + qt: { + checkbox: "Checkbox", + comment: "Comment", + dropdown: "Dropdown", + file: "File", + html: "Html", + matrix: "Matrix (single choice)", + matrixdropdown: "Matrix (multiple choice)", + matrixdynamic: "Matrix (dynamic rows)", + multipletext: "Multiple Text", + panel: "Panel", + radiogroup: "Radiogroup", + rating: "Rating", + text: "Single Input" + }, + //Strings in Editor + ed: { + addNewPage: "Add New Page", + newPageName: "page", + newQuestionName: "question", + newPanelName: "panel", + testSurvey: "Test Survey", + testSurveyAgain: "Test Survey Again", + testSurveyWidth: "Survey width: ", + embedSurvey: "Embed Survey", + saveSurvey: "Save Survey", + designer: "Survey Designer", + jsonEditor: "JSON Editor", + undo: "Undo", + redo: "Redo", + options: "Options", + generateValidJSON: "Generate Valid JSON", + generateReadableJSON: "Generate Readable JSON", + toolbox: "Toolbox", + delSelObject: "Delete selected object", + correctJSON: "Please correct JSON.", + surveyResults: "Survey Result: " + }, + //Property Editors + pe: { + apply: "Apply", + ok: "OK", + cancel: "Cancel", + reset: "Reset", + close: "Close", + delete: "Delete", + addNew: "Add New", + removeAll: "Remove All", + edit: "Edit", + empty: "", + fastEntry: "Fast Entry", + formEntry: "Form Entry", + testService: "Test the service", + expressionHelp: "Please enter a boolean expression. It should return true to keep the question/page visible. For example: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", + propertyIsEmpty: "Please enter value into the property", + value: "Value", + text: "Text", + required: "Required?", + columnEdit: "Edit column: {0}", + hasOther: "Has other item", + name: "Name", + title: "Title", + cellType: "Cell type", + colCount: "Column count", + choicesOrder: "Select choices order", + visible: "Is visible?", + isRequired: "Is required?", + startWithNewLine: "Is start with new line?", + rows: "Row count", + placeHolder: "Input place holder", + showPreview: "Is image preview shown?", + storeDataAsText: "Store file content in JSON result as text", + maxSize: "Maximum file size in bytes", + imageHeight: "Image height", + imageWidth: "Image width", + rowCount: "Row count", + addRowText: "Add row button text", + removeRowText: "Remove row button text", + minRateDescription: "Minimum rate description", + maxRateDescription: "Maximum rate description", + inputType: "Input type", + optionsCaption: "Options caption", + qEditorTitle: "Edit question: {0}", + tabs: { + general: "General", + fileOptions: "Options", + html: "Html Editor", + columns: "Columns", + rows: "Rows", + choices: "Choices", + visibleIf: "Visible If", + rateValues: "Rate Values", + choicesByUrl: "Choices from Web", + matrixChoices: "Default Choices", + multipleTextItems: "Text Inputs" + }, + editProperty: "Edit property '{0}'", + items: "[ Items: {0} ]", + enterNewValue: "Please, enter the value.", + noquestions: "There is no any question in the survey.", + createtrigger: "Please create a trigger", + triggerOn: "On ", + triggerMakePagesVisible: "Make pages visible:", + triggerMakeQuestionsVisible: "Make questions visible:", + triggerCompleteText: "Complete the survey if succeed.", + triggerNotSet: "The trigger is not set", + triggerRunIf: "Run if", + triggerSetToName: "Change value of: ", + triggerSetValue: "to: ", + triggerIsVariable: "Do not put the variable into the survey result.", + verbChangeType: "Change type ", + verbChangePage: "Change page " + }, + //Operators + op: { + empty: "is empty", + notempty: "is not empty", + equal: "equals", + notequal: "not equals", + contains: "contains", + notcontains: "not contains", + greater: "greater", + less: "less", + greaterorequal: "greater or equals", + lessorequal: "Less or Equals" + }, + //Embed window + ew: { + angular: "Use Angular version", + jquery: "Use jQuery version", + knockout: "Use Knockout version", + react: "Use React version", + vue: "Use Vue version", + bootstrap: "For bootstrap framework", + standard: "No bootstrap", + showOnPage: "Show survey on a page", + showInWindow: "Show survey in a window", + loadFromServer: "Load Survey JSON from server", + titleScript: "Scripts and styles", + titleHtml: "HTML", + titleJavaScript: "JavaScript" + }, + //Properties + p: { + name: "name", + title: { name: "title", title: "Leave it empty, if it is the same as 'Name'" }, + survey_title: { name: "title", title: "It will be shown on every page." }, + page_title: { name: "title", title: "Page title" } + } +}; +editorLocalization.locales["en"] = defaultStrings; + + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export __assign */ +/* harmony export (immutable) */ __webpack_exports__["a"] = __extends; +var __assign = Object["assign"] || function (target) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + target[p] = s[p]; + } + return target; +}; +function __extends(thisClass, baseClass) { + for (var p in baseClass) + if (baseClass.hasOwnProperty(p)) + thisClass[p] = baseClass[p]; + function __() { this.constructor = thisClass; } + thisClass.prototype = baseClass === null ? Object.create(baseClass) : (__.prototype = baseClass.prototype, new __()); +} +; + + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorBase; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyStringPropertyEditor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyDropdownPropertyEditor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyBooleanPropertyEditor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyNumberPropertyEditor; }); + +var SurveyPropertyEditorBase = (function () { + function SurveyPropertyEditorBase() { + this.value_ = null; + this.options = null; + } + SurveyPropertyEditorBase.registerEditor = function (name, creator) { + SurveyPropertyEditorBase.editorRegisteredList[name] = creator; + }; + SurveyPropertyEditorBase.createEditor = function (editorType, func) { + var creator = SurveyPropertyEditorBase.editorRegisteredList[editorType]; + if (!creator) + creator = SurveyPropertyEditorBase.editorRegisteredList[SurveyPropertyEditorBase.defaultEditor]; + var propertyEditor = creator(); + propertyEditor.onChanged = func; + return propertyEditor; + }; + Object.defineProperty(SurveyPropertyEditorBase.prototype, "editorType", { + get: function () { throw "editorType is not defined"; }, + enumerable: true, + configurable: true + }); + SurveyPropertyEditorBase.prototype.getValueText = function (value) { return value; }; + Object.defineProperty(SurveyPropertyEditorBase.prototype, "value", { + get: function () { return this.value_; }, + set: function (value) { + value = this.getCorrectedValue(value); + this.setValueCore(value); + this.onValueChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyPropertyEditorBase.prototype, "locale", { + get: function () { + if (this.onGetLocale) + return this.onGetLocale(); + return ""; + }, + enumerable: true, + configurable: true + }); + SurveyPropertyEditorBase.prototype.setValueCore = function (value) { + this.value_ = value; + }; + SurveyPropertyEditorBase.prototype.setTitle = function (value) { }; + SurveyPropertyEditorBase.prototype.setObject = function (value) { }; + SurveyPropertyEditorBase.prototype.onValueChanged = function () { + }; + SurveyPropertyEditorBase.prototype.getCorrectedValue = function (value) { return value; }; + return SurveyPropertyEditorBase; +}()); + +SurveyPropertyEditorBase.defaultEditor = "string"; +SurveyPropertyEditorBase.editorRegisteredList = {}; +var SurveyStringPropertyEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyStringPropertyEditor, _super); + function SurveyStringPropertyEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyStringPropertyEditor.prototype, "editorType", { + get: function () { return "string"; }, + enumerable: true, + configurable: true + }); + return SurveyStringPropertyEditor; +}(SurveyPropertyEditorBase)); + +var SurveyDropdownPropertyEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyDropdownPropertyEditor, _super); + function SurveyDropdownPropertyEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyDropdownPropertyEditor.prototype, "editorType", { + get: function () { return "dropdown"; }, + enumerable: true, + configurable: true + }); + return SurveyDropdownPropertyEditor; +}(SurveyPropertyEditorBase)); + +var SurveyBooleanPropertyEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyBooleanPropertyEditor, _super); + function SurveyBooleanPropertyEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "editorType", { + get: function () { return "boolean"; }, + enumerable: true, + configurable: true + }); + return SurveyBooleanPropertyEditor; +}(SurveyPropertyEditorBase)); + +var SurveyNumberPropertyEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyNumberPropertyEditor, _super); + function SurveyNumberPropertyEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyNumberPropertyEditor.prototype, "editorType", { + get: function () { return "number"; }, + enumerable: true, + configurable: true + }); + return SurveyNumberPropertyEditor; +}(SurveyPropertyEditorBase)); + +SurveyPropertyEditorBase.registerEditor("string", function () { return new SurveyStringPropertyEditor(); }); +SurveyPropertyEditorBase.registerEditor("dropdown", function () { return new SurveyDropdownPropertyEditor(); }); +SurveyPropertyEditorBase.registerEditor("boolean", function () { return new SurveyBooleanPropertyEditor(); }); +SurveyPropertyEditorBase.registerEditor("number", function () { return new SurveyNumberPropertyEditor(); }); + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyItemsEditor; }); + + + + +var SurveyPropertyItemsEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyItemsEditor, _super); + function SurveyPropertyItemsEditor() { + var _this = _super.call(this) || this; + _this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + _this.value = []; + var self = _this; + self.onDeleteClick = function (item) { self.koItems.remove(item); }; + self.onClearClick = function (item) { self.koItems.removeAll(); }; + self.onAddClick = function () { self.AddItem(); }; + self.onMoveUpClick = function (item) { self.moveUp(item); }; + self.onMoveDownClick = function (item) { self.moveDown(item); }; + return _this; + } + SurveyPropertyItemsEditor.prototype.getValueText = function (value) { + var len = value ? value.length : 0; + return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("pe.items")["format"](len); + }; + SurveyPropertyItemsEditor.prototype.getCorrectedValue = function (value) { + if (value == null || !Array.isArray(value)) + value = []; + return value; + }; + SurveyPropertyItemsEditor.prototype.AddItem = function () { + this.koItems.push(this.createNewEditorItem()); + }; + SurveyPropertyItemsEditor.prototype.moveUp = function (item) { + var arr = this.koItems(); + var index = arr.indexOf(item); + if (index < 1) + return; + arr[index] = arr[index - 1]; + arr[index - 1] = item; + this.koItems(arr); + }; + SurveyPropertyItemsEditor.prototype.moveDown = function (item) { + var arr = this.koItems(); + var index = arr.indexOf(item); + if (index < 0 || index >= arr.length - 1) + return; + arr[index] = arr[index + 1]; + arr[index + 1] = item; + this.koItems(arr); + }; + SurveyPropertyItemsEditor.prototype.onValueChanged = function () { + this.koItems(this.getItemsFromValue()); + }; + SurveyPropertyItemsEditor.prototype.getItemsFromValue = function (value) { + if (value === void 0) { value = null; } + var items = []; + if (!value) + value = this.value; + for (var i = 0; i < value.length; i++) { + items.push(this.createEditorItem(value[i])); + } + return items; + }; + SurveyPropertyItemsEditor.prototype.onBeforeApply = function () { + var items = []; + var internalItems = this.koItems(); + for (var i = 0; i < internalItems.length; i++) { + items.push(this.createItemFromEditorItem(internalItems[i])); + } + this.setValueCore(items); + }; + SurveyPropertyItemsEditor.prototype.createNewEditorItem = function () { throw "Override 'createNewEditorItem' method"; }; + SurveyPropertyItemsEditor.prototype.createEditorItem = function (item) { return item; }; + SurveyPropertyItemsEditor.prototype.createItemFromEditorItem = function (editorItem) { return editorItem; }; + return SurveyPropertyItemsEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); + + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ObjType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyHelper; }); + +var ObjType; +(function (ObjType) { + ObjType[ObjType["Unknown"] = 0] = "Unknown"; + ObjType[ObjType["Survey"] = 1] = "Survey"; + ObjType[ObjType["Page"] = 2] = "Page"; + ObjType[ObjType["Panel"] = 3] = "Panel"; + ObjType[ObjType["Question"] = 4] = "Question"; +})(ObjType || (ObjType = {})); +var SurveyHelper = (function () { + function SurveyHelper() { + } + SurveyHelper.getNewPageName = function (objs) { + return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newPageName")); + }; + SurveyHelper.getNewQuestionName = function (objs) { + return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newQuestionName")); + }; + SurveyHelper.getNewPanelName = function (objs) { + return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newPanelName")); + }; + SurveyHelper.getNewName = function (objs, baseName) { + var hash = {}; + for (var i = 0; i < objs.length; i++) { + hash[objs[i].name] = true; + } + var num = 1; + while (true) { + if (!hash[baseName + num.toString()]) + break; + num++; + } + return baseName + num.toString(); + }; + SurveyHelper.getObjectType = function (obj) { + if (!obj || !obj["getType"]) + return ObjType.Unknown; + if (obj.getType() == "page") + return ObjType.Page; + if (obj.getType() == "panel") + return ObjType.Panel; + if (obj.getType() == "survey") + return ObjType.Survey; + if (obj["name"]) + return ObjType.Question; + return ObjType.Unknown; + }; + SurveyHelper.getObjectName = function (obj) { + if (obj["name"]) + return obj["name"]; + var objType = SurveyHelper.getObjectType(obj); + if (objType != ObjType.Page) + return ""; + var data = obj.data; + var index = data.pages.indexOf(obj); + return "[Page " + (index + 1) + "]"; + }; + return SurveyHelper; +}()); + + + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__objectProperty__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjectEditor; }); + + + + +var SurveyObjectEditor = (function () { + function SurveyObjectEditor(propertyEditorOptions) { + if (propertyEditorOptions === void 0) { propertyEditorOptions = null; } + this.propertyEditorOptions = null; + this.onPropertyValueChanged = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); + this.setOptions(propertyEditorOptions); + this.koProperties = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); + this.koActiveProperty = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.koHasObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + } + Object.defineProperty(SurveyObjectEditor.prototype, "selectedObject", { + get: function () { return this.selectedObjectValue; }, + set: function (value) { + if (this.selectedObjectValue == value) + return; + this.koHasObject(value != null); + this.selectedObjectValue = value; + this.updateProperties(); + this.updatePropertiesObject(); + }, + enumerable: true, + configurable: true + }); + SurveyObjectEditor.prototype.setOptions = function (propertyEditorOptions) { + this.propertyEditorOptions = propertyEditorOptions; + }; + SurveyObjectEditor.prototype.getPropertyEditor = function (name) { + var properties = this.koProperties(); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == name) + return properties[i]; + } + return null; + }; + SurveyObjectEditor.prototype.changeActiveProperty = function (property) { + this.koActiveProperty(property); + }; + SurveyObjectEditor.prototype.ObjectChanged = function () { + this.updatePropertiesObject(); + }; + SurveyObjectEditor.prototype.updateProperties = function () { + var _this = this; + if (!this.selectedObject || !this.selectedObject.getType) { + this.koProperties([]); + this.koActiveProperty(null); + return; + } + var properties = __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["JsonObject"].metaData.getProperties(this.selectedObject.getType()); + properties.sort(function (a, b) { + if (a.name == b.name) + return 0; + if (a.name > b.name) + return 1; + return -1; + }); + var objectProperties = []; + var self = this; + var propEvent = function (property, newValue) { + self.onPropertyValueChanged.fire(_this, { property: property.property, object: property.object, newValue: newValue }); + }; + for (var i = 0; i < properties.length; i++) { + if (!this.canShowProperty(properties[i])) + continue; + var objectProperty = new __WEBPACK_IMPORTED_MODULE_1__objectProperty__["a" /* SurveyObjectProperty */](properties[i], propEvent, this.propertyEditorOptions); + var locName = this.selectedObject.getType() + '_' + properties[i].name; + objectProperty.displayName = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getPropertyName(locName); + var title = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getPropertyTitle(locName); + if (!title) + title = objectProperty.displayName; + objectProperty.title = title; + objectProperties.push(objectProperty); + } + this.koProperties(objectProperties); + this.koActiveProperty(this.getPropertyEditor("name")); + }; + SurveyObjectEditor.prototype.canShowProperty = function (property) { + if (property["visible"] === false) + return false; + if (this.onCanShowPropertyCallback) + return this.onCanShowPropertyCallback(this.selectedObject, property); + return true; + }; + SurveyObjectEditor.prototype.updatePropertiesObject = function () { + var properties = this.koProperties(); + for (var i = 0; i < properties.length; i++) { + properties[i].object = this.selectedObject; + } + }; + return SurveyObjectEditor; +}()); + + + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__ = __webpack_require__(4); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyModalEditor; }); +/* unused harmony export SurveyPropertyTextEditor */ +/* unused harmony export SurveyPropertyHtmlEditor */ +/* unused harmony export SurveyPropertyExpressionEditor */ + + + +var SurveyPropertyModalEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyModalEditor, _super); + function SurveyPropertyModalEditor() { + var _this = _super.call(this) || this; + _this.title = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + var self = _this; + self.onApplyClick = function () { self.apply(); }; + self.onResetClick = function () { self.reset(); }; + return _this; + } + SurveyPropertyModalEditor.prototype.setTitle = function (value) { this.title(value); }; + SurveyPropertyModalEditor.prototype.hasError = function () { return false; }; + SurveyPropertyModalEditor.prototype.onBeforeApply = function () { }; + SurveyPropertyModalEditor.prototype.reset = function () { + this.value = this.value; + }; + SurveyPropertyModalEditor.prototype.setObject = function (value) { this.object = value; }; + Object.defineProperty(SurveyPropertyModalEditor.prototype, "isEditable", { + get: function () { return false; }, + enumerable: true, + configurable: true + }); + SurveyPropertyModalEditor.prototype.apply = function () { + if (this.hasError()) + return; + this.onBeforeApply(); + if (this.onChanged) { + this.onChanged(this.value); + } + }; + return SurveyPropertyModalEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); + +var SurveyPropertyTextEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTextEditor, _super); + function SurveyPropertyTextEditor() { + var _this = _super.call(this) || this; + _this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + return _this; + } + Object.defineProperty(SurveyPropertyTextEditor.prototype, "editorType", { + get: function () { return "text"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyPropertyTextEditor.prototype, "isEditable", { + get: function () { return true; }, + enumerable: true, + configurable: true + }); + SurveyPropertyTextEditor.prototype.getValueText = function (value) { + if (!value) + return null; + var str = value; + if (str.length > 20) { + str = str.substr(0, 20) + "..."; + } + return str; + }; + SurveyPropertyTextEditor.prototype.onValueChanged = function () { + this.koValue(this.value); + }; + SurveyPropertyTextEditor.prototype.onBeforeApply = function () { + this.setValueCore(this.koValue()); + }; + return SurveyPropertyTextEditor; +}(SurveyPropertyModalEditor)); + +var SurveyPropertyHtmlEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyHtmlEditor, _super); + function SurveyPropertyHtmlEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyPropertyHtmlEditor.prototype, "editorType", { + get: function () { return "html"; }, + enumerable: true, + configurable: true + }); + return SurveyPropertyHtmlEditor; +}(SurveyPropertyTextEditor)); + +var SurveyPropertyExpressionEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyExpressionEditor, _super); + function SurveyPropertyExpressionEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyPropertyExpressionEditor.prototype, "editorType", { + get: function () { return "expression"; }, + enumerable: true, + configurable: true + }); + return SurveyPropertyExpressionEditor; +}(SurveyPropertyTextEditor)); + +__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("text", function () { return new SurveyPropertyTextEditor(); }); +__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("html", function () { return new SurveyPropertyHtmlEditor(); }); +__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("expression", function () { return new SurveyPropertyExpressionEditor(); }); + + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_jquery__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_jquery__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditors_propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionEditorGeneralProperties__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionEditorDefinition__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorShowWindow; }); +/* unused harmony export SurveyQuestionProperties */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionEditor; }); +/* unused harmony export SurveyQuestionEditorTabBase */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyQuestionEditorTabGeneral; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyQuestionEditorTabProperty; }); + + + + + + + + +var SurveyPropertyEditorShowWindow = (function () { + function SurveyPropertyEditorShowWindow() { + this.koVisible = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); + this.koEditor = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); + } + SurveyPropertyEditorShowWindow.prototype.show = function (questionBase, onChanged) { + var editor = new SurveyQuestionEditor(questionBase, this.onCanShowPropertyCallback); + editor.onChanged = onChanged; + this.koEditor(editor); + this.koVisible(true); + __WEBPACK_IMPORTED_MODULE_2_jquery__("#surveyquestioneditorwindow").modal("show"); + editor.onHideWindow = function () { __WEBPACK_IMPORTED_MODULE_2_jquery__("#surveyquestioneditorwindow").modal("hide"); }; + }; + return SurveyPropertyEditorShowWindow; +}()); + +var SurveyQuestionProperties = (function () { + function SurveyQuestionProperties(obj, onCanShowPropertyCallback) { + this.obj = obj; + this.onCanShowPropertyCallback = onCanShowPropertyCallback; + this.properties = __WEBPACK_IMPORTED_MODULE_7_survey_knockout__["JsonObject"].metaData.getProperties(this.obj.getType()); + } + SurveyQuestionProperties.prototype.getProperty = function (propertyName) { + var property = null; + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == propertyName) { + property = this.properties[i]; + break; + } + } + if (property && property["visible"] === false) + property = null; + if (property && this.onCanShowPropertyCallback) { + if (!this.onCanShowPropertyCallback(this.obj, property)) + property = null; + } + return property; + }; + return SurveyQuestionProperties; +}()); + +var SurveyQuestionEditor = (function () { + function SurveyQuestionEditor(obj, onCanShowPropertyCallback, className) { + if (className === void 0) { className = null; } + this.obj = obj; + this.onCanShowPropertyCallback = onCanShowPropertyCallback; + this.className = className; + var self = this; + if (!this.className) + this.className = this.obj.getType(); + this.properties = new SurveyQuestionProperties(obj, onCanShowPropertyCallback); + self.onApplyClick = function () { self.apply(); }; + self.onOkClick = function () { self.apply(); if (!self.hasError() && self.onHideWindow) + self.onHideWindow(); }; + self.onResetClick = function () { self.reset(); }; + this.onTabClick = function (tab) { self.koActiveTab(tab.name); }; + var tabs = this.buildTabs(); + this.koActiveTab = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](tabs[0].name); + this.koTabs = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](tabs); + this.koTitle = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + if (this.obj["name"]) { + this.koTitle(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.qEditorTitle")["format"](this.obj["name"])); + } + } + SurveyQuestionEditor.prototype.hasError = function () { + var tabs = this.koTabs(); + for (var i = 0; i < tabs.length; i++) { + if (tabs[i].hasError()) { + this.koActiveTab(tabs[i].name); + return true; + } + } + return false; + }; + SurveyQuestionEditor.prototype.reset = function () { + var tabs = this.koTabs(); + for (var i = 0; i < tabs.length; i++) { + tabs[i].reset(); + } + }; + SurveyQuestionEditor.prototype.apply = function () { + if (this.hasError()) + return; + var tabs = this.koTabs(); + for (var i = 0; i < tabs.length; i++) { + tabs[i].apply(); + } + if (this.onChanged) { + this.onChanged(this.obj); + } + }; + SurveyQuestionEditor.prototype.buildTabs = function () { + var tabs = []; + var properties = new __WEBPACK_IMPORTED_MODULE_5__questionEditorGeneralProperties__["a" /* SurveyQuestionEditorGeneralProperties */](this.obj, __WEBPACK_IMPORTED_MODULE_6__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(this.className), this.onCanShowPropertyCallback); + tabs.push(new SurveyQuestionEditorTabGeneral(this.obj, properties)); + this.addPropertiesTabs(tabs); + for (var i = 0; i < tabs.length; i++) { + tabs[i].onCanShowPropertyCallback = this.onCanShowPropertyCallback; + } + return tabs; + }; + SurveyQuestionEditor.prototype.addPropertiesTabs = function (tabs) { + var tabNames = __WEBPACK_IMPORTED_MODULE_6__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getTabs(this.className); + for (var i = 0; i < tabNames.length; i++) { + var tabItem = tabNames[i]; + var property = this.properties.getProperty(tabItem.name); + if (!property) + continue; + var editorTab = new SurveyQuestionEditorTabProperty(this.obj, property); + if (tabItem.title) + editorTab.title = tabItem.title; + tabs.push(editorTab); + } + }; + return SurveyQuestionEditor; +}()); + +var SurveyQuestionEditorTabBase = (function () { + function SurveyQuestionEditorTabBase(obj) { + this.obj = obj; + } + Object.defineProperty(SurveyQuestionEditorTabBase.prototype, "name", { + get: function () { return "name"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyQuestionEditorTabBase.prototype, "title", { + get: function () { + if (this.titleValue) + return this.titleValue; + var str = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.tabs." + this.name); + return str ? str : this.name; + }, + set: function (value) { this.titleValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyQuestionEditorTabBase.prototype, "htmlTemplate", { + get: function () { return "questioneditortab-" + this.name; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyQuestionEditorTabBase.prototype, "templateObject", { + get: function () { return this; }, + enumerable: true, + configurable: true + }); + SurveyQuestionEditorTabBase.prototype.hasError = function () { return false; }; + SurveyQuestionEditorTabBase.prototype.reset = function () { }; + SurveyQuestionEditorTabBase.prototype.apply = function () { }; + SurveyQuestionEditorTabBase.prototype.getValue = function (property) { + if (property["getPropertyValue"]) + return property["getPropertyValue"](this.obj); //TODO make the only call + if (property.hasToUseGetValue) + return property.getValue(this.obj); + return this.obj[property.name]; + }; + return SurveyQuestionEditorTabBase; +}()); + +var SurveyQuestionEditorTabGeneral = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyQuestionEditorTabGeneral, _super); + function SurveyQuestionEditorTabGeneral(obj, properties) { + if (properties === void 0) { properties = null; } + var _this = _super.call(this, obj) || this; + _this.obj = obj; + _this.properties = properties; + _this.properties = properties ? properties : new __WEBPACK_IMPORTED_MODULE_5__questionEditorGeneralProperties__["a" /* SurveyQuestionEditorGeneralProperties */](obj, __WEBPACK_IMPORTED_MODULE_6__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(obj.getType()), null); + return _this; + } + Object.defineProperty(SurveyQuestionEditorTabGeneral.prototype, "name", { + get: function () { return "general"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyQuestionEditorTabGeneral.prototype, "htmlTemplate", { + get: function () { return "questioneditortab-general"; }, + enumerable: true, + configurable: true + }); + SurveyQuestionEditorTabGeneral.prototype.hasError = function () { return this.properties.hasError(); }; + SurveyQuestionEditorTabGeneral.prototype.reset = function () { + this.properties.reset(); + }; + SurveyQuestionEditorTabGeneral.prototype.apply = function () { + this.properties.apply(); + }; + return SurveyQuestionEditorTabGeneral; +}(SurveyQuestionEditorTabBase)); + +var SurveyQuestionEditorTabProperty = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyQuestionEditorTabProperty, _super); + function SurveyQuestionEditorTabProperty(obj, property) { + var _this = _super.call(this, obj) || this; + _this.obj = obj; + _this.property = property; + _this.propertyEditorValue = __WEBPACK_IMPORTED_MODULE_3__propertyEditors_propertyEditorBase__["a" /* SurveyPropertyEditorBase */].createEditor(_this.property.type, null); + var self = _this; + _this.propertyEditorValue.onGetLocale = function () { return self.doOnGetLocale(); }; + _this.propertyEditorValue.value = _this.getValue(_this.property); + return _this; + } + SurveyQuestionEditorTabProperty.prototype.doOnGetLocale = function () { + if (this.obj && this.obj["getLocale"]) + return this.obj["getLocale"](); + return ""; + }; + Object.defineProperty(SurveyQuestionEditorTabProperty.prototype, "name", { + get: function () { return this.property.name; }, + enumerable: true, + configurable: true + }); + SurveyQuestionEditorTabProperty.prototype.hasError = function () { return this.propertyEditor.hasError(); }; + Object.defineProperty(SurveyQuestionEditorTabProperty.prototype, "htmlTemplate", { + get: function () { return "propertyeditorcontent-" + this.property.type; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyQuestionEditorTabProperty.prototype, "templateObject", { + get: function () { return this.propertyEditor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyQuestionEditorTabProperty.prototype, "propertyEditor", { + get: function () { return this.propertyEditorValue; }, + enumerable: true, + configurable: true + }); + SurveyQuestionEditorTabProperty.prototype.reset = function () { + this.propertyEditorValue.value = this.getValue(this.property); + }; + SurveyQuestionEditorTabProperty.prototype.apply = function () { + this.propertyEditor.apply(); + this.obj[this.property.name] = this.propertyEditorValue.value; + }; + return SurveyQuestionEditorTabProperty; +}(SurveyQuestionEditorTabBase)); + + + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__json5__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTextWorker; }); + + +var TextParserPropery = (function () { + function TextParserPropery() { + } + return TextParserPropery; +}()); +var SurveyTextWorker = (function () { + function SurveyTextWorker(text) { + this.text = text; + if (!this.text || this.text.trim() == "") { + this.text = "{}"; + } + this.errors = []; + this.process(); + } + Object.defineProperty(SurveyTextWorker.prototype, "survey", { + get: function () { return this.surveyValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyTextWorker.prototype, "isJsonCorrect", { + get: function () { return this.surveyValue != null; }, + enumerable: true, + configurable: true + }); + SurveyTextWorker.prototype.process = function () { + try { + this.jsonValue = new __WEBPACK_IMPORTED_MODULE_0__json5__["a" /* SurveyJSON5 */](1).parse(this.text); + } + catch (error) { + this.errors.push({ pos: { start: error.at, end: -1 }, text: error.message }); + } + if (this.jsonValue != null) { + this.updateJsonPositions(this.jsonValue); + this.surveyValue = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Survey"](this.jsonValue); + if (this.surveyValue.jsonErrors != null) { + for (var i = 0; i < this.surveyValue.jsonErrors.length; i++) { + var error = this.surveyValue.jsonErrors[i]; + this.errors.push({ pos: { start: error.at, end: -1 }, text: error.getFullDescription() }); + } + } + } + this.surveyObjects = this.createSurveyObjects(); + this.setEditorPositionByChartAt(this.surveyObjects); + this.setEditorPositionByChartAt(this.errors); + }; + SurveyTextWorker.prototype.updateJsonPositions = function (jsonObj) { + jsonObj["pos"]["self"] = jsonObj; + for (var key in jsonObj) { + var obj = jsonObj[key]; + if (obj && obj["pos"]) { + jsonObj["pos"][key] = obj["pos"]; + this.updateJsonPositions(obj); + } + } + }; + SurveyTextWorker.prototype.createSurveyObjects = function () { + var result = []; + if (this.surveyValue == null) + return result; + this.isSurveyAsPage = false; + for (var i = 0; i < this.surveyValue.pages.length; i++) { + var page = this.surveyValue.pages[i]; + if (i == 0 && !page["pos"]) { + page["pos"] = this.surveyValue["pos"]; + this.isSurveyAsPage = true; + } + result.push(page); + for (var j = 0; j < page.questions.length; j++) { + result.push(page.questions[j]); + } + } + return result; + }; + SurveyTextWorker.prototype.setEditorPositionByChartAt = function (objects) { + if (objects == null || objects.length == 0) + return; + var position = { row: 0, column: 0 }; + var atObjectsArray = this.getAtArray(objects); + var startAt = 0; + for (var i = 0; i < atObjectsArray.length; i++) { + var at = atObjectsArray[i].at; + position = this.getPostionByChartAt(position, startAt, at); + var obj = atObjectsArray[i].obj; + if (!obj.position) + obj.position = {}; + if (at == obj.pos.start) { + obj.position.start = position; + } + else { + if (at == obj.pos.end) { + obj.position.end = position; + } + } + startAt = at; + } + }; + SurveyTextWorker.prototype.getPostionByChartAt = function (startPosition, startAt, at) { + var result = { row: startPosition.row, column: startPosition.column }; + var curChar = startAt; + while (curChar < at) { + if (this.text.charAt(curChar) == SurveyTextWorker.newLineChar) { + result.row++; + result.column = 0; + } + else { + result.column++; + } + curChar++; + } + return result; + }; + SurveyTextWorker.prototype.getAtArray = function (objects) { + var result = []; + for (var i = 0; i < objects.length; i++) { + var obj = objects[i]; + var pos = obj.pos; + if (!pos) + continue; + result.push({ at: pos.start, obj: obj }); + if (pos.end > 0) { + result.push({ at: pos.end, obj: obj }); + } + } + return result.sort(function (el1, el2) { + if (el1.at > el2.at) + return 1; + if (el1.at < el2.at) + return -1; + return 0; + }); + }; + return SurveyTextWorker; +}()); + + + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyJSON5; }); +// This file is based on JSON5, http://json5.org/ +// The modification for getting object and properties location 'at' were maden. +var SurveyJSON5 = (function () { + function SurveyJSON5(parseType) { + if (parseType === void 0) { parseType = 0; } + this.parseType = parseType; + } + SurveyJSON5.prototype.parse = function (source, reviver, startFrom, endAt) { + if (reviver === void 0) { reviver = null; } + if (startFrom === void 0) { startFrom = 0; } + if (endAt === void 0) { endAt = -1; } + var result; + this.text = String(source); + this.at = startFrom; + this.endAt = endAt; + this.ch = ' '; + result = this.value(); + this.white(); + if (this.ch) { + this.error("Syntax error"); + } + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + return typeof reviver === 'function' ? (function walk(holder, key) { + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } + else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + }({ '': result }, '')) : result; + }; + SurveyJSON5.prototype.error = function (m) { + // Call error when something is wrong. + var error = new SyntaxError(); + error.message = m; + error["at"] = this.at; + throw error; + }; + SurveyJSON5.prototype.next = function (c) { + if (c === void 0) { c = null; } + // If a c parameter is provided, verify that it matches the current character. + if (c && c !== this.ch) { + this.error("Expected '" + c + "' instead of '" + this.ch + "'"); + } + // Get the this.next character. When there are no more characters, + // return the empty string. + this.ch = this.chartAt(); + this.at += 1; + return this.ch; + }; + SurveyJSON5.prototype.peek = function () { + // Get the this.next character without consuming it or + // assigning it to the this.ch varaible. + return this.chartAt(); + }; + SurveyJSON5.prototype.chartAt = function () { + if (this.endAt > -1 && this.at >= this.endAt) + return ''; + return this.text.charAt(this.at); + }; + SurveyJSON5.prototype.identifier = function () { + // Parse an identifier. Normally, reserved words are disallowed here, but we + // only use this for unquoted object keys, where reserved words are allowed, + // so we don't check for those here. References: + // - http://es5.github.com/#x7.6 + // - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables + // - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm + // TODO Identifiers can have Unicode "letters" in them; add support for those. + var key = this.ch; + // Identifiers must start with a letter, _ or $. + if ((this.ch !== '_' && this.ch !== '$') && + (this.ch < 'a' || this.ch > 'z') && + (this.ch < 'A' || this.ch > 'Z')) { + this.error("Bad identifier"); + } + // Subsequent characters can contain digits. + while (this.next() && (this.ch === '_' || this.ch === '$' || + (this.ch >= 'a' && this.ch <= 'z') || + (this.ch >= 'A' && this.ch <= 'Z') || + (this.ch >= '0' && this.ch <= '9'))) { + key += this.ch; + } + return key; + }; + SurveyJSON5.prototype.number = function () { + // Parse a number value. + var number, sign = '', string = '', base = 10; + if (this.ch === '-' || this.ch === '+') { + sign = this.ch; + this.next(this.ch); + } + // support for Infinity (could tweak to allow other words): + if (this.ch === 'I') { + number = this.word(); + if (typeof number !== 'number' || isNaN(number)) { + this.error('Unexpected word for number'); + } + return (sign === '-') ? -number : number; + } + // support for NaN + if (this.ch === 'N') { + number = this.word(); + if (!isNaN(number)) { + this.error('expected word to be NaN'); + } + // ignore sign as -NaN also is NaN + return number; + } + if (this.ch === '0') { + string += this.ch; + this.next(); + if (this.ch === 'x' || this.ch === 'X') { + string += this.ch; + this.next(); + base = 16; + } + else if (this.ch >= '0' && this.ch <= '9') { + this.error('Octal literal'); + } + } + switch (base) { + case 10: + while (this.ch >= '0' && this.ch <= '9') { + string += this.ch; + this.next(); + } + if (this.ch === '.') { + string += '.'; + while (this.next() && this.ch >= '0' && this.ch <= '9') { + string += this.ch; + } + } + if (this.ch === 'e' || this.ch === 'E') { + string += this.ch; + this.next(); + if (this.ch === '-' || this.ch === '+') { + string += this.ch; + this.next(); + } + while (this.ch >= '0' && this.ch <= '9') { + string += this.ch; + this.next(); + } + } + break; + case 16: + while (this.ch >= '0' && this.ch <= '9' || this.ch >= 'A' && this.ch <= 'F' || this.ch >= 'a' && this.ch <= 'f') { + string += this.ch; + this.next(); + } + break; + } + if (sign === '-') { + number = -string; + } + else { + number = +string; + } + if (!isFinite(number)) { + this.error("Bad number"); + } + else { + return number; + } + }; + SurveyJSON5.prototype.string = function () { + // Parse a string value. + var hex, i, string = '', delim, // double quote or single quote + uffff; + // When parsing for string values, we must look for ' or " and \ characters. + if (this.ch === '"' || this.ch === "'") { + delim = this.ch; + while (this.next()) { + if (this.ch === delim) { + this.next(); + return string; + } + else if (this.ch === '\\') { + this.next(); + if (this.ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(this.next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = uffff * 16 + hex; + } + string += String.fromCharCode(uffff); + } + else if (this.ch === '\r') { + if (this.peek() === '\n') { + this.next(); + } + } + else if (typeof SurveyJSON5.escapee[this.ch] === 'string') { + string += SurveyJSON5.escapee[this.ch]; + } + else { + break; + } + } + else if (this.ch === '\n') { + // unescaped newlines are invalid; see: + // https://github.com/aseemk/json5/issues/24 + // TODO this feels special-cased; are there other + // invalid unescaped chars? + break; + } + else { + string += this.ch; + } + } + } + this.error("Bad string"); + }; + SurveyJSON5.prototype.inlineComment = function () { + // Skip an inline comment, assuming this is one. The current character should + // be the second / character in the // pair that begins this inline comment. + // To finish the inline comment, we look for a newline or the end of the text. + if (this.ch !== '/') { + this.error("Not an inline comment"); + } + do { + this.next(); + if (this.ch === '\n' || this.ch === '\r') { + this.next(); + return; + } + } while (this.ch); + }; + SurveyJSON5.prototype.blockComment = function () { + // Skip a block comment, assuming this is one. The current character should be + // the * character in the /* pair that begins this block comment. + // To finish the block comment, we look for an ending */ pair of characters, + // but we also watch for the end of text before the comment is terminated. + if (this.ch !== '*') { + this.error("Not a block comment"); + } + do { + this.next(); + while (this.ch === '*') { + this.next('*'); + if (this.ch === '/') { + this.next('/'); + return; + } + } + } while (this.ch); + this.error("Unterminated block comment"); + }; + SurveyJSON5.prototype.comment = function () { + // Skip a comment, whether inline or block-level, assuming this is one. + // Comments always begin with a / character. + if (this.ch !== '/') { + this.error("Not a comment"); + } + this.next('/'); + if (this.ch === '/') { + this.inlineComment(); + } + else if (this.ch === '*') { + this.blockComment(); + } + else { + this.error("Unrecognized comment"); + } + }; + SurveyJSON5.prototype.white = function () { + // Skip whitespace and comments. + // Note that we're detecting comments by only a single / character. + // This works since regular expressions are not valid JSON(5), but this will + // break if there are other valid values that begin with a / character! + while (this.ch) { + if (this.ch === '/') { + this.comment(); + } + else if (SurveyJSON5.ws.indexOf(this.ch) >= 0) { + this.next(); + } + else { + return; + } + } + }; + SurveyJSON5.prototype.word = function () { + // true, false, or null. + switch (this.ch) { + case 't': + this.next('t'); + this.next('r'); + this.next('u'); + this.next('e'); + return true; + case 'f': + this.next('f'); + this.next('a'); + this.next('l'); + this.next('s'); + this.next('e'); + return false; + case 'n': + this.next('n'); + this.next('u'); + this.next('l'); + this.next('l'); + return null; + case 'I': + this.next('I'); + this.next('n'); + this.next('f'); + this.next('i'); + this.next('n'); + this.next('i'); + this.next('t'); + this.next('y'); + return Infinity; + case 'N': + this.next('N'); + this.next('a'); + this.next('N'); + return NaN; + } + this.error("Unexpected '" + this.ch + "'"); + }; + SurveyJSON5.prototype.array = function () { + // Parse an array value. + var array = []; + if (this.ch === '[') { + this.next('['); + this.white(); + while (this.ch) { + if (this.ch === ']') { + this.next(']'); + return array; // Potentially empty array + } + // ES5 allows omitting elements in arrays, e.g. [,] and + // [,null]. We don't allow this in JSON5. + if (this.ch === ',') { + this.error("Missing array element"); + } + else { + array.push(this.value()); + } + this.white(); + // If there's no comma after this value, this needs to + // be the end of the array. + if (this.ch !== ',') { + this.next(']'); + return array; + } + this.next(','); + this.white(); + } + } + this.error("Bad array"); + }; + SurveyJSON5.prototype.object = function () { + // Parse an object value. + var key, start, isFirstProperty = true, object = {}; + if (this.parseType > 0) { + object[SurveyJSON5.positionName] = { start: this.at - 1 }; + } + if (this.ch === '{') { + this.next('{'); + this.white(); + start = this.at - 1; + while (this.ch) { + if (this.ch === '}') { + if (this.parseType > 0) { + object[SurveyJSON5.positionName].end = start; + } + this.next('}'); + return object; // Potentially empty object + } + // Keys can be unquoted. If they are, they need to be + // valid JS identifiers. + if (this.ch === '"' || this.ch === "'") { + key = this.string(); + } + else { + key = this.identifier(); + } + this.white(); + if (this.parseType > 1) { + object[SurveyJSON5.positionName][key] = { start: start, valueStart: this.at }; + } + this.next(':'); + object[key] = this.value(); + if (this.parseType > 1) { + start = this.at - 1; + object[SurveyJSON5.positionName][key].valueEnd = start; + object[SurveyJSON5.positionName][key].end = start; + } + this.white(); + // If there's no comma after this pair, this needs to be + // the end of the object. + if (this.ch !== ',') { + if (this.parseType > 1) { + object[SurveyJSON5.positionName][key].valueEnd--; + object[SurveyJSON5.positionName][key].end--; + } + if (this.parseType > 0) { + object[SurveyJSON5.positionName].end = this.at - 1; + } + this.next('}'); + return object; + } + if (this.parseType > 1) { + object[SurveyJSON5.positionName][key].valueEnd--; + if (!isFirstProperty) { + object[SurveyJSON5.positionName][key].end--; + } + } + this.next(','); + this.white(); + isFirstProperty = false; + } + } + this.error("Bad object"); + }; + SurveyJSON5.prototype.value = function () { + // Parse a JSON value. It could be an object, an array, a string, a number, + // or a word. + this.white(); + switch (this.ch) { + case '{': + return this.object(); + case '[': + return this.array(); + case '"': + case "'": + return this.string(); + case '-': + case '+': + case '.': + return this.number(); + default: + return this.ch >= '0' && this.ch <= '9' ? this.number() : this.word(); + } + }; + SurveyJSON5.prototype.stringify = function (obj, replacer, space) { + if (replacer === void 0) { replacer = null; } + if (space === void 0) { space = null; } + if (replacer && (typeof (replacer) !== "function" && !this.isArray(replacer))) { + throw new Error('Replacer must be a function or an array'); + } + this.replacer = replacer; + this.indentStr = this.getIndent(space); + this.objStack = []; + // special case...when undefined is used inside of + // a compound object/array, return null. + // but when top-level, return undefined + var topLevelHolder = { "": obj }; + if (obj === undefined) { + return this.getReplacedValueOrUndefined(topLevelHolder, '', true); + } + return this.internalStringify(topLevelHolder, '', true); + }; + SurveyJSON5.prototype.getIndent = function (space) { + if (space) { + if (typeof space === "string") { + return space; + } + else if (typeof space === "number" && space >= 0) { + return this.makeIndent(" ", space, true); + } + } + return ""; + }; + SurveyJSON5.prototype.getReplacedValueOrUndefined = function (holder, key, isTopLevel) { + var value = holder[key]; + // Replace the value with its toJSON value first, if possible + if (value && value.toJSON && typeof value.toJSON === "function") { + value = value.toJSON(); + } + // If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for + // presence in the array (removing the key/value pair from the resulting JSON if the key is missing). + if (typeof (this.replacer) === "function") { + return this.replacer.call(holder, key, value); + } + else if (this.replacer) { + if (isTopLevel || this.isArray(holder) || this.replacer.indexOf(key) >= 0) { + return value; + } + else { + return undefined; + } + } + else { + return value; + } + }; + SurveyJSON5.prototype.isWordChar = function (char) { + return (char >= 'a' && char <= 'z') || + (char >= 'A' && char <= 'Z') || + (char >= '0' && char <= '9') || + char === '_' || char === '$'; + }; + SurveyJSON5.prototype.isWordStart = function (char) { + return (char >= 'a' && char <= 'z') || + (char >= 'A' && char <= 'Z') || + char === '_' || char === '$'; + }; + SurveyJSON5.prototype.isWord = function (key) { + if (typeof key !== 'string') { + return false; + } + if (!this.isWordStart(key[0])) { + return false; + } + var i = 1, length = key.length; + while (i < length) { + if (!this.isWordChar(key[i])) { + return false; + } + i++; + } + return true; + }; + // polyfills + SurveyJSON5.prototype.isArray = function (obj) { + if (Array.isArray) { + return Array.isArray(obj); + } + else { + return Object.prototype.toString.call(obj) === '[object Array]'; + } + }; + SurveyJSON5.prototype.isDate = function (obj) { + return Object.prototype.toString.call(obj) === '[object Date]'; + }; + SurveyJSON5.prototype.isNaN = function (val) { + return typeof val === 'number' && val !== val; + }; + SurveyJSON5.prototype.checkForCircular = function (obj) { + for (var i = 0; i < this.objStack.length; i++) { + if (this.objStack[i] === obj) { + throw new TypeError("Converting circular structure to JSON"); + } + } + }; + SurveyJSON5.prototype.makeIndent = function (str, num, noNewLine) { + if (noNewLine === void 0) { noNewLine = false; } + if (!str) { + return ""; + } + // indentation no more than 10 chars + if (str.length > 10) { + str = str.substring(0, 10); + } + var indent = noNewLine ? "" : "\n"; + for (var i = 0; i < num; i++) { + indent += str; + } + return indent; + }; + SurveyJSON5.prototype.escapeString = function (str) { + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + SurveyJSON5.escapable.lastIndex = 0; + return SurveyJSON5.escapable.test(str) ? '"' + str.replace(SurveyJSON5.escapable, function (a) { + var c = SurveyJSON5.meta[a]; + return typeof c === 'string' ? + c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + str + '"'; + }; + // End + SurveyJSON5.prototype.internalStringify = function (holder, key, isTopLevel) { + var buffer, res; + // Replace the value, if necessary + var obj_part = this.getReplacedValueOrUndefined(holder, key, isTopLevel); + if (obj_part && !this.isDate(obj_part)) { + // unbox objects + // don't unbox dates, since will turn it into number + obj_part = obj_part.valueOf(); + } + switch (typeof obj_part) { + case "boolean": + return obj_part.toString(); + case "number": + if (isNaN(obj_part) || !isFinite(obj_part)) { + return "null"; + } + return obj_part.toString(); + case "string": + return this.escapeString(obj_part.toString()); + case "object": + if (obj_part === null) { + return "null"; + } + else if (this.isArray(obj_part)) { + this.checkForCircular(obj_part); + buffer = "["; + this.objStack.push(obj_part); + for (var i = 0; i < obj_part.length; i++) { + res = this.internalStringify(obj_part, i, false); + buffer += this.makeIndent(this.indentStr, this.objStack.length); + if (res === null || typeof res === "undefined") { + buffer += "null"; + } + else { + buffer += res; + } + if (i < obj_part.length - 1) { + buffer += ","; + } + else if (this.indentStr) { + buffer += "\n"; + } + } + this.objStack.pop(); + buffer += this.makeIndent(this.indentStr, this.objStack.length, true) + "]"; + } + else { + this.checkForCircular(obj_part); + buffer = "{"; + var nonEmpty = false; + this.objStack.push(obj_part); + for (var prop in obj_part) { + if (obj_part.hasOwnProperty(prop)) { + var value = this.internalStringify(obj_part, prop, false); + isTopLevel = false; + if (typeof value !== "undefined" && value !== null) { + buffer += this.makeIndent(this.indentStr, this.objStack.length); + nonEmpty = true; + var propKey = this.isWord(prop) ? prop : this.escapeString(prop); + buffer += propKey + ":" + (this.indentStr ? ' ' : '') + value + ","; + } + } + } + this.objStack.pop(); + if (nonEmpty) { + buffer = buffer.substring(0, buffer.length - 1) + this.makeIndent(this.indentStr, this.objStack.length) + "}"; + } + else { + buffer = '{}'; + } + } + return buffer; + default: + // functions and undefined should be ignored + return undefined; + } + }; + return SurveyJSON5; +}()); + +SurveyJSON5.positionName = "pos"; +SurveyJSON5.escapee = { + "'": "'", + '"': '"', + '\\': '\\', + '/': '/', + '\n': '', + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' +}; +SurveyJSON5.ws = [ + ' ', + '\t', + '\r', + '\n', + '\v', + '\f', + '\xA0', + '\uFEFF' +]; +// Copied from Crokford's implementation of JSON +// See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195 +// Begin +SurveyJSON5.cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; +SurveyJSON5.escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; +SurveyJSON5.meta = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\' +}; + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); +/* unused harmony export DragDropTargetElement */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DragDropHelper; }); + +var DragDropTargetElement = (function () { + function DragDropTargetElement(page, target, source) { + this.page = page; + this.target = target; + this.source = source; + } + DragDropTargetElement.prototype.moveTo = function (destination, isBottom, isEdge) { + if (isEdge === void 0) { isEdge = false; } + //console.log("dest: " + destination.name + ", isBottom:" + isBottom + ", isEdge:" + isEdge); + isEdge = isEdge || !destination.isPanel; + if (destination === this.target) + return !this.target.isPanel; + var destInfo = this.findInfo(destination, isEdge); + if (!destInfo) { + this.clear(); + return false; + } + var targetInfo = this.findInfo(this.target); + this.updateInfo(destInfo, isBottom, isEdge); + if (this.isInfoEquals(targetInfo, destInfo)) + return true; + this.clearByInfo(targetInfo); + destInfo = this.findInfo(destination, isEdge); + if (!destInfo) + return false; + this.updateInfo(destInfo, isBottom, isEdge); + if (!this.canMove(destInfo)) + return false; + this.addInfo(destInfo); + return true; + }; + DragDropTargetElement.prototype.doDrop = function () { + var destInfo = this.findInfo(this.target); + if (!destInfo) + return; + var index = this.getIndexByInfo(destInfo); + destInfo.panel.addElement(this.getNewTargetElement(), index); + if (this.source) { + var srcInfo = this.findInfo(this.source); + var panel = srcInfo ? srcInfo.panel : this.page; + panel.removeElement(this.source); + } + }; + DragDropTargetElement.prototype.clear = function () { + this.clearByInfo(this.findInfo(this.target)); + }; + DragDropTargetElement.prototype.getIndexByInfo = function (info) { + if (!info) + return 0; + var rows = info.panel.koRows(); + var index = 0; + for (var i = 0; i < info.rIndex; i++) { + index += rows[i]["koElements"]().length; + } + return index + info.elIndex; + }; + DragDropTargetElement.prototype.canMove = function (destInfo) { + if (this.target.isPanel && destInfo.element) { + if (this.target == destInfo.element || this.target.containsElement(destInfo.element)) + return false; + if (this.source && (this.source == destInfo.element || this.source.containsElement(destInfo.element))) + return false; + } + if (!this.source) + return true; + var srcInfo = this.findInfo(this.source); + if (srcInfo == null || srcInfo.panel != destInfo.panel) + return true; + var srcIndex = this.getIndexByInfo(srcInfo); + var destIndex = this.getIndexByInfo(destInfo); + var diff = destIndex - srcIndex; + return diff < 0 || diff > 1; + }; + DragDropTargetElement.prototype.isLastElementInRow = function (info) { + return info.elIndex == info.panel["koRows"]()[info.rIndex]["koElements"]().length - 1; + }; + DragDropTargetElement.prototype.updateInfo = function (info, isBottom, isEdge) { + if (info.rIndex < 0) + return; + if (this.target.startWithNewLine) { + if (isBottom) + info.rIndex++; + } + else { + if (isBottom) { + info.elIndex++; + } + else { + if (info.elIndex == 0 && info.rIndex > 0) { + info.rIndex--; + info.elIndex = info.panel["koRows"]()[info.rIndex]["koElements"]().length; + } + } + } + }; + DragDropTargetElement.prototype.addInfo = function (info) { + if (this.target.startWithNewLine || info.elIndex < 1 + || info.rIndex < 0 || info.rIndex >= info.panel.koRows().length) { + this.AddInfoAsRow(info); + } + else { + var row = info.panel.koRows()[info.rIndex]; + var elements = row["koElements"](); + if (info.elIndex < elements.length) { + elements.splice(info.elIndex, 0, this.target); + } + else { + elements.push(this.target); + } + row["koElements"](elements); + row.updateVisible(); + } + }; + DragDropTargetElement.prototype.AddInfoAsRow = function (info) { + var row = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["QuestionRow"](info.panel); + if (this.target.isPanel) { + this.target.parent = info.panel; + } + row.addElement(this.target); + var rows = info.panel.koRows(); + if (info.rIndex >= 0 && info.rIndex < info.panel.koRows().length) { + rows.splice(info.rIndex, 0, row); + } + else { + rows.push(row); + } + info.panel.koRows(rows); + }; + DragDropTargetElement.prototype.clearByInfo = function (info) { + if (info == null) + return; + var rows = info.panel.koRows(); + if (info.rIndex < 0 || info.rIndex >= rows.length) + return; + var row = rows[info.rIndex]; + var elements = row["koElements"](); + if (row["koElements"]().length > 1) { + elements.splice(info.elIndex, 1); + row["koElements"](elements); + row.updateVisible(); + } + else { + rows.splice(info.rIndex, 1); + info.panel.koRows(rows); + } + }; + DragDropTargetElement.prototype.isInfoEquals = function (a, b) { + if (a == null || b == null) + return false; + return a.panel === b.panel && a.rIndex === b.rIndex && a.elIndex === b.elIndex; + }; + DragDropTargetElement.prototype.findInfo = function (el, isEdge) { + if (isEdge === void 0) { isEdge = false; } + return this.findInfoInPanel(this.page, el, isEdge); + }; + DragDropTargetElement.prototype.findInfoInPanel = function (panel, el, isEdge) { + if (el == panel) { + var parent = panel; + if (panel.parent && (isEdge || this.target.isPanel)) { + parent = panel.parent; + } + return { panel: parent, row: null, rIndex: 0, elIndex: 0, element: panel }; + } + var rows = panel["koRows"](); + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + var elements = row["koElements"](); + for (var j = 0; j < elements.length; j++) { + if (elements[j].isPanel) { + var res = this.findInfoInPanel(elements[j], el, isEdge); + if (res) { + if (res.element == elements[j]) { + res.rIndex = i; + res.elIndex = j; + } + return res; + } + } + else { + if (elements[j] == el) + return { panel: panel, row: row, rIndex: i, elIndex: j, element: elements[j] }; + } + } + } + return null; + }; + DragDropTargetElement.prototype.getNewTargetElement = function () { + var result = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData.createClass(this.target.getType()); + var json = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toJsonObject(this.target); + new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toObject(json, result); + return result; + }; + return DragDropTargetElement; +}()); + +var DragDropHelper = (function () { + function DragDropHelper(data, onModifiedCallback, scrollableElName) { + if (scrollableElName === void 0) { scrollableElName = null; } + this.data = data; + this.scrollableElement = null; + this.ddTarget = null; + this.id = DragDropHelper.counter++; + this.isScrollStop = true; + this.onModifiedCallback = onModifiedCallback; + this.scrollableElement = document.getElementById((scrollableElName ? scrollableElName : "scrollableDiv")); + this.prevCoordinates = { x: -1, y: -1 }; + } + Object.defineProperty(DragDropHelper.prototype, "survey", { + get: function () { return this.data; }, + enumerable: true, + configurable: true + }); + DragDropHelper.prototype.startDragQuestion = function (event, element) { + var json = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toJsonObject(element); + json["type"] = element.getType(); + this.prepareData(event, element.name, json); + this.ddTarget.source = element; + }; + DragDropHelper.prototype.startDragToolboxItem = function (event, elementName, elementJson) { + this.prepareData(event, elementName, elementJson); + }; + DragDropHelper.prototype.isSurveyDragging = function (event) { + if (!event) + return false; + var data = this.getData(event).text; + return data && data.indexOf(DragDropHelper.dataStart) == 0; + }; + DragDropHelper.prototype.doDragDropOver = function (event, element, isEdge) { + if (isEdge === void 0) { isEdge = false; } + event = this.getEvent(event); + if (this.isSameCoordinates(event)) + return; + this.checkScrollY(event); + if (!element || !this.isSurveyDragging(event) || this.isSamePlace(event, element)) + return; + var bottomInfo = this.isBottom(event, element); + isEdge = element.isPanel ? isEdge && bottomInfo.isEdge : true; + if (element.isPanel && !isEdge && element.elements.length > 0) + return; + this.ddTarget.moveTo(element, bottomInfo.isBottom, isEdge); + }; + DragDropHelper.prototype.end = function () { + if (this.ddTarget) { + this.ddTarget.clear(); + } + this.isScrollStop = true; + this.clearData(); + }; + DragDropHelper.prototype.doDrop = function (event) { + if (event.stopPropagation) { + event.stopPropagation(); + } + if (this.isSurveyDragging(event)) { + this.ddTarget.doDrop(); + if (this.onModifiedCallback) + this.onModifiedCallback(); + } + this.end(); + }; + DragDropHelper.prototype.doLeavePage = function (event) { + this.ddTarget.clear(); + }; + DragDropHelper.prototype.scrollToElement = function (el) { + if (!this.scrollableElement || !el) + return; + el.scrollIntoView(false); + }; + DragDropHelper.prototype.createTargetElement = function (elementName, json) { + if (!elementName || !json) + return null; + var targetElement = null; + targetElement = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData.createClass(json["type"]); + new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toObject(json, targetElement); + targetElement.name = elementName; + targetElement.setData(this.survey); + targetElement.renderWidth = "100%"; + targetElement["koIsDragging"](true); + return targetElement; + }; + DragDropHelper.prototype.isBottom = function (event, surveyEl) { + event = this.getEvent(event); + var height = event.currentTarget["clientHeight"]; + var y = event.offsetY; + if (event.hasOwnProperty('layerX')) { + y = event.layerY - event.currentTarget["offsetTop"]; + } + return { isBottom: y > height / 2, isEdge: y <= DragDropHelper.edgeHeight || height - y <= DragDropHelper.edgeHeight }; + }; + DragDropHelper.prototype.isSameCoordinates = function (event) { + var res = Math.abs(event.pageX - this.prevCoordinates.x) > 5 || Math.abs(event.pageY - this.prevCoordinates.y) > 5; + if (res) { + this.prevCoordinates.x = event.pageX; + this.prevCoordinates.y = event.pageY; + } + return !res; + }; + DragDropHelper.prototype.isSamePlace = function (event, element) { + var prev = DragDropHelper.prevEvent; + if (prev.element != element || Math.abs(event.clientX - prev.x) > 5 || Math.abs(event.clientY - prev.y) > 5) { + prev.element = element; + prev.x = event.clientX; + prev.y = event.clientY; + return false; + } + return true; + }; + DragDropHelper.prototype.checkScrollY = function (e) { + if (!this.scrollableElement) + return; + var y = this.getScrollableElementPosY(e); + if (y < 0) + return; + this.isScrollStop = true; + var height = this.scrollableElement["clientHeight"]; + if (y < DragDropHelper.ScrollOffset && y >= 0) { + this.isScrollStop = false; + this.doScrollY(-1); + } + if (height - y < DragDropHelper.ScrollOffset && height >= y) { + this.isScrollStop = false; + this.doScrollY(1); + } + }; + DragDropHelper.prototype.doScrollY = function (step) { + var el = this.scrollableElement; + var scrollY = el.scrollTop + step; + if (scrollY < 0) { + this.isScrollStop = true; + return; + } + el.scrollTop = scrollY; + var self = this; + if (!this.isScrollStop) { + setTimeout(function () { self.doScrollY(step); }, DragDropHelper.ScrollDelay); + } + }; + DragDropHelper.prototype.getScrollableElementPosY = function (e) { + if (!this.scrollableElement || !e.currentTarget) + return -1; + var el = e.currentTarget; + var offsetTop = 0; + while (el && el != this.scrollableElement) { + offsetTop += el["offsetTop"]; + el = el["offsetParent"]; + } + return e.offsetY + e.currentTarget["offsetTop"] - this.scrollableElement.offsetTop - this.scrollableElement.scrollTop; + }; + DragDropHelper.prototype.getEvent = function (event) { + return event["originalEvent"] ? event["originalEvent"] : event; + }; + DragDropHelper.prototype.getY = function (element) { + var result = 0; + while (element) { + result += (element.offsetTop - element.scrollTop + element.clientTop); + element = element.offsetParent; + } + return result; + }; + DragDropHelper.prototype.prepareData = function (event, elementName, json) { + var str = DragDropHelper.dataStart + "questionname:" + elementName; + this.setData(event, str); + var targetElement = this.createTargetElement(elementName, json); + this.ddTarget = new DragDropTargetElement(this.survey.currentPage, targetElement, null); + }; + DragDropHelper.prototype.setData = function (event, text) { + if (event["originalEvent"]) { + event = event["originalEvent"]; + } + if (event.dataTransfer) { + event.dataTransfer.setData("Text", text); + event.dataTransfer.effectAllowed = "copy"; + } + DragDropHelper.dragData = { text: text }; + }; + DragDropHelper.prototype.getData = function (event) { + if (event["originalEvent"]) { + event = event["originalEvent"]; + } + if (event.dataTransfer) { + var text = event.dataTransfer.getData("Text"); + if (text) { + DragDropHelper.dragData.text = text; + } + } + return DragDropHelper.dragData; + }; + DragDropHelper.prototype.clearData = function () { + //this.ddTarget = null; + DragDropHelper.dragData = { text: "", json: null }; + var prev = DragDropHelper.prevEvent; + prev.element = null; + prev.x = -1; + prev.y = -1; + this.prevCoordinates.x = -1; + this.prevCoordinates.y = -1; + }; + return DragDropHelper; +}()); + +DragDropHelper.edgeHeight = 20; +DragDropHelper.dataStart = "surveyjs,"; +DragDropHelper.dragData = { text: "", json: null }; +DragDropHelper.prevEvent = { element: null, x: -1, y: -1 }; +DragDropHelper.counter = 1; +DragDropHelper.ScrollDelay = 30; +DragDropHelper.ScrollOffset = 100; + + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyEditors_propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjectProperty; }); + + + +var SurveyObjectProperty = (function () { + function SurveyObjectProperty(property, onPropertyChanged, propertyEditorOptions) { + if (onPropertyChanged === void 0) { onPropertyChanged = null; } + if (propertyEditorOptions === void 0) { propertyEditorOptions = null; } + this.property = property; + this.isApplyingNewValue = false; + this.onPropertyChanged = onPropertyChanged; + this.name = this.property.name; + this.disabled = property["readOnly"]; + this.koValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.choices = property.choices; + var self = this; + this.editorType = property.type; + //TODO + if (this.choices != null) { + this.editorType = "dropdown"; + } + var onItemChanged = function (newValue) { self.onApplyEditorValue(newValue); }; + this.editor = __WEBPACK_IMPORTED_MODULE_1__propertyEditors_propertyEditorBase__["a" /* SurveyPropertyEditorBase */].createEditor(this.editorType, onItemChanged); + this.editor.onGetLocale = this.doOnGetLocale; + this.editor.options = propertyEditorOptions; + this.editorType = this.editor.editorType; + this.modalName = "modelEditor" + this.editorType + this.name; + this.modalNameTarget = "#" + this.modalName; + this.koValue.subscribe(function (newValue) { self.onkoValueChanged(newValue); }); + this.koText = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.getValueText(self.koValue()); }); + this.koIsDefault = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.property.isDefaultValue(self.koValue()); }); + } + SurveyObjectProperty.prototype.doOnGetLocale = function () { + if (this.object && this.object["getLocale"]) + return this.object.getLocale(); + return ""; + }; + Object.defineProperty(SurveyObjectProperty.prototype, "object", { + get: function () { return this.objectValue; }, + set: function (value) { + this.objectValue = value; + this.updateValue(); + }, + enumerable: true, + configurable: true + }); + SurveyObjectProperty.prototype.updateValue = function () { + this.isValueUpdating = true; + this.koValue(this.getValue()); + this.editor.setObject(this.object); + this.editor.setTitle(__WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("pe.editProperty")["format"](this.property.name)); + this.updateEditorData(this.koValue()); + this.isValueUpdating = false; + }; + SurveyObjectProperty.prototype.onApplyEditorValue = function (newValue) { + this.isApplyingNewValue = true; + this.koValue(newValue); + this.isApplyingNewValue = false; + }; + SurveyObjectProperty.prototype.onkoValueChanged = function (newValue) { + if (!this.isApplyingNewValue) { + this.updateEditorData(newValue); + } + if (this.object == null) + return; + if (this.getValue() == newValue) + return; + if (this.onPropertyChanged != null && !this.isValueUpdating) + this.onPropertyChanged(this, newValue); + }; + SurveyObjectProperty.prototype.updateEditorData = function (newValue) { + this.editor.value = newValue; + }; + SurveyObjectProperty.prototype.getValue = function () { + if (this.property["getPropertyValue"]) + return this.property["getPropertyValue"](this.object); //TODO make the only call + if (this.property.hasToUseGetValue) + return this.property.getValue(this.object); + return this.object[this.name]; + }; + SurveyObjectProperty.prototype.getValueText = function (value) { return this.editor.getValueText(value); }; + return SurveyObjectProperty; +}()); + + + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyVerbs; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyVerbItem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyVerbChangeTypeItem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyVerbChangePageItem; }); + + + + + +var SurveyVerbs = (function () { + function SurveyVerbs(onModifiedCallback) { + this.onModifiedCallback = onModifiedCallback; + this.koVerbs = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + this.koHasVerbs = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + var classes = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"].metaData.getChildrenClasses("selectbase", true); + this.choicesClasses = []; + for (var i = 0; i < classes.length; i++) { + this.choicesClasses.push(classes[i].name); + } + } + Object.defineProperty(SurveyVerbs.prototype, "survey", { + get: function () { return this.surveyValue; }, + set: function (value) { + if (this.survey == value) + return; + this.surveyValue = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyVerbs.prototype, "obj", { + get: function () { return this.objValue; }, + set: function (value) { + if (this.objValue == value) + return; + this.objValue = value; + this.buildVerbs(); + }, + enumerable: true, + configurable: true + }); + SurveyVerbs.prototype.buildVerbs = function () { + var array = []; + var objType = __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].getObjectType(this.obj); + if (objType == __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["a" /* ObjType */].Question) { + var question = this.obj; + if (this.survey.pages.length > 1) { + array.push(new SurveyVerbChangePageItem(this.survey, question, this.onModifiedCallback)); + } + if (this.choicesClasses.indexOf(question.getType()) > -1) { + array.push(new SurveyVerbChangeTypeItem(this.survey, question, this.onModifiedCallback)); + } + } + this.koVerbs(array); + this.koHasVerbs(array.length > 0); + }; + return SurveyVerbs; +}()); + +var SurveyVerbItem = (function () { + function SurveyVerbItem(survey, question, onModifiedCallback) { + this.survey = survey; + this.question = question; + this.onModifiedCallback = onModifiedCallback; + this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + this.koSelectedItem = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + } + Object.defineProperty(SurveyVerbItem.prototype, "text", { + get: function () { return ""; }, + enumerable: true, + configurable: true + }); + return SurveyVerbItem; +}()); + +var SurveyVerbChangeTypeItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyVerbChangeTypeItem, _super); + function SurveyVerbChangeTypeItem(survey, question, onModifiedCallback) { + var _this = _super.call(this, survey, question, onModifiedCallback) || this; + _this.survey = survey; + _this.question = question; + _this.onModifiedCallback = onModifiedCallback; + var classes = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"].metaData.getChildrenClasses("selectbase", true); + var array = []; + for (var i = 0; i < classes.length; i++) { + array.push({ value: classes[i].name, text: __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("qt." + classes[i].name) }); + } + _this.koItems(array); + _this.koSelectedItem(question.getType()); + var self = _this; + _this.koSelectedItem.subscribe(function (newValue) { self.changeType(newValue); }); + return _this; + } + Object.defineProperty(SurveyVerbChangeTypeItem.prototype, "text", { + get: function () { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("pe.verbChangeType"); }, + enumerable: true, + configurable: true + }); + SurveyVerbChangeTypeItem.prototype.changeType = function (questionType) { + if (questionType == this.question.getType()) + return; + var page = this.survey.getPageByQuestion(this.question); + var index = page.questions.indexOf(this.question); + var newQuestion = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["QuestionFactory"].Instance.createQuestion(questionType, this.question.name); + var jsonObj = new __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"](); + var json = jsonObj.toJsonObject(this.question); + jsonObj.toObject(json, newQuestion); + page.removeQuestion(this.question); + page.addQuestion(newQuestion, index); + if (this.onModifiedCallback) + this.onModifiedCallback(); + }; + return SurveyVerbChangeTypeItem; +}(SurveyVerbItem)); + +var SurveyVerbChangePageItem = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyVerbChangePageItem, _super); + function SurveyVerbChangePageItem(survey, question, onModifiedCallback) { + var _this = _super.call(this, survey, question, onModifiedCallback) || this; + _this.survey = survey; + _this.question = question; + _this.onModifiedCallback = onModifiedCallback; + var array = []; + for (var i = 0; i < _this.survey.pages.length; i++) { + var page = _this.survey.pages[i]; + array.push({ value: page, text: __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].getObjectName(page) }); + } + _this.koItems(array); + _this.prevPage = _this.survey.getPageByQuestion(question); + _this.koSelectedItem(_this.prevPage); + var self = _this; + _this.koSelectedItem.subscribe(function (newValue) { self.changePage(newValue); }); + return _this; + } + Object.defineProperty(SurveyVerbChangePageItem.prototype, "text", { + get: function () { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("pe.verbChangePage"); }, + enumerable: true, + configurable: true + }); + SurveyVerbChangePageItem.prototype.changePage = function (newPage) { + if (newPage == null || newPage == this.prevPage) + return; + this.prevPage.removeQuestion(this.question); + newPage.addQuestion(this.question); + if (this.onModifiedCallback) + this.onModifiedCallback(); + }; + return SurveyVerbChangePageItem; +}(SurveyVerbItem)); + + + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(6); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPagesEditor; }); + + +var SurveyPagesEditor = (function () { + function SurveyPagesEditor(onAddNewPageCallback, onSelectPageCallback, onMovePageCallback, onDeletePageCallback) { + if (onAddNewPageCallback === void 0) { onAddNewPageCallback = null; } + if (onSelectPageCallback === void 0) { onSelectPageCallback = null; } + if (onMovePageCallback === void 0) { onMovePageCallback = null; } + if (onDeletePageCallback === void 0) { onDeletePageCallback = null; } + this.draggingPage = null; + this.koPages = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); + this.koIsValid = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + this.onAddNewPageCallback = onAddNewPageCallback; + this.onSelectPageCallback = onSelectPageCallback; + this.onMovePageCallback = onMovePageCallback; + this.onDeletePageCallback = onDeletePageCallback; + var self = this; + this.selectPageClick = function (pageItem) { + if (self.onSelectPageCallback) { + self.onSelectPageCallback(pageItem.page); + } + }; + this.keyDown = function (el, e) { self.onKeyDown(el, e); }; + this.dragStart = function (el) { self.draggingPage = el; }; + this.dragOver = function (el) { }; + this.dragEnd = function () { self.draggingPage = null; }; + this.dragDrop = function (el) { self.moveDraggingPageTo(el); }; + } + Object.defineProperty(SurveyPagesEditor.prototype, "survey", { + get: function () { return this.surveyValue; }, + set: function (value) { + this.surveyValue = value; + this.koIsValid(this.surveyValue != null); + this.updatePages(); + }, + enumerable: true, + configurable: true + }); + SurveyPagesEditor.prototype.setSelectedPage = function (page) { + var pages = this.koPages(); + for (var i = 0; i < pages.length; i++) { + pages[i].koSelected(pages[i].page == page); + } + }; + SurveyPagesEditor.prototype.addNewPageClick = function () { + if (this.onAddNewPageCallback) { + this.onAddNewPageCallback(); + } + }; + SurveyPagesEditor.prototype.removePage = function (page) { + var index = this.getIndexByPage(page); + if (index > -1) { + this.koPages.splice(index, 1); + } + }; + SurveyPagesEditor.prototype.changeName = function (page) { + var index = this.getIndexByPage(page); + if (index > -1) { + this.koPages()[index].title(__WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectName(page)); + } + }; + SurveyPagesEditor.prototype.getIndexByPage = function (page) { + var pages = this.koPages(); + for (var i = 0; i < pages.length; i++) { + if (pages[i].page == page) + return i; + } + return -1; + }; + SurveyPagesEditor.prototype.onKeyDown = function (el, e) { + if (this.koPages().length <= 1) + return; + var pages = this.koPages(); + var pageIndex = -1; + for (var i = 0; i < pages.length; i++) { + if (pages[i].page && pages[i].koSelected()) { + pageIndex = i; + } + } + if (pageIndex < 0) + return; + if (e.keyCode == 46 && this.onDeletePageCallback) + this.onDeletePageCallback(el.page); + if ((e.keyCode == 37 || e.keyCode == 39) && this.onSelectPageCallback) { + pageIndex += (e.keyCode == 37 ? -1 : 1); + if (pageIndex < 0) + pageIndex = pages.length - 1; + if (pageIndex >= pages.length) + pageIndex = 0; + var page = pages[pageIndex].page; + this.onSelectPageCallback(page); + this.setSelectedPage(page); + } + }; + SurveyPagesEditor.prototype.updatePages = function () { + if (this.surveyValue == null) { + this.koPages([]); + return; + } + var pages = []; + for (var i = 0; i < this.surveyValue.pages.length; i++) { + var page = this.surveyValue.pages[i]; + pages.push({ + title: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](__WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectName(page)), page: page, koSelected: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false) + }); + } + this.koPages(pages); + }; + SurveyPagesEditor.prototype.moveDraggingPageTo = function (toPage) { + if (toPage == null || toPage == this.draggingPage) { + this.draggingPage = null; + return; + } + if (this.draggingPage == null) + return; + var index = this.koPages().indexOf(this.draggingPage); + var indexTo = this.koPages().indexOf(toPage); + if (this.onMovePageCallback) { + this.onMovePageCallback(index, indexTo); + } + }; + return SurveyPagesEditor; +}()); + + + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__objectEditor__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyValidatorsEditor; }); +/* unused harmony export SurveyPropertyValidatorItem */ + + + + + + +var SurveyPropertyValidatorsEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyValidatorsEditor, _super); + function SurveyPropertyValidatorsEditor() { + var _this = _super.call(this) || this; + _this.availableValidators = []; + _this.validatorClasses = []; + var self = _this; + _this.selectedObjectEditor = new __WEBPACK_IMPORTED_MODULE_4__objectEditor__["a" /* SurveyObjectEditor */](); + _this.selectedObjectEditor.onPropertyValueChanged.add(function (sender, options) { + self.onPropertyValueChanged(options.property, options.object, options.newValue); + }); + _this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); + _this.koSelected.subscribe(function (newValue) { self.selectedObjectEditor.selectedObject = newValue != null ? newValue.validator : null; }); + _this.validatorClasses = __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.getChildrenClasses("surveyvalidator", true); + _this.availableValidators = _this.getAvailableValidators(); + _this.onDeleteClick = function () { self.koItems.remove(self.koSelected()); }; + _this.onAddClick = function (validatorType) { self.addItem(validatorType); }; + return _this; + } + Object.defineProperty(SurveyPropertyValidatorsEditor.prototype, "editorType", { + get: function () { return "validators"; }, + enumerable: true, + configurable: true + }); + SurveyPropertyValidatorsEditor.prototype.onValueChanged = function () { + _super.prototype.onValueChanged.call(this); + if (this.koSelected) { + this.koSelected(this.koItems().length > 0 ? this.koItems()[0] : null); + } + }; + SurveyPropertyValidatorsEditor.prototype.createEditorItem = function (item) { + var jsonObj = new __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"](); + var validator = __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.createClass(item.getType()); + jsonObj.toObject(item, validator); + return new SurveyPropertyValidatorItem(validator); + }; + SurveyPropertyValidatorsEditor.prototype.createItemFromEditorItem = function (editorItem) { + var item = editorItem; + return item.validator; + }; + SurveyPropertyValidatorsEditor.prototype.addItem = function (validatorType) { + var newValidator = new SurveyPropertyValidatorItem(__WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.createClass(validatorType)); + this.koItems.push(newValidator); + this.koSelected(newValidator); + }; + SurveyPropertyValidatorsEditor.prototype.getAvailableValidators = function () { + var result = []; + for (var i = 0; i < this.validatorClasses.length; i++) { + result.push(this.validatorClasses[i].name); + } + return result; + }; + SurveyPropertyValidatorsEditor.prototype.onPropertyValueChanged = function (property, obj, newValue) { + if (this.koSelected() == null) + return; + this.koSelected().validator[property.name] = newValue; + }; + return SurveyPropertyValidatorsEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); + +var SurveyPropertyValidatorItem = (function () { + function SurveyPropertyValidatorItem(validator) { + this.validator = validator; + this.text = validator.getType(); + } + return SurveyPropertyValidatorItem; +}()); + +__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("validators", function () { return new SurveyPropertyValidatorsEditor(); }); + + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionEditorDefinition; }); + +var SurveyQuestionEditorDefinition = (function () { + function SurveyQuestionEditorDefinition() { + } + SurveyQuestionEditorDefinition.getProperties = function (className) { + var properties = []; + var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); + for (var i = allDefinitions.length - 1; i >= 0; i--) { + var def = allDefinitions[i]; + if (def.properties) { + for (var j = 0; j < def.properties.length; j++) { + properties.push(def.properties[j]); + } + } + } + return properties; + }; + SurveyQuestionEditorDefinition.getTabs = function (className) { + var tabs = []; + var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); + for (var i = allDefinitions.length - 1; i >= 0; i--) { + var def = allDefinitions[i]; + if (def.tabs) { + for (var j = 0; j < def.tabs.length; j++) { + tabs.push(def.tabs[j]); + } + } + } + tabs.sort(function (a, b) { return a.index < b.index ? -1 : (a.index > b.index ? 1 : 0); }); + return tabs; + }; + SurveyQuestionEditorDefinition.getAllDefinitionsByClass = function (className) { + var result = []; + if (className.indexOf('@') > -1 && SurveyQuestionEditorDefinition.definition[className]) { + result.push(SurveyQuestionEditorDefinition.definition[className]); + return result; + } + while (className) { + var metaClass = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData["findClass"](className); + if (!metaClass) + break; + if (SurveyQuestionEditorDefinition.definition[metaClass.name]) { + result.push(SurveyQuestionEditorDefinition.definition[metaClass.name]); + } + className = metaClass.parentName; + } + return result; + }; + return SurveyQuestionEditorDefinition; +}()); + +SurveyQuestionEditorDefinition.definition = { + "questionbase": { + properties: ["name", "title", { name: "visible", category: "checks" }, { name: "isRequired", category: "checks" }, { name: "startWithNewLine", category: "checks" }], + tabs: [{ name: "visibleIf", index: 100 }] + }, + "comment": { + properties: ["rows", "placeHolder"] + }, + "file": { + properties: [{ name: "showPreview", category: "imageChecks" }, { name: "storeDataAsText", category: "imageChecks" }, "maxSize", "imageHeight", "imageWidth"] + }, + "html": { + tabs: [{ name: "html", index: 10 }] + }, + "matrixdropdownbase": { + properties: ["cellType"], + tabs: [{ name: "columns", index: 10 }, { name: "rows", index: 11 }, { name: "choices", index: 12 }] + }, + "matrixdynamic": { + properties: ["rowCount", "addRowText", "removeRowText"] + }, + "matrix": { + tabs: [{ name: "columns", index: 10 }, { name: "rows", index: 11 }] + }, + "multipletext": { + properties: ["colCount"], + tabs: [{ name: "items", index: 10 }] + }, + "rating": { + properties: ["minRateDescription", "maxRateDescription"], + tabs: [{ name: "rateValues", index: 10 }] + }, + "selectbase": { + properties: ["hasOther", "choicesOrder", "colCount"], + tabs: [{ name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }] + }, + "dropdown": { + properties: ["optionsCaption"] + }, + "text": { + properties: ["inputType", "placeHolder"] + }, + "matrixdropdowncolumn@checkbox": { + properties: ["hasOther", "choicesOrder", "colCount"], + tabs: [{ name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }] + }, + "matrixdropdowncolumn@radiogroup": { + properties: ["hasOther", "choicesOrder", "colCount"], + tabs: [{ name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }] + }, + "matrixdropdowncolumn@dropdown": { + properties: ["hasOther", "choicesOrder", "optionsCaption"], + tabs: [{ name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }] + }, + "matrixdropdowncolumn@text": { + properties: ["inputType", "placeHolder"] + }, + "matrixdropdowncolumn@comment": { + properties: ["placeHolder"] + }, + "panel": { + properties: ["name", "title", { name: "visible", category: "checks" }], + tabs: [{ name: "visibleIf", index: 100 }] + } +}; + + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyQuestionEditorGeneralProperty; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionEditorGeneralRow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionEditorGeneralProperties; }); + + + +var SurveyQuestionEditorGeneralProperty = (function () { + function SurveyQuestionEditorGeneralProperty(obj, property, isRequired) { + if (isRequired === void 0) { isRequired = false; } + this.obj = obj; + this.property = property; + this.isRequired = isRequired; + this.choices = []; + this.name = property.name; + this.disabled = property["readOnly"]; + this.editType = "text"; + if (property.type == "text") + this.editType = "textarea"; + if (property.type == "boolean") + this.editType = "check"; + if (property.choices) { + this.choices = property.choices; + this.editType = "dropdown"; + } + this.koValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.koErrorText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); + this.koHasError = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + this.title = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe." + this.name); + if (!this.title) + this.title = this.name; + this.reset(); + } + SurveyQuestionEditorGeneralProperty.prototype.hasError = function () { + var isError = this.isRequired && (this.koValue() !== false) && !this.koValue(); + this.koErrorText(isError ? __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.propertyIsEmpty") : ""); + this.koHasError(isError); + return isError; + }; + SurveyQuestionEditorGeneralProperty.prototype.apply = function () { + this.obj[this.name] = this.koValue(); + }; + SurveyQuestionEditorGeneralProperty.prototype.reset = function () { + this.koValue(this.getValue()); + }; + SurveyQuestionEditorGeneralProperty.prototype.getValue = function () { + if (this.property["getPropertyValue"]) + return this.property["getPropertyValue"](this.obj); //TODO make the only call + if (this.property.hasToUseGetValue) + return this.property.getValue(this.obj); + return this.obj[this.name]; + }; + return SurveyQuestionEditorGeneralProperty; +}()); + +var SurveyQuestionEditorGeneralRow = (function () { + function SurveyQuestionEditorGeneralRow(obj, property, isPropertyRequired) { + if (isPropertyRequired === void 0) { isPropertyRequired = false; } + this.obj = obj; + this.properties = []; + this.addProperty(property, isPropertyRequired); + } + SurveyQuestionEditorGeneralRow.prototype.addProperty = function (property, isPropertyRequired) { + if (isPropertyRequired === void 0) { isPropertyRequired = false; } + this.properties.push(new SurveyQuestionEditorGeneralProperty(this.obj, property, isPropertyRequired)); + }; + SurveyQuestionEditorGeneralRow.prototype.hasError = function () { + var isError = false; + for (var i = 0; i < this.properties.length; i++) { + isError = this.properties[i].hasError() || isError; + } + return isError; + }; + return SurveyQuestionEditorGeneralRow; +}()); + +var SurveyQuestionEditorGeneralProperties = (function () { + function SurveyQuestionEditorGeneralProperties(obj, properties, onCanShowPropertyCallback) { + if (onCanShowPropertyCallback === void 0) { onCanShowPropertyCallback = null; } + this.obj = obj; + this.rows = []; + this.onCanShowPropertyCallback = onCanShowPropertyCallback; + this.properties = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.getProperties(this.obj.getType()); + this.buildRows(properties); + } + SurveyQuestionEditorGeneralProperties.prototype.apply = function () { + this.applyOrReset(true); + }; + SurveyQuestionEditorGeneralProperties.prototype.reset = function () { + this.applyOrReset(false); + }; + SurveyQuestionEditorGeneralProperties.prototype.hasError = function () { + var isError = false; + for (var i = 0; i < this.rows.length; i++) { + isError = this.rows[i].hasError() || isError; + } + return isError; + }; + SurveyQuestionEditorGeneralProperties.prototype.applyOrReset = function (isApply) { + for (var i = 0; i < this.rows.length; i++) { + for (var j = 0; j < this.rows[i].properties.length; j++) { + if (isApply) + this.rows[i].properties[j].apply(); + else + this.rows[i].properties[j].reset(); + } + } + }; + SurveyQuestionEditorGeneralProperties.prototype.buildRows = function (properties) { + var requiredProperties = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.getRequiredProperties(this.obj.getType()); + if (!requiredProperties) + requiredProperties = []; + for (var i = 0; i < properties.length; i++) { + var name = this.getName(properties[i]); + var jsonProperty = this.getProperty(name); + if (!jsonProperty) + continue; + var isPropertyRequired = requiredProperties.indexOf(name) > -1; + var row = this.getRowByCategory(properties[i].category); + if (row) + row.addProperty(jsonProperty, isPropertyRequired); + else { + row = new SurveyQuestionEditorGeneralRow(this.obj, jsonProperty, isPropertyRequired); + if (properties[i].category) + row.category = properties[i].category; + this.rows.push(row); + } + if (properties[i].title) { + row.properties[row.properties.length - 1].title = properties[i].title; + } + } + }; + SurveyQuestionEditorGeneralProperties.prototype.getName = function (prop) { + if (!prop) + return null; + if (typeof prop === "string") + return prop; + if (prop.name) + return prop.name; + return null; + }; + SurveyQuestionEditorGeneralProperties.prototype.getRowByCategory = function (category) { + if (!category) + return null; + for (var i = 0; i < this.rows.length; i++) { + if (this.rows[i].category == category) + return this.rows[i]; + } + return null; + }; + SurveyQuestionEditorGeneralProperties.prototype.getProperty = function (propertyName) { + if (!propertyName) + return null; + var property = null; + for (var i = 0; i < this.properties.length; i++) { + if (this.properties[i].name == propertyName) { + property = this.properties[i]; + break; + } + } + //TODO code duplication. This code is in 3 places already, do refactoring. + if (property && property["visible"] === false) + property = null; + if (property && this.onCanShowPropertyCallback) { + if (!this.onCanShowPropertyCallback(this.obj, property)) + property = null; + } + return property; + }; + return SurveyQuestionEditorGeneralProperties; +}()); + + + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionToolbox; }); + + + +var QuestionToolbox = (function () { + function QuestionToolbox(supportedQuestions) { + if (supportedQuestions === void 0) { supportedQuestions = null; } + this.orderedQuestions = ["text", "checkbox", "radiogroup", "dropdown", "comment", "rating", "html"]; + this.copiedItemMaxCount = 3; + this.itemsValue = []; + this.koItems = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); + this.createDefaultItems(supportedQuestions); + } + Object.defineProperty(QuestionToolbox.prototype, "jsonText", { + get: function () { + return JSON.stringify(this.itemsValue); + }, + set: function (value) { + this.itemsValue = (value) ? JSON.parse(value) : []; + this.onItemsChanged(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionToolbox.prototype, "copiedJsonText", { + get: function () { + return JSON.stringify(this.copiedItems); + }, + set: function (value) { + var newItems = (value) ? JSON.parse(value) : []; + this.clearCopiedItems(); + for (var i = 0; i < newItems.length; i++) { + newItems[i].isCopied = true; + this.addItem(newItems[i]); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionToolbox.prototype, "items", { + get: function () { return this.itemsValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(QuestionToolbox.prototype, "copiedItems", { + get: function () { + var result = []; + for (var i = 0; i < this.itemsValue.length; i++) { + if (this.itemsValue[i].isCopied) + result.push(this.itemsValue[i]); + } + return result; + }, + enumerable: true, + configurable: true + }); + QuestionToolbox.prototype.addItems = function (items, clearAll) { + if (clearAll === void 0) { clearAll = false; } + if (clearAll) { + this.clearItems(); + } + this.onItemsChanged(); + }; + QuestionToolbox.prototype.addCopiedItem = function (question) { + var item = { name: question.name, title: question.name, isCopied: true, iconName: "icon-default", json: this.getQuestionJSON(question) }; + if (this.replaceItem(item)) + return; + var copied = this.copiedItems; + if (this.copiedItemMaxCount > 0 && copied.length == this.copiedItemMaxCount) + this.removeItem(copied[this.copiedItemMaxCount - 1].name); + this.addItem(item); + }; + QuestionToolbox.prototype.addItem = function (item) { + this.itemsValue.push(item); + this.onItemsChanged(); + }; + QuestionToolbox.prototype.replaceItem = function (item) { + var index = this.indexOf(item.name); + if (index < 0) + return; + this.itemsValue[index] = item; + this.onItemsChanged(); + return true; + }; + QuestionToolbox.prototype.removeItem = function (name) { + var index = this.indexOf(name); + if (index < 0) + return false; + this.itemsValue.splice(index, 1); + this.onItemsChanged(); + return true; + }; + QuestionToolbox.prototype.clearItems = function () { + this.itemsValue = []; + this.onItemsChanged(); + }; + QuestionToolbox.prototype.clearCopiedItems = function () { + var removedItems = this.copiedItems; + for (var i = 0; i < removedItems.length; i++) { + this.removeItem(removedItems[i].name); + } + }; + QuestionToolbox.prototype.onItemsChanged = function () { + this.koItems(this.itemsValue); + }; + QuestionToolbox.prototype.indexOf = function (name) { + for (var i = 0; i < this.itemsValue.length; i++) { + if (this.itemsValue[i].name == name) + return i; + } + return -1; + }; + QuestionToolbox.prototype.createDefaultItems = function (supportedQuestions) { + var questions = this.getQuestionTypes(supportedQuestions); + for (var i = 0; i < questions.length; i++) { + var name = questions[i]; + var question = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ElementFactory"].Instance.createElement(name, "q1"); + if (!question) { + question = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData.createClass(name); + } + var json = this.getQuestionJSON(question); + var item = { name: name, iconName: 'icon-' + name, title: __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString('qt.' + name), json: json, isCopied: false }; + this.itemsValue.push(item); + } + this.onItemsChanged(); + }; + QuestionToolbox.prototype.getQuestionJSON = function (question) { + var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(question); + json.type = question.getType(); + return json; + }; + QuestionToolbox.prototype.getQuestionTypes = function (supportedQuestions) { + var allTypes = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ElementFactory"].Instance.getAllTypes(); + if (!supportedQuestions || supportedQuestions.length == 0) + supportedQuestions = allTypes; + var questions = []; + for (var i = 0; i < this.orderedQuestions.length; i++) { + var name = this.orderedQuestions[i]; + if (supportedQuestions.indexOf(name) > -1 && allTypes.indexOf(name) > -1) + questions.push(name); + } + for (var i = 0; i < supportedQuestions.length; i++) { + var name = supportedQuestions[i]; + if (questions.indexOf(supportedQuestions[i]) < 0 && allTypes.indexOf(name) > -1) + questions.push(name); + } + return questions; + }; + return QuestionToolbox; +}()); + + + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__json5__ = __webpack_require__(11); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyEmbedingWindow; }); + + + +var SurveyEmbedingWindow = (function () { + function SurveyEmbedingWindow() { + this.surveyId = null; + this.surveyPostId = null; + this.generateValidJSON = false; + this.surveyJSVersion = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Version"]; + this.surveyCDNPath = "https://surveyjs.azureedge.net/"; + this.platformSurveyJSPrefix = { + "angular": "angular", + "jquery": "jquery", + "knockout": "ko", + "react": "react", + "vue": "vue" + }; + this.platformJSonPage = { + "angular": "@Component({\n selector: 'ng-app',\n template: \n
\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyNG.render(\"surveyElement\", { model: survey });\n }\n}", + "jquery": "var survey = new Survey.Model(surveyJSON);\n$(\"#surveyContainer\").Survey({\n model: survey,\n onComplete: sendDataToServer\n});", + "knockout": "var survey = new Survey.Model(surveyJSON, \"surveyContainer\");\nsurvey.onComplete.add(sendDataToServer);", + "react": "ReactDOM.render(\n , document.getElementById(\"surveyContainer\"));", + "vue": "var survey = new Survey.Model(surveyJSON);\nnew Vue({ el: '#surveyContainer', data: { survey: survey } });" + }; + this.platformJSonWindow = { + "angular": "@Component({\n selector: 'ng-app',\n template: \n
\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyWindowNG.render(\"surveyElement\", { model: survey });\n }\n}", + "jquery": "var survey = new Survey.Model(surveyJSON);\n$(\"#surveyContainer\").SurveyWindow({\n model: survey,\n onComplete: sendDataToServer\n});", + "knockout": "var survey = new Survey.Model(surveyJSON);\nsurveyWindow.show();\nsurvey.onComplete.add(sendDataToServer);", + "react": "ReactDOM.render(\n , document.getElementById(\"surveyContainer\"));", + "vue": "" + }; + this.platformHtmlonPage = { + "angular": "", + "jquery": "
", + "knockout": "
", + "react": "
", + "vue": "
" + }; + this.platformHtmlonWindow = { + "angular": "", + "jquery": "
", + "knockout": "", + "react": "
", + "vue": "
" + }; + var self = this; + this.koLibraryVersion = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("jquery"); + this.koShowAsWindow = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("page"); + this.koScriptUsing = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("bootstrap"); + this.koHasIds = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + this.koLoadSurvey = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + this.koHeadText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); + this.koJavaText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); + this.koBodyText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); + this.koVisibleHtml = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.koShowAsWindow() == "page" || self.platformHtmlonWindow[self.koLibraryVersion()] != ""; }); + this.koLibraryVersion.subscribe(function (newValue) { self.setHeadText(); self.setJavaTest(); self.setBodyText(); }); + this.koShowAsWindow.subscribe(function (newValue) { self.setJavaTest(); self.setBodyText(); }); + this.koScriptUsing.subscribe(function (newValue) { self.setHeadText(); self.setJavaTest(); }); + this.koLoadSurvey.subscribe(function (newValue) { self.setJavaTest(); }); + this.surveyEmbedingHead = null; + } + Object.defineProperty(SurveyEmbedingWindow.prototype, "json", { + get: function () { return this.jsonValue; }, + set: function (value) { this.jsonValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEmbedingWindow.prototype, "hasAceEditor", { + get: function () { return typeof ace !== "undefined"; }, + enumerable: true, + configurable: true + }); + SurveyEmbedingWindow.prototype.show = function () { + if (this.hasAceEditor && this.surveyEmbedingHead == null) { + this.surveyEmbedingHead = this.createEditor("surveyEmbedingHead"); + this.surveyEmbedingBody = this.createEditor("surveyEmbedingBody"); + this.surveyEmbedingJava = this.createEditor("surveyEmbedingJava"); + } + this.koHasIds(this.surveyId && this.surveyPostId); + this.setBodyText(); + this.setHeadText(); + this.setJavaTest(); + }; + SurveyEmbedingWindow.prototype.setBodyText = function () { + this.setTextToEditor(this.surveyEmbedingBody, this.koBodyText, this.platformHtmlonPage[this.koLibraryVersion()]); + }; + Object.defineProperty(SurveyEmbedingWindow.prototype, "getCDNPath", { + get: function () { return this.surveyCDNPath + this.surveyJSVersion + "/"; }, + enumerable: true, + configurable: true + }); + SurveyEmbedingWindow.prototype.setHeadText = function () { + var str = "\n"; + if (this.koScriptUsing() != "bootstrap") { + str += "\n"; + } + str += "\n"; + this.setTextToEditor(this.surveyEmbedingHead, this.koHeadText, str); + }; + SurveyEmbedingWindow.prototype.setJavaTest = function () { + this.setTextToEditor(this.surveyEmbedingJava, this.koJavaText, this.getJavaText()); + }; + SurveyEmbedingWindow.prototype.createEditor = function (elementName) { + var editor = ace.edit(elementName); + editor.setTheme("ace/theme/monokai"); + editor.session.setMode("ace/mode/json"); + editor.setShowPrintMargin(false); + editor.renderer.setShowGutter(false); + editor.setReadOnly(true); + return editor; + }; + SurveyEmbedingWindow.prototype.getJavaText = function () { + var isOnPage = this.koShowAsWindow() == "page"; + var str = this.getSaveFunc() + "\n\n"; + str += isOnPage ? this.platformJSonPage[this.koLibraryVersion()] : this.platformJSonWindow[this.koLibraryVersion()]; + var jsonText = "var surveyJSON = " + this.getJsonText() + "\n\n"; + return this.getSetCss() + "\n" + jsonText + str; + }; + SurveyEmbedingWindow.prototype.getSetCss = function () { + if (this.koScriptUsing() != "bootstrap") + return ""; + return "Survey.Survey.cssType = \"bootstrap\";\n"; + }; + SurveyEmbedingWindow.prototype.getSaveFunc = function () { + return "function sendDataToServer(survey) {\n" + this.getSaveFuncCode() + "\n}"; + }; + SurveyEmbedingWindow.prototype.getSaveFuncCode = function () { + if (this.koHasIds()) + return " survey.sendResult('" + this.surveyPostId + "');"; + return " //send Ajax request to your web server.\n alert(\"The results are:\" + JSON.stringify(s.data));"; + }; + SurveyEmbedingWindow.prototype.getJsonText = function () { + if (this.koHasIds() && this.koLoadSurvey()) { + return "{ surveyId: '" + this.surveyId + "'}"; + } + if (this.generateValidJSON) + return JSON.stringify(this.json); + return new __WEBPACK_IMPORTED_MODULE_2__json5__["a" /* SurveyJSON5 */]().stringify(this.json); + }; + SurveyEmbedingWindow.prototype.setTextToEditor = function (editor, koText, text) { + if (editor) + editor.setValue(text); + if (koText) + koText(text); + }; + return SurveyEmbedingWindow; +}()); + + + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(6); +/* unused harmony export SurveyObjectItem */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjects; }); + + +var SurveyObjectItem = (function () { + function SurveyObjectItem() { + this.level = 0; + } + return SurveyObjectItem; +}()); + +var SurveyObjects = (function () { + function SurveyObjects(koObjects, koSelected) { + this.koObjects = koObjects; + this.koSelected = koSelected; + } + Object.defineProperty(SurveyObjects.prototype, "survey", { + get: function () { return this.surveyValue; }, + set: function (value) { + if (this.survey == value) + return; + this.surveyValue = value; + this.rebuild(); + }, + enumerable: true, + configurable: true + }); + SurveyObjects.prototype.addPage = function (page) { + this.addElement(page, null); + }; + SurveyObjects.prototype.addElement = function (element, parent) { + var parentIndex = parent != null ? this.getItemIndex(parent) : 0; + if (parentIndex < 0) + return; + var elements = parent != null ? parent.elements : this.survey.pages; + var elementIndex = elements.indexOf(element); + var newIndex = elementIndex + 1 + parentIndex; + if (elementIndex > 0) { + var prevElement = elements[elementIndex - 1]; + newIndex = this.getItemIndex(prevElement) + this.getAllElementCount(prevElement) + 1; + } + var item = this.createItem(element, this.koObjects()[parentIndex]); + this.addItem(item, newIndex); + if (element.elements) { + var objs = []; + this.buildElements(objs, element.elements, item); + for (var i = 0; i < objs.length; i++) { + this.koObjects.splice(newIndex + 1 + i, 0, objs[i]); + } + } + this.koSelected(item); + }; + SurveyObjects.prototype.selectObject = function (obj) { + var objs = this.koObjects(); + for (var i = 0; i < objs.length; i++) { + if (objs[i].value == obj) { + this.koSelected(objs[i]); + return; + } + } + }; + SurveyObjects.prototype.removeObject = function (obj) { + var index = this.getItemIndex(obj); + if (index < 0) + return; + var countToRemove = 1 + this.getAllElementCount(obj); + this.koObjects.splice(index, countToRemove); + }; + SurveyObjects.prototype.nameChanged = function (obj) { + var index = this.getItemIndex(obj); + if (index < 0) + return; + this.koObjects()[index].text(this.getText(this.koObjects()[index])); + }; + SurveyObjects.prototype.selectNextQuestion = function (isUp) { + var question = this.getSelectedQuestion(); + var itemIndex = this.getItemIndex(question); + if (itemIndex < 0) + return question; + var objs = this.koObjects(); + var newItemIndex = itemIndex + (isUp ? -1 : 1); + if (newItemIndex < objs.length && __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(objs[newItemIndex].value) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question) { + itemIndex = newItemIndex; + } + else { + newItemIndex = itemIndex; + while (newItemIndex < objs.length && __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(objs[newItemIndex].value) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question) { + itemIndex = newItemIndex; + newItemIndex += (isUp ? 1 : -1); + } + } + this.koSelected(objs[itemIndex]); + }; + SurveyObjects.prototype.getAllElementCount = function (element) { + if (!element.elements) + return 0; + var res = 0; + for (var i = 0; i < element.elements.length; i++) { + res += 1 + this.getAllElementCount(element.elements[i]); + } + return res; + }; + SurveyObjects.prototype.getSelectedQuestion = function () { + if (!this.koSelected()) + return null; + var obj = this.koSelected().value; + if (!obj) + return null; + return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question ? (obj) : null; + }; + SurveyObjects.prototype.addItem = function (item, index) { + if (index > this.koObjects().length) { + this.koObjects.push(item); + } + else { + this.koObjects.splice(index, 0, item); + } + }; + SurveyObjects.prototype.rebuild = function () { + var objs = []; + if (this.survey == null) { + this.koObjects(objs); + this.koSelected(null); + return; + } + var root = this.createItem(this.survey, null); + objs.push(root); + for (var i = 0; i < this.survey.pages.length; i++) { + var page = this.survey.pages[i]; + var pageItem = this.createItem(page, root); + objs.push(pageItem); + this.buildElements(objs, page.elements, pageItem); + } + this.koObjects(objs); + this.koSelected(this.survey); + }; + SurveyObjects.prototype.buildElements = function (objs, elements, parentItem) { + for (var i = 0; i < elements.length; i++) { + var el = elements[i]; + if (el.isPanel) { + var panelItem = this.createItem(el, parentItem); + objs.push(panelItem); + this.buildElements(objs, el.elements, panelItem); + } + else { + objs.push(this.createItem(el, parentItem)); + } + } + }; + SurveyObjects.prototype.createItem = function (value, parent) { + var item = new SurveyObjectItem(); + item.value = value; + item.level = parent != null ? parent.level + 1 : 0; + item.text = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.getText(item)); + return item; + }; + SurveyObjects.prototype.getItemIndex = function (value) { + var objs = this.koObjects(); + for (var i = 0; i < objs.length; i++) { + if (objs[i].value == value) + return i; + } + return -1; + }; + SurveyObjects.prototype.getText = function (item) { + if (item.level == 0) + return "Survey"; + var intend = SurveyObjects.intend; + for (var i = 1; i < item.level; i++) { + intend += SurveyObjects.intend; + } + return intend + __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectName(item.value); + }; + return SurveyObjects; +}()); + +SurveyObjects.intend = "."; + + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyForDesigner; }); + + + + +var SurveyForDesigner = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyForDesigner, _super); + function SurveyForDesigner(jsonObj, renderedElement, css) { + if (jsonObj === void 0) { jsonObj = null; } + if (renderedElement === void 0) { renderedElement = null; } + if (css === void 0) { css = null; } + var _this = _super.call(this, jsonObj, renderedElement, css) || this; + _this.onSelectedElementChanged = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); + _this.onEditQuestion = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); + _this.onCopyQuestion = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); + _this.onFastCopyQuestion = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); + _this.onDeleteCurrentObject = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); + var self = _this; + _this.setDesignMode(true); + _this.onAfterRenderPage.add(function (sender, options) { options.page["onAfterRenderPage"](options.htmlElement); }); + _this.onAfterRenderQuestion.add(function (sender, options) { options.question["onAfterRenderQuestion"](options.htmlElement); }); + _this.onAfterRenderPanel.add(function (sender, options) { options.panel["onAfterRenderPanel"](options.htmlElement); }); + _this.editQuestionClick = function () { self.onEditQuestion.fire(self, null); }; + _this.copyQuestionClick = function () { self.onCopyQuestion.fire(self, null); }; + _this.fastCopyQuestionClick = function () { self.onFastCopyQuestion.fire(self, null); }; + _this.deleteCurrentObjectClick = function () { self.onDeleteCurrentObject.fire(self, null); }; + return _this; + } + Object.defineProperty(SurveyForDesigner.prototype, "selectedElement", { + get: function () { return this.selectedElementValue; }, + set: function (value) { + if (value == this.selectedElementValue) + return; + var oldValue = this.selectedElementValue; + this.selectedElementValue = value; + if (oldValue != null) { + oldValue["onSelectedElementChanged"](); + } + if (this.selectedElementValue != null) { + this.selectedElementValue["onSelectedElementChanged"](); + } + this.onSelectedElementChanged.fire(this, { 'oldElement': oldValue, 'newElement': value }); + }, + enumerable: true, + configurable: true + }); + SurveyForDesigner.prototype.getEditorLocString = function (value) { + return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(value); + }; + return SurveyForDesigner; +}(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Survey"])); + +function panelBaseOnCreating(self) { + self.dragEnterCounter = 0; + self.emptyElement = null; + self.koRows.subscribe(function (changes) { + if (self.emptyElement) { + self.emptyElement.style.display = self.koRows().length > 0 ? "none" : ""; + } + }); +} +function elementOnCreating(self, className) { + self.dragDropHelperValue = null; + self.dragDropHelper = function () { + if (self.dragDropHelperValue == null) { + self.dragDropHelperValue = self.data["dragDropHelper"]; + } + return self.dragDropHelperValue; + }; + self.renderedElement = null; + self.addonsElement = null; + self.koIsDragging = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); + self.koIsSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); + self.koIsDragging.subscribe(function (newValue) { + if (self.renderedElement) { + self.renderedElement.style.opacity = newValue ? 0.4 : 1; + } + }); + self.koIsSelected.subscribe(function (newValue) { + if (self.renderedElement) { + var newClass = className; + if (newValue) + newClass += " svd_q_selected "; + self.renderedElement.className = newClass; + } + if (self.addonsElement) { + self.addonsElement.style.display = newValue ? "" : "none"; + } + }); +} +function addEmptyPanelElement(root, dragDropHelper, self) { + var eDiv = document.createElement("div"); + eDiv.className = "well"; + eDiv.ondragover = function (e) { + dragDropHelper.doDragDropOver(e, self); + }; + var eSpan = document.createElement("span"); + eSpan.textContent = self.data.getEditorLocString('survey.dropQuestion'); + eDiv.appendChild(eSpan); + root.appendChild(eDiv); + return eDiv; +} +var question_design_class = "svd_question well well-sm svd_q_design_border"; +var panel_design_class = "svd_question well well-sm svd_q_design_border"; +function createQuestionDesignItem(onClick, text) { + var res = document.createElement("li"); + var btn = document.createElement("button"); + btn.innerText = text; + btn.onclick = onClick; + btn.className = "btn btn-primary btn-xs"; + res.appendChild(btn); + return res; +} +function createElementAddons(data, isPanel) { + var main = document.createElement("div"); + main.className = "svd_question_menu btn-group"; + main["role"] = "group"; + var btn = document.createElement("button"); + btn.type = "button"; + btn.className = "btn btn-primary btn-xs"; + btn.onclick = function (e) { data.editQuestionClick(); }; + var span = document.createElement("span"); + span.innerText = "Edit"; //TODO + btn.appendChild(span); + main.appendChild(btn); + btn = document.createElement("button"); + btn.type = "button"; + btn.className = "btn btn-primary btn-xs dropdown-toggle"; + btn.setAttribute("data-toggle", "dropdown"); + btn.setAttribute("aria-haspopup", "true"); + btn.setAttribute("aria-expanded", "false"); + span = document.createElement("span"); + span.className = "glyphicon glyphicon-option-horizontal"; + btn.appendChild(span); + main.appendChild(btn); + var ul = document.createElement("ul"); + ul.className = "dropdown-menu"; + ul.appendChild(createQuestionDesignItem(data.copyQuestionClick, data.getEditorLocString('survey.addToToolbox'))); + ul.appendChild(createQuestionDesignItem(data.fastCopyQuestionClick, data.getEditorLocString('survey.copy'))); + var deleteLocaleName = isPanel ? 'survey.deletePanel' : 'survey.deleteQuestion'; + ul.appendChild(createQuestionDesignItem(data.deleteCurrentObjectClick, data.getEditorLocString(deleteLocaleName))); + main.appendChild(ul); + return main; +} +//var lastElementOnClick: HTMLElement = null; +function elementOnAfterRendering(el, self, className, isPanel, disable) { + self.renderedElement = el; + var newClass = className; + if (self.koIsSelected()) + newClass += " svd_q_selected"; + el.className = newClass; + el.style.opacity = self.koIsDragging() ? 0.4 : 1; + el.draggable = true; + el.ondragover = function (e) { + if (!e["markEvent"]) { + e["markEvent"] = true; + self.dragDropHelper().doDragDropOver(e, self, true); + } + }; + el.ondrop = function (e) { + if (!e["markEvent"]) { + e["markEvent"] = true; + self.dragDropHelper().doDrop(e); + } + }; + el.ondragstart = function (e) { + if (!e["markEvent"]) { + e["markEvent"] = true; + self.dragDropHelper().startDragQuestion(e, self); + } + }; + el.ondragend = function (e) { + self.dragDropHelper().end(); + }; + el.onclick = function (e) { + if (!e["markEvent"]) { + e["markEvent"] = true; + self.data["selectedElement"] = self; + } + }; + el.onkeydown = function (e) { + if (e.witch == 46) + self.data.deleteCurrentObjectClick(); + return true; + }; + if (disable) { + var childs = el.childNodes; + for (var i = 0; i < childs.length; i++) { + if (childs[i].style) + childs[i].style.pointerEvents = "none"; + } + } + self.addonsElement = createElementAddons(self.data, isPanel); + self.addonsElement.style.display = self.koIsSelected() ? "" : "none"; + el.appendChild(self.addonsElement); +} +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Page"].prototype["onCreating"] = function () { + panelBaseOnCreating(this); +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Page"].prototype["onAfterRenderPage"] = function (el) { + if (!this.data.isDesignMode) + return; + var self = this; + var dragDropHelper = this.data["dragDropHelper"]; + this.dragEnterCounter = 0; + el.ondragenter = function (e) { + e.preventDefault(); + self.dragEnterCounter++; + }; + el.ondragleave = function (e) { + self.dragEnterCounter--; + if (self.dragEnterCounter === 0) + dragDropHelper.doLeavePage(e); + }; + el.ondragover = function (e) { return false; }; + el.ondrop = function (e) { dragDropHelper.doDrop(e); }; + if (this.elements.length == 0) { + this.emptyElement = addEmptyPanelElement(el, dragDropHelper, self); + } +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onCreating"] = function () { + panelBaseOnCreating(this); + elementOnCreating(this, panel_design_class); +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onAfterRenderPanel"] = function (el) { + if (!this.data.isDesignMode) + return; + var rows = this.koRows(); + var self = this; + if (this.elements.length == 0) { + this.emptyElement = addEmptyPanelElement(el, self.dragDropHelper(), self); + } + elementOnAfterRendering(el, this, panel_design_class, true, this.koIsDragging()); +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onSelectedElementChanged"] = function () { + if (this.data == null) + return; + this.koIsSelected(this.data["selectedElementValue"] == this); +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype["onCreating"] = function () { + elementOnCreating(this, question_design_class); +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype["onAfterRenderQuestion"] = function (el) { + if (!this.data.isDesignMode) + return; + elementOnAfterRendering(el, this, question_design_class, false, true); +}; +__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype["onSelectedElementChanged"] = function () { + if (this.data == null) + return; + this.koIsSelected(this.data["selectedElementValue"] == this); +}; + + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyUndoRedo; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return UndoRedoItem; }); + + +var SurveyUndoRedo = (function () { + function SurveyUndoRedo() { + this.index = -1; + this.maximumCount = 10; + this.items = []; + this.koCanUndo = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + this.koCanRedo = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + } + SurveyUndoRedo.prototype.clear = function () { + this.items = []; + this.koCanUndo(false); + this.koCanRedo(false); + }; + SurveyUndoRedo.prototype.setCurrent = function (survey, selectedObjName) { + var item = new UndoRedoItem(); + item.surveyJSON = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(survey); + item.selectedObjName = selectedObjName; + if (this.index < this.items.length - 1) { + this.items.splice(this.index + 1); + } + this.items.push(item); + this.removeOldData(); + this.index = this.items.length - 1; + this.updateCanUndoRedo(); + }; + SurveyUndoRedo.prototype.undo = function () { + if (!this.canUndo) + return null; + return this.doUndoRedo(-1); + }; + SurveyUndoRedo.prototype.redo = function () { + if (!this.canRedo) + return null; + return this.doUndoRedo(1); + }; + SurveyUndoRedo.prototype.updateCanUndoRedo = function () { + this.koCanUndo(this.canUndo); + this.koCanRedo(this.canRedo); + }; + SurveyUndoRedo.prototype.doUndoRedo = function (dIndex) { + this.index += dIndex; + this.updateCanUndoRedo(); + return this.index >= 0 && this.index < this.items.length ? this.items[this.index] : null; + }; + Object.defineProperty(SurveyUndoRedo.prototype, "canUndo", { + get: function () { + return this.index >= 1 && this.index < this.items.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyUndoRedo.prototype, "canRedo", { + get: function () { + return this.items.length > 1 && this.index < this.items.length - 1; + }, + enumerable: true, + configurable: true + }); + SurveyUndoRedo.prototype.removeOldData = function () { + if (this.items.length - 1 < this.maximumCount) + return; + this.items.splice(0, this.items.length - this.maximumCount - 1); + }; + return SurveyUndoRedo; +}()); + +var UndoRedoItem = (function () { + function UndoRedoItem() { + } + return UndoRedoItem; +}()); + + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_24__; + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectEditor__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__pagesEditor__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyEmbedingWindow__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyObjects__ = __webpack_require__(21); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__objectVerbs__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditor__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__surveyJSONEditor__ = __webpack_require__(60); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__textWorker__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__undoredo__ = __webpack_require__(23); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__surveyHelper__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__dragdrophelper__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__questionToolbox__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__json5__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_survey_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__surveyjsObjects__ = __webpack_require__(22); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyEditor; }); + + + + + + + + + + + + + + + +var templateEditorHtml = __webpack_require__(59); + + +var SurveyEditor = (function () { + function SurveyEditor(renderedElement, options) { + if (renderedElement === void 0) { renderedElement = null; } + if (options === void 0) { options = null; } + this.stateValue = ""; + this.dragDropHelper = null; + this.surveyId = null; + this.surveyPostId = null; + this.alwaySaveTextInPropertyEditors = false; + this.onCanShowProperty = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); + this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); + this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); + this.onModified = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); + this.saveNo = 0; + this.koShowOptions = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.koGenerateValidJSON = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.koDesignerHeight = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.setOptions(options); + this.koCanDeleteObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + var self = this; + this.koState = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.koShowSaveButton = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); + this.koTestSurveyWidth = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("100%"); + this.saveButtonClick = function () { self.doSave(); }; + this.koObjects = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); + this.koSelectedObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); + this.koSelectedObject.subscribe(function (newValue) { self.selectedObjectChanged(newValue != null ? newValue.value : null); }); + this.koGenerateValidJSON.subscribe(function (newValue) { + if (!self.options) + self.options = {}; + self.options.generateValidJSON = newValue; + if (self.generateValidJSONChangedCallback) + self.generateValidJSONChangedCallback(newValue); + }); + this.surveyObjects = new __WEBPACK_IMPORTED_MODULE_5__surveyObjects__["a" /* SurveyObjects */](this.koObjects, this.koSelectedObject); + this.undoRedo = new __WEBPACK_IMPORTED_MODULE_10__undoredo__["a" /* SurveyUndoRedo */](); + this.surveyVerbs = new __WEBPACK_IMPORTED_MODULE_6__objectVerbs__["a" /* SurveyVerbs */](function () { self.setModified(); }); + this.selectedObjectEditor = new __WEBPACK_IMPORTED_MODULE_2__objectEditor__["a" /* SurveyObjectEditor */](this.options); + this.selectedObjectEditor.onCanShowPropertyCallback = function (object, property) { + return self.onCanShowObjectProperty(object, property); + }; + this.selectedObjectEditor.onPropertyValueChanged.add(function (sender, options) { + self.onPropertyValueChanged(options.property, options.object, options.newValue); + }); + this.questionEditorWindow = new __WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditor__["a" /* SurveyPropertyEditorShowWindow */](); + this.questionEditorWindow.onCanShowPropertyCallback = function (object, property) { + return self.onCanShowObjectProperty(object, property); + }; + this.pagesEditor = new __WEBPACK_IMPORTED_MODULE_3__pagesEditor__["a" /* SurveyPagesEditor */](function () { self.addPage(); }, function (page) { self.surveyObjects.selectObject(page); }, function (indexFrom, indexTo) { self.movePage(indexFrom, indexTo); }, function (page) { self.deleteCurrentObject(); }); + this.surveyEmbeding = new __WEBPACK_IMPORTED_MODULE_4__surveyEmbedingWindow__["a" /* SurveyEmbedingWindow */](); + this.toolboxValue = new __WEBPACK_IMPORTED_MODULE_13__questionToolbox__["a" /* QuestionToolbox */](this.options && this.options.questionTypes ? this.options.questionTypes : null); + this.koViewType = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("designer"); + this.koIsShowDesigner = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.koViewType() == "designer"; }); + this.selectDesignerClick = function () { self.showDesigner(); }; + this.selectEditorClick = function () { self.showJsonEditor(); }; + this.selectTestClick = function () { self.showTestSurvey(); }; + this.selectEmbedClick = function () { self.showEmbedEditor(); }; + this.generateValidJSONClick = function () { self.koGenerateValidJSON(true); }; + this.generateReadableJSONClick = function () { self.koGenerateValidJSON(false); }; + this.runSurveyClick = function () { self.showLiveSurvey(); }; + this.embedingSurveyClick = function () { self.showSurveyEmbeding(); }; + this.deleteObjectClick = function () { self.deleteCurrentObject(); }; + this.draggingToolboxItem = function (item, e) { self.doDraggingToolboxItem(item.json, e); }; + this.clickToolboxItem = function (item) { self.doClickToolboxItem(item.json); }; + this.dragEnd = function (item, e) { self.dragDropHelper.end(); }; + this.doUndoClick = function () { self.doUndoRedo(self.undoRedo.undo()); }; + this.doRedoClick = function () { self.doUndoRedo(self.undoRedo.redo()); }; + this.jsonEditor = new __WEBPACK_IMPORTED_MODULE_8__surveyJSONEditor__["a" /* SurveyJSONEditor */](); + this.text = ""; + if (renderedElement) { + this.render(renderedElement); + } + } + SurveyEditor.prototype.setOptions = function (options) { + this.options = options; + this.showJSONEditorTabValue = options && typeof (options.showJSONEditorTab) !== 'undefined' ? options.showJSONEditorTab : true; + this.showTestSurveyTabValue = options && typeof (options.showTestSurveyTab) !== 'undefined' ? options.showTestSurveyTab : true; + this.showEmbededSurveyTabValue = options && typeof (options.showEmbededSurveyTab) !== 'undefined' ? options.showEmbededSurveyTab : false; + this.koShowOptions(options && typeof (options.showOptions) !== 'undefined' ? options.showOptions : false); + this.koGenerateValidJSON(this.options && this.options.generateValidJSON); + if (options && options.designerHeight) { + this.koDesignerHeight(options.designerHeight); + } + if (options && options.objectsIntend) { + __WEBPACK_IMPORTED_MODULE_5__surveyObjects__["a" /* SurveyObjects */].intend = options.objectsIntend; + } + this.koDesignerHeight(); + if (this.selectedObjectEditor) + this.selectedObjectEditor.setOptions(options); + }; + Object.defineProperty(SurveyEditor.prototype, "survey", { + get: function () { + return this.surveyValue; + }, + enumerable: true, + configurable: true + }); + SurveyEditor.prototype.render = function (element, options) { + if (element === void 0) { element = null; } + if (options === void 0) { options = null; } + if (options) + this.setOptions(options); + var self = this; + if (element && typeof element == "string") { + element = document.getElementById(element); + } + if (element) { + this.renderedElement = element; + } + element = this.renderedElement; + if (!element) + return; + element.innerHTML = templateEditorHtml; + self.applyBinding(); + }; + SurveyEditor.prototype.loadSurvey = function (surveyId) { + var self = this; + new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["dxSurveyService"]().loadSurvey(surveyId, function (success, result, response) { + if (success && result) { + self.text = JSON.stringify(result); + } + }); + }; + Object.defineProperty(SurveyEditor.prototype, "text", { + get: function () { + if (this.koIsShowDesigner()) + return this.getSurveyTextFromDesigner(); + return this.jsonEditor.text; + }, + set: function (value) { + var textWorker = new __WEBPACK_IMPORTED_MODULE_9__textWorker__["a" /* SurveyTextWorker */](value); + if (textWorker.isJsonCorrect) { + this.initSurvey(new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(textWorker.survey)); + this.showDesigner(); + this.setUndoRedoCurrentState(true); + } + else { + this.setTextValue(value); + this.koViewType("editor"); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "toolbox", { + get: function () { return this.toolboxValue; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "customToolboxQuestionMaxCount", { + get: function () { return this.toolbox.copiedItemMaxCount; }, + set: function (value) { this.toolbox.copiedItemMaxCount = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "state", { + get: function () { return this.stateValue; }, + enumerable: true, + configurable: true + }); + SurveyEditor.prototype.setState = function (value) { + this.stateValue = value; + this.koState(this.state); + }; + SurveyEditor.prototype.doSave = function () { + this.setState("saving"); + if (this.saveSurveyFunc) { + this.saveNo++; + var self = this; + this.saveSurveyFunc(this.saveNo, function doSaveCallback(no, isSuccess) { + self.setState("saved"); + if (self.saveNo == no) { + if (isSuccess) + self.setState("saved"); + } + }); + } + }; + SurveyEditor.prototype.setModified = function () { + this.setState("modified"); + this.setUndoRedoCurrentState(); + this.onModified.fire(this, null); + }; + SurveyEditor.prototype.setUndoRedoCurrentState = function (clearState) { + if (clearState === void 0) { clearState = false; } + if (clearState) { + this.undoRedo.clear(); + } + var selObj = this.koSelectedObject() ? this.koSelectedObject().value : null; + this.undoRedo.setCurrent(this.surveyValue, selObj ? selObj.name : null); + }; + Object.defineProperty(SurveyEditor.prototype, "saveSurveyFunc", { + get: function () { return this.saveSurveyFuncValue; }, + set: function (value) { + this.saveSurveyFuncValue = value; + this.koShowSaveButton(value != null); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "showOptions", { + get: function () { return this.koShowOptions(); }, + set: function (value) { this.koShowOptions(value); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "showJSONEditorTab", { + get: function () { return this.showJSONEditorTabValue; }, + set: function (value) { this.showJSONEditorTabValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "showTestSurveyTab", { + get: function () { return this.showTestSurveyTabValue; }, + set: function (value) { this.showTestSurveyTabValue = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyEditor.prototype, "showEmbededSurveyTab", { + get: function () { return this.showEmbededSurveyTabValue; }, + set: function (value) { this.showEmbededSurveyTabValue = value; }, + enumerable: true, + configurable: true + }); + SurveyEditor.prototype.onCanShowObjectProperty = function (object, property) { + var options = { obj: object, property: property, canShow: true }; + this.onCanShowProperty.fire(this, options); + return options.canShow; + }; + SurveyEditor.prototype.setTextValue = function (value) { + this.jsonEditor.text = value; + }; + SurveyEditor.prototype.addPage = function () { + var name = __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewPageName(this.survey.pages); + var page = this.surveyValue.addNewPage(name); + this.addPageToUI(page); + this.setModified(); + }; + SurveyEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString(str); }; + SurveyEditor.prototype.movePage = function (indexFrom, indexTo) { + var page = this.survey.pages[indexFrom]; + this.survey.pages.splice(indexFrom, 1); + this.survey.pages.splice(indexTo, 0, page); + this.pagesEditor.survey = this.survey; + this.surveyObjects.selectObject(page); + this.setModified(); + }; + SurveyEditor.prototype.addPageToUI = function (page) { + this.pagesEditor.survey = this.surveyValue; + this.surveyObjects.addPage(page); + }; + SurveyEditor.prototype.doOnQuestionAdded = function (question, parentPanel) { + var page = this.survey.getPageByElement(question); + var options = { question: question, page: page }; + this.onQuestionAdded.fire(this, options); + this.surveyObjects.addElement(question, parentPanel); + this.survey.render(); + }; + SurveyEditor.prototype.doOnElementRemoved = function (question) { + this.surveyObjects.removeObject(question); + this.survey.render(); + }; + SurveyEditor.prototype.doOnPanelAdded = function (panel, parentPanel) { + var page = this.survey.getPageByElement(panel); + var options = { panel: panel, page: page }; + this.onPanelAdded.fire(this, options); + this.surveyObjects.addElement(panel, parentPanel); + this.survey.render(); + }; + SurveyEditor.prototype.onPropertyValueChanged = function (property, obj, newValue) { + var isDefault = property.isDefaultValue(newValue); + obj[property.name] = newValue; + if (property.name == "name") { + this.surveyObjects.nameChanged(obj); + if (__WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Page) { + this.pagesEditor.changeName(obj); + } + } + this.setModified(); + if (obj === this.survey && property.name == "locale") { + this.selectedObjectEditor.ObjectChanged(); + } + this.survey.render(); + }; + SurveyEditor.prototype.doUndoRedo = function (item) { + this.initSurvey(item.surveyJSON); + if (item.selectedObjName) { + var selObj = this.findObjByName(item.selectedObjName); + if (selObj) { + this.surveyObjects.selectObject(selObj); + } + } + this.setState(this.undoRedo.koCanUndo() ? "modified" : "saved"); + }; + SurveyEditor.prototype.findObjByName = function (name) { + var page = this.survey.getPageByName(name); + if (page) + return page; + var question = this.survey.getQuestionByName(name); + if (question) + return question; + return null; + }; + SurveyEditor.prototype.canSwitchViewType = function (newType) { + if (newType && this.koViewType() == newType) + return false; + if (this.koViewType() == "designer") { + this.jsonEditor.text = this.getSurveyTextFromDesigner(); + } + if (this.koViewType() != "editor") + return true; + if (!this.jsonEditor.isJsonCorrect) { + alert(this.getLocString("ed.correctJSON")); + return false; + } + this.initSurvey(new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.jsonEditor.survey)); + return true; + }; + SurveyEditor.prototype.showDesigner = function () { + if (!this.canSwitchViewType("designer")) + return; + this.koViewType("designer"); + }; + SurveyEditor.prototype.showJsonEditor = function () { + if (this.koViewType() == "editor") + return; + this.jsonEditor.show(this.getSurveyTextFromDesigner()); + this.koViewType("editor"); + }; + SurveyEditor.prototype.showTestSurvey = function () { + if (!this.canSwitchViewType(null)) + return; + this.showLiveSurvey(); + this.koViewType("test"); + }; + SurveyEditor.prototype.showEmbedEditor = function () { + if (!this.canSwitchViewType("embed")) + return; + this.showSurveyEmbeding(); + this.koViewType("embed"); + }; + SurveyEditor.prototype.getSurveyTextFromDesigner = function () { + var json = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.survey); + if (this.options && this.options.generateValidJSON) + return JSON.stringify(json, null, 1); + return new __WEBPACK_IMPORTED_MODULE_14__json5__["a" /* SurveyJSON5 */]().stringify(json, null, 1); + }; + SurveyEditor.prototype.selectedObjectChanged = function (obj) { + var canDeleteObject = false; + this.selectedObjectEditor.selectedObject = obj; + this.surveyVerbs.obj = obj; + var objType = __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj); + if (objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Page) { + this.survey.currentPage = obj; + canDeleteObject = this.survey.pages.length > 1; + } + if (objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Question || objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Panel) { + this.survey.selectedElement = obj; + canDeleteObject = true; + this.survey.currentPage = this.survey.getPageByQuestion(this.survey.selectedElement); + } + else { + this.survey.selectedElement = null; + } + this.koCanDeleteObject(canDeleteObject); + }; + SurveyEditor.prototype.applyBinding = function () { + if (this.renderedElement == null) + return; + __WEBPACK_IMPORTED_MODULE_0_knockout__["cleanNode"](this.renderedElement); + __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"](this, this.renderedElement); + this.surveyjs = document.getElementById("surveyjs"); + if (this.surveyjs) { + var self = this; + this.surveyjs.onkeydown = function (e) { + if (!e) + return; + if (e.keyCode == 46) + self.deleteQuestion(); + if (e.keyCode == 38 || e.keyCode == 40) { + self.selectQuestion(e.keyCode == 38); + } + }; + } + this.surveyjsExample = document.getElementById("surveyjsExample"); + this.initSurvey(new __WEBPACK_IMPORTED_MODULE_14__json5__["a" /* SurveyJSON5 */]().parse(SurveyEditor.defaultNewSurveyText)); + this.setUndoRedoCurrentState(true); + this.jsonEditor.init(); + if (jQuery && jQuery()["select2"]) { + jQuery("#objectSelector")["select2"](); + jQuery("#objectSelector").width("100%"); + } + }; + SurveyEditor.prototype.initSurvey = function (json) { + var self = this; + this.surveyValue = new __WEBPACK_IMPORTED_MODULE_16__surveyjsObjects__["a" /* SurveyForDesigner */](); + this.dragDropHelper = new __WEBPACK_IMPORTED_MODULE_12__dragdrophelper__["a" /* DragDropHelper */](this.survey, function () { self.setModified(); }); + this.surveyValue["setJsonObject"](json); //TODO + if (this.surveyValue.isEmpty) { + this.surveyValue["setJsonObject"](new __WEBPACK_IMPORTED_MODULE_14__json5__["a" /* SurveyJSON5 */]().parse(SurveyEditor.defaultNewSurveyText)); //TODO + } + this.surveyValue["dragDropHelper"] = this.dragDropHelper; + this.survey.render(this.surveyjs); + this.surveyObjects.survey = this.survey; + this.pagesEditor.survey = this.survey; + this.pagesEditor.setSelectedPage(this.survey.currentPage); + this.surveyVerbs.survey = this.survey; + this.surveyValue.onSelectedElementChanged.add(function (sender, options) { self.surveyObjects.selectObject(sender["selectedElement"]); }); + this.surveyValue.onEditQuestion.add(function (sender, options) { self.showQuestionEditor(self.koSelectedObject().value); }); + this.surveyValue.onCopyQuestion.add(function (sender, options) { self.addCustomToolboxQuestion(self.koSelectedObject().value); }); + this.surveyValue.onFastCopyQuestion.add(function (sender, options) { self.fastCopyQuestion(self.koSelectedObject().value); }); + this.surveyValue.onDeleteCurrentObject.add(function (sender, options) { self.deleteCurrentObject(); }); + this.surveyValue.onProcessHtml.add(function (sender, options) { options.html = self.processHtml(options.html); }); + this.surveyValue.onCurrentPageChanged.add(function (sender, options) { self.pagesEditor.setSelectedPage(sender.currentPage); }); + this.surveyValue.onQuestionAdded.add(function (sender, options) { self.doOnQuestionAdded(options.question, options.parentPanel); }); + this.surveyValue.onQuestionRemoved.add(function (sender, options) { self.doOnElementRemoved(options.question); }); + this.surveyValue.onPanelAdded.add(function (sender, options) { self.doOnPanelAdded(options.panel, options.parentPanel); }); + this.surveyValue.onPanelRemoved.add(function (sender, options) { self.doOnElementRemoved(options.panel); }); + }; + SurveyEditor.prototype.processHtml = function (html) { + if (!html) + return html; + var scriptRegEx = /)<[^<]*)*<\/script>/gi; + while (scriptRegEx.test(html)) { + html = html.replace(scriptRegEx, ""); + } + return html; + }; + SurveyEditor.prototype.doDraggingToolboxItem = function (json, e) { + this.dragDropHelper.startDragToolboxItem(e, this.getNewName(json["type"]), json); + }; + SurveyEditor.prototype.doClickToolboxItem = function (json) { + var name = this.getNewName(json["type"]); + var question = __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"].metaData.createClass(json["type"]); + new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toObject(json, question); + question.name = name; + this.doClickQuestionCore(question); + }; + SurveyEditor.prototype.getNewName = function (type) { + return type == "panel" ? this.getNewPanelName() : this.getNewQuestionName(); + }; + SurveyEditor.prototype.getNewQuestionName = function () { + return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewQuestionName(this.survey.getAllQuestions()); + }; + SurveyEditor.prototype.getNewPanelName = function () { + return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewPanelName(this.getAllPanels()); + }; + SurveyEditor.prototype.getAllPanels = function () { + var result = []; + for (var i = 0; i < this.survey.pages.length; i++) { + this.addPanels(this.survey.pages[i], result); + } + return result; + }; + SurveyEditor.prototype.addPanels = function (panel, result) { + for (var i = 0; i < panel.elements.length; i++) { + if (!panel.elements[i].isPanel) + continue; + result.push(panel.elements[i]); + this.addPanels(panel.elements[i], result); + } + }; + SurveyEditor.prototype.doClickQuestionCore = function (question) { + var page = this.survey.currentPage; + var index = -1; + if (this.survey.selectedElement != null) { + index = page.questions.indexOf(this.survey.selectedElement) + 1; + } + page.addQuestion(question, index); + this.dragDropHelper.scrollToElement(document.getElementById(question.id)); + this.setModified(); + }; + SurveyEditor.prototype.deleteQuestion = function () { + var question = this.getSelectedObjAsQuestion(); + if (question) { + this.deleteCurrentObject(); + } + }; + SurveyEditor.prototype.selectQuestion = function (isUp) { + var question = this.getSelectedObjAsQuestion(); + if (question) { + this.surveyObjects.selectNextQuestion(isUp); + } + }; + SurveyEditor.prototype.getSelectedObjAsQuestion = function () { + var obj = this.koSelectedObject().value; + if (!obj) + return null; + return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Question ? (obj) : null; + }; + SurveyEditor.prototype.deleteCurrentObject = function () { + this.deleteObject(this.koSelectedObject().value); + }; + SurveyEditor.prototype.showQuestionEditor = function (question) { + var self = this; + this.questionEditorWindow.show(question, function (question) { self.onQuestionEditorChanged(question); }); + }; + SurveyEditor.prototype.onQuestionEditorChanged = function (question) { + this.surveyObjects.nameChanged(question); + this.selectedObjectEditor.ObjectChanged(); + this.setModified(); + this.survey.render(); + }; + SurveyEditor.prototype.addCustomToolboxQuestion = function (question) { + this.toolbox.addCopiedItem(question); + }; + SurveyEditor.prototype.fastCopyQuestion = function (question) { + var json = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(question); + json.type = question.getType(); + this.doClickToolboxItem(json); + }; + SurveyEditor.prototype.deleteObject = function (obj) { + this.surveyObjects.removeObject(obj); + var objType = __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj); + if (objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Page) { + this.survey.removePage(obj); + this.pagesEditor.removePage(obj); + } + else { + this.survey.currentPage.removeElement(obj); + this.survey.selectedElement = null; + this.surveyObjects.selectObject(this.survey.currentPage); + } + this.setModified(); + this.survey.render(); + }; + SurveyEditor.prototype.showLiveSurvey = function () { + var _this = this; + if (!this.surveyjsExample) + return; + var json = this.getSurveyJSON(); + if (json != null) { + if (json.cookieName) { + delete json.cookieName; + } + var survey = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Survey"](json); + var self = this; + var surveyjsExampleResults = document.getElementById("surveyjsExampleResults"); + var surveyjsExamplereRun = document.getElementById("surveyjsExamplereRun"); + if (surveyjsExampleResults) + surveyjsExampleResults.innerHTML = ""; + if (surveyjsExamplereRun) + surveyjsExamplereRun.style.display = "none"; + survey.onComplete.add(function (sender) { if (surveyjsExampleResults) + surveyjsExampleResults.innerHTML = _this.getLocString("ed.surveyResults") + JSON.stringify(survey.data); if (surveyjsExamplereRun) + surveyjsExamplereRun.style.display = ""; }); + survey.render(this.surveyjsExample); + } + else { + this.surveyjsExample.innerHTML = this.getLocString("ed.correctJSON"); + } + }; + SurveyEditor.prototype.showSurveyEmbeding = function () { + var json = this.getSurveyJSON(); + this.surveyEmbeding.json = json; + this.surveyEmbeding.surveyId = this.surveyId; + this.surveyEmbeding.surveyPostId = this.surveyPostId; + this.surveyEmbeding.generateValidJSON = this.options && this.options.generateValidJSON; + this.surveyEmbeding.show(); + }; + SurveyEditor.prototype.getSurveyJSON = function () { + if (this.koIsShowDesigner()) + return new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.survey); + if (this.jsonEditor.isJsonCorrect) + return new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.jsonEditor.survey); + return null; + }; + SurveyEditor.prototype.createAnnotations = function (text, errors) { + var annotations = new Array(); + for (var i = 0; i < errors.length; i++) { + var error = errors[i]; + var annotation = { row: error.position.start.row, column: error.position.start.column, text: error.text, type: "error" }; + annotations.push(annotation); + } + return annotations; + }; + return SurveyEditor; +}()); + +SurveyEditor.defaultNewSurveyText = "{ pages: [ { name: 'page1'}] }"; +__WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Survey"].cssType = "bootstrap"; + + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(2); + +var frenchTranslation = { + //Strings in Editor + ed: { + addNewPage: 'Ajouter une page', + correctJSON: 'SVP corriger le json', + delSelObject: 'Supprimer l\'objet sélectionné', + designer: 'Designer de questionnaire', + embedSurvey: 'Intégrer le questionnaire', + generateReadableJSON: 'Générer un JSON lisible', + generateValidJSON: 'Générer un JSON valide', + jsonEditor: 'Editer JSON', + newPageName: 'page', + newQuestionName: 'question', + options: 'Options', + redo: 'Rétablir', + saveSurvey: 'Sauvegarder le questionnaire', + surveyResults: 'Résultat du questionnaire: ', + testSurvey: 'Tester le questionnaire', + testSurveyAgain: 'Tester à nouveau le questionnaire', + testSurveyWidth: 'Largeur du questionnaire: ', + toolbox: 'Boite à outils', + undo: 'Annuler' + }, + //Embed window + ew: { + angular: 'Utiliser la version Angular', + bootstrap: 'Pour Bootstrap framework', + jquery: 'Utiliser la version jQuery', + knockout: 'Utiliser la version Knockout', + loadFromServer: 'Charger le JSON du questionnaire depuis un serveur', + react: 'Utiliser la version React', + showInWindow: 'Afficher le questionnaire dans une fenêtre', + showOnPage: 'Afficher le questionnaire dans une page', + standard: 'Pas de bootstrap', + titleHtml: 'HTML', + titleJavaScript: 'JavaScript', + titleScript: 'Scripts et styles', + vue: 'Utiliser la version Vue' + }, + //Operators + op: { + contains: 'contient', + empty: 'est vide', + equal: 'égal', + greater: 'supérieur', + greaterorequal: 'supérieur ou égal', + less: 'plus petit', + lessorequal: 'plus petit ou égal', + notcontains: 'ne contient pas', + notempty: 'n\'est pas vide', + notequal: 'n\'est pas égal' + }, + //Properties + p: { + addRowText: 'Bouton ajouter une ligne', + cellType: 'Type de cellule', + choices: 'Choix', + choicesByUrl: 'Choix par API', + choicesOrder: 'Ordre des choix', + clearInvisibleValues: 'Cacher les valeur invisibles', + colCount: 'Nombre de colonnes', + cols: 'Nombre de cols', + columnColCount: 'Nombre de colonnes', + columnMinWidth: 'Largeur minimale des colonnes', + columns: 'Colonnes', + commentText: 'Description champ commentaire', + completeText: 'Texte questionnaire finalisé', + completedHtml: 'Html questionnaire finalisé', + cookieName: 'Nom du cookie', + edit: 'Editer', + focusFirstQuestionAutomatic: 'Focus sur la première question automatiquement', + goNextPageAutomatic: 'Aller à la page suivante automatiquement', + hasComment: 'Champs commentaire ?', + hasOther: 'Choix autre ?', + horizontalScroll: 'Scroll horizontal', + imageHeight: 'Hauteur de l \'image', + imageWidth: 'Largeur de l\'image', + indent: 'Indentation', + inputType: 'Type de champs', + isAllRowRequired: 'Toutes les lignes sont-elle obligatoires ?', + isRequired: 'Requis ?', + itemSize: 'Nombre maximum de caractères', + items: 'Items', + locale: 'Langue', + maxRateDescription: 'Description note maximum', + maxSize: 'Taille maximum', + minRateDescription: 'Description note minimum', + minRowCount: 'Nombre de ligne minimal', + mode: 'Mode d\'affichage', + name: 'Nom', + optionsCaption: 'Texte par défaut', + otherErrorText: 'Texte Erreur champs autre', + otherText: { name: 'Text autre', title: 'Champ commentaire ou choix autre' }, + pageNextText: 'Bouton page suivante', + pagePrevText: 'Bouton page précédente', + page_title: { name: 'titre', title: 'Titre de la page' }, + placeHolder: 'PlaceHolder (indice dans le champs)', + questionStartIndex: 'Index de numérotation des question', + questionTitleLocation: 'Emplacement titre question', + questionTitleTemplate: { name: 'Template d\'affichage des question', title: 'Exemple: {no}) {title} {require}:' }, + rateValues: 'Barème', + removeRowText: 'Bouton supprimer une ligne', + requiredText: 'Texte pour les champs requis', + rowCount: 'Nombre de lignes', + rows: 'Nombre de ligne', + sendResultOnPageNext: '', + showCompletedPage: 'Voir la page formulaire complété ?', + showNavigationButtons: 'Boutons de navigation', + showPageNumbers: 'Numérotation des pages', + showPageTitles: 'Titre des pages', + showPreview: 'Voir la prévisualisation', + showProgressBar: 'Barre de progression', + showQuestionNumbers: 'Numérotation des questions', + showTitle: 'Afficher le titre', + size: 'Nombre maximum de caractères', + startWithNewLine: 'Commencer avec une nouvelle ligne', + storeDataAsText: 'Stocker les données comme du text', + storeOthersAsComment: 'Sauvegarder choix autre comme commentaire', + surveyId: 'Id du questionnaire', + surveyPostId: 'Id POST questionnaire', + survey_title: { name: 'titre', title: 'Il sera affiché sur chaque page.' }, + title: { name: 'Titre', title: 'Laissez vide, si meme texte que le "Nom"' }, + triggers: 'Déclencheurs', + validators: 'Validateurs', + visibleIf: 'Visible si ', + width: 'Largeur' + }, + //Property Editors + pe: { + addNew: 'Ajouter un nouveau', + addRowText: 'Texte bouton ajouter une ligne', + apply: 'Appliquer', + cancel: 'Annuler', + cellType: 'Type de cellule', + choicesOrder: 'Sélectionner l\'ordre des choix', + close: 'Fermer', + colCount: 'Nombre de colonnes', + columnEdit: 'Editer la colonne: {0}', + createtrigger: 'Veuillez créer un déclencheur', + delete: 'Supprimer', + edit: 'Editer', + editProperty: 'Editer la propriété "{0}"', + empty: '', + enterNewValue: 'Veuillez saisir la valeur.', + expressionHelp: 'Veuillez entrer une expression booléenne. Elle doit retourner Vrai(true) pour garder la question/page visible. Par exemple: {question1} = "valeur1" or ({question2} = 3 and {question3} < 5)', + fastEntry: 'Ajout rapide', + formEntry: 'Ajout via formulaire', + hasOther: 'Has other item', + imageHeight: 'Hauteur de l\'image', + imageWidth: 'Largeur de l\'image', + inputType: 'Type de champ', + isRequired: 'Est requis ?', + items: '[ Elements: {0} ]', + maxRateDescription: 'Description note maximum', + maxSize: 'Taille maximum du fichier en octets', + minRateDescription: 'Description note minimum', + name: 'Nom', + noquestions: 'Il n\'y a aucune question dans le questionnaire.', + ok: 'OK', + optionsCaption: 'Texte par défaut', + placeHolder: 'PlaceHolder (indice dans le champs)', + propertyIsEmpty: 'Veuillez entrer une valeur pour la propriété', + qEditorTitle: 'Editer la question: {0}', + removeAll: 'Tout supprimer', + removeRowText: 'Texte bouton supprimer une ligne', + required: 'Requis ?', + reset: 'Réinitialiser', + rowCount: 'Nombre de lignes', + rows: 'Nombre de lignes', + showPreview: 'L\'aperçu d\'image est-il affiché ?', + startWithNewLine: 'Commencer avec une nouvelle ligne ?', + storeDataAsText: 'Stocker le contenu du fichier dans le résultat JSON sous forme de texte', + tabs: { + choices: 'Choix', + choicesByUrl: 'Choix depuis api web', + columns: 'Colonnes', + fileOptions: 'Options', + general: 'Général', + html: 'Editeur Html', + matrixChoices: 'Choix par defaut', + multipleTextItems: 'Text Inputs', + rateValues: 'Barème', + rows: 'Lignes', + visibleIf: 'Visible Si' + }, + testService: 'Tester le service', + text: 'Texte', + title: 'Titre', + triggerCompleteText: 'Complete the survey if succeed.', + triggerIsVariable: 'Ne placez pas la variable dans le résultat du questionnaire.', + triggerMakePagesVisible: 'Rendre les pages visibles:', + triggerMakeQuestionsVisible: 'Rendre les questions visibles:', + triggerNotSet: 'Le déclencheur n\'est pas défini', + triggerOn: 'On ', + triggerRunIf: 'Exécuster si', + triggerSetToName: 'Changer la valeur de: ', + triggerSetValue: 'à: ', + value: 'Valeur', + verbChangePage: 'Changer de page ', + verbChangeType: 'Changer le type ', + visible: 'Est visible ?' + }, + //questionTypes + qt: { + checkbox: 'Cases à cocher', + comment: 'Commentaire', + dropdown: 'Liste déroulante', + file: 'Fichier', + html: 'Html', + matrix: 'Matice (choix unique)', + matrixdropdown: 'Matrice (choix multiples)', + matrixdynamic: 'Matrice (Lignes dynamiques)', + multipletext: 'champ multilignes', + radiogroup: 'Boutons radio', + rating: 'Evaluation', + text: 'Champ simple' + }, + survey: { + addToToolbox: 'Ajouter à la boîte à outils', + copy: 'Copier', + deleteQuestion: 'Supprimer la question', + dropQuestion: 'Déposer votre question ici.' + } +}; +__WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["fr"] = frenchTranslation; + + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyItemValuesEditor; }); + + + + + +var SurveyPropertyItemValuesEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyItemValuesEditor, _super); + function SurveyPropertyItemValuesEditor() { + var _this = _super.call(this) || this; + var self = _this; + _this.koActiveView = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("form"); + _this.koItemsText = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); + _this.koActiveView.subscribe(function (newValue) { + if (newValue == "form") + self.updateItems(self.koItemsText()); + else + self.koItemsText(self.getItemsText()); + }); + _this.changeToTextViewClick = function () { self.koActiveView("text"); }; + _this.changeToFormViewClick = function () { self.koActiveView("form"); }; + return _this; + } + Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "editorType", { + get: function () { return "itemvalues"; }, + enumerable: true, + configurable: true + }); + SurveyPropertyItemValuesEditor.prototype.hasError = function () { + var result = false; + for (var i = 0; i < this.koItems().length; i++) { + var item = this.koItems()[i]; + item.koHasError(this.isValueEmpty(item.koValue())); + result = result || item.koHasError(); + } + return result; + }; + SurveyPropertyItemValuesEditor.prototype.createNewEditorItem = function () { return { koValue: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](), koText: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](), koHasError: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false) }; }; + SurveyPropertyItemValuesEditor.prototype.createEditorItem = function (item) { + var itemValue = new __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["ItemValue"](null); + if (itemValue["setData"]) { + itemValue["setData"](item); + } + else { + if (item.value) { + itemValue.value = item.value; + if (item.text) + itemValue.text = item.text; + } + else { + itemValue.value = item; + } + } + var itemText = ""; + if (itemValue["locText"]) { + itemText = itemValue["locText"]["getLocaleText"](this.locale); + } + if (!itemText && itemValue.hasText) { + itemText = itemValue.text; + } + return { item: item, koValue: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](itemValue.value), koText: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](itemText), koHasError: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false) }; + }; + SurveyPropertyItemValuesEditor.prototype.createItemFromEditorItem = function (editorItem) { + var alwaySaveTextInPropertyEditors = this.options && this.options.alwaySaveTextInPropertyEditors; + var text = editorItem.koText(); + if (!alwaySaveTextInPropertyEditors && editorItem.koText() == editorItem.koValue()) { + text = null; + } + var itemValue = new __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["ItemValue"](null); + //TODO use values directly + if (editorItem.item && itemValue["setData"]) { + itemValue["setData"](editorItem.item); + } + itemValue.value = editorItem.koValue(); + if (itemValue["locText"]) { + itemValue["locText"]["setLocaleText"](this.locale, text); + } + else { + if (text) + itemValue.text = text; + } + return itemValue; + }; + SurveyPropertyItemValuesEditor.prototype.onBeforeApply = function () { + if (this.koActiveView() != "form") { + this.updateItems(this.koItemsText()); + } + _super.prototype.onBeforeApply.call(this); + }; + SurveyPropertyItemValuesEditor.prototype.updateItems = function (text) { + var items = []; + if (text) { + var texts = text.split("\n"); + for (var i = 0; i < texts.length; i++) { + if (!texts[i]) + continue; + var valueItem = new __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["ItemValue"](texts[i]); + var item = { value: valueItem.value, text: (valueItem.hasText ? valueItem.text : "") }; + items.push(item); + } + } + this.koItems(this.getItemsFromValue(items)); + }; + SurveyPropertyItemValuesEditor.prototype.getItemsText = function () { + var text = []; + var items = this.koItems(); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (this.isValueEmpty(item.koValue())) + continue; + var itemText = item.koValue(); + if (item.koText()) + itemText += __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["ItemValue"].Separator + item.koText(); + text.push(itemText); + } + return text.join("\n"); + }; + SurveyPropertyItemValuesEditor.prototype.isValueEmpty = function (val) { + return !val; + }; + return SurveyPropertyItemValuesEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); + +__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("itemvalues", function () { return new SurveyPropertyItemValuesEditor(); }); + + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionEditors_questionEditor__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyDropdownColumnsEditor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyMatrixDropdownColumnsItem; }); + + + + + + + +var SurveyPropertyDropdownColumnsEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyDropdownColumnsEditor, _super); + function SurveyPropertyDropdownColumnsEditor() { + var _this = _super.call(this) || this; + var self = _this; + _this.koEditItem = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); + _this.koIsList = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); + _this.koEditItem.subscribe(function (newValue) { + if (self.koEditItem() != null) { + self.columnEditor = new __WEBPACK_IMPORTED_MODULE_4__questionEditors_questionEditor__["b" /* SurveyQuestionEditor */](self.koEditItem().editColumn, null, "matrixdropdowncolumn@" + self.koEditItem().koCellType()); + } + else { + if (self.columnEditor) + self.columnEditor.apply(); + self.columnEditor = null; + } + self.koIsList(self.koEditItem() == null); + }); + _this.onEditItemClick = function (item) { self.koEditItem(item); }; + _this.onCancelEditItemClick = function () { + if (self.columnEditor && self.columnEditor.hasError()) + return; + self.koEditItem(null); + }; + return _this; + } + Object.defineProperty(SurveyPropertyDropdownColumnsEditor.prototype, "editorType", { + get: function () { return "matrixdropdowncolumns"; }, + enumerable: true, + configurable: true + }); + SurveyPropertyDropdownColumnsEditor.prototype.hasError = function () { + var result = this.columnEditor != null ? this.columnEditor.hasError() : false; + for (var i = 0; i < this.koItems().length; i++) { + result = result || this.koItems()[i].hasError(); + } + return result; + }; + SurveyPropertyDropdownColumnsEditor.prototype.onBeforeApply = function () { + if (this.columnEditor) + this.columnEditor.apply(); + _super.prototype.onBeforeApply.call(this); + }; + SurveyPropertyDropdownColumnsEditor.prototype.createNewEditorItem = function () { return new SurveyPropertyMatrixDropdownColumnsItem(new __WEBPACK_IMPORTED_MODULE_6_survey_knockout__["MatrixDropdownColumn"]("", this.options)); }; + SurveyPropertyDropdownColumnsEditor.prototype.createEditorItem = function (item) { return new SurveyPropertyMatrixDropdownColumnsItem(item, this.options); }; + SurveyPropertyDropdownColumnsEditor.prototype.createItemFromEditorItem = function (editorItem) { + var columItem = editorItem; + columItem.apply(); + return columItem.column; + }; + return SurveyPropertyDropdownColumnsEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); + +var SurveyPropertyMatrixDropdownColumnsItem = (function () { + function SurveyPropertyMatrixDropdownColumnsItem(column, options) { + if (options === void 0) { options = null; } + this.column = column; + this.options = options; + this.editColumn = new __WEBPACK_IMPORTED_MODULE_6_survey_knockout__["MatrixDropdownColumn"](column.name, column.title); + //TODO set directly + if (column["locOwner"]) + this.editColumn["locOwner"] = column["locOwner"]; + this.copyColumn(this.column, this.editColumn); + this.cellTypeChoices = this.getPropertyChoices("cellType"); + this.koName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](column.name); + this.koCellType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](column.cellType); + this.koTitle = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](column.name === column.title ? "" : column.title); + this.koIsRequired = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.column.isRequired); + this.koHasError = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); + var self = this; + this.koCanEdit = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.koCellType() != "default"; }); + this.koEditorName = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("pe.columnEdit")["format"](self.koName()); }); + } + SurveyPropertyMatrixDropdownColumnsItem.prototype.hasError = function () { + this.koHasError(!this.koName()); + return this.koHasError(); + }; + SurveyPropertyMatrixDropdownColumnsItem.prototype.apply = function () { + this.copyColumn(this.editColumn, this.column); + this.column.name = this.koName(); + this.column.title = this.koTitle(); + this.column.cellType = this.koCellType(); + this.column.isRequired = this.koIsRequired(); + }; + SurveyPropertyMatrixDropdownColumnsItem.prototype.copyColumn = function (src, dest) { + dest.hasOther = src.hasOther; + dest.choices = src.choices; + dest.colCount = src.colCount; + dest.optionsCaption = src.optionsCaption; + dest.choicesOrder = src.choicesOrder; + dest.inputType = src.inputType; + dest.placeHolder = src.placeHolder; + dest.choicesByUrl = src.choicesByUrl; + }; + SurveyPropertyMatrixDropdownColumnsItem.prototype.getPropertyChoices = function (propetyName) { + var properties = __WEBPACK_IMPORTED_MODULE_6_survey_knockout__["JsonObject"].metaData.getProperties("matrixdropdowncolumn"); + for (var i = 0; i < properties.length; i++) { + if (properties[i].name == propetyName) + return properties[i].choices; + } + return []; + }; + return SurveyPropertyMatrixDropdownColumnsItem; +}()); + +__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("matrixdropdowncolumns", function () { return new SurveyPropertyDropdownColumnsEditor(); }); + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyResultfullEditor; }); + + + + + + +var SurveyPropertyResultfullEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyResultfullEditor, _super); + function SurveyPropertyResultfullEditor() { + var _this = _super.call(this) || this; + _this.koUrl = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + _this.koPath = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + _this.koValueName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + _this.koTitleName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + _this.createSurvey(); + var self = _this; + _this.koUrl.subscribe(function (newValue) { self.question.choicesByUrl.url = newValue; self.run(); }); + _this.koPath.subscribe(function (newValue) { self.question.choicesByUrl.path = newValue; self.run(); }); + _this.koValueName.subscribe(function (newValue) { self.question.choicesByUrl.valueName = newValue; self.run(); }); + _this.koTitleName.subscribe(function (newValue) { self.question.choicesByUrl.titleName = newValue; self.run(); }); + return _this; + } + Object.defineProperty(SurveyPropertyResultfullEditor.prototype, "editorType", { + get: function () { return "restfull"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyPropertyResultfullEditor.prototype, "restfullValue", { + get: function () { return this.value; }, + enumerable: true, + configurable: true + }); + SurveyPropertyResultfullEditor.prototype.getValueText = function (value) { + if (!value || !value.url) + return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); + var str = value.url; + if (str.length > 20) { + str = str.substr(0, 20) + "..."; + } + return str; + }; + SurveyPropertyResultfullEditor.prototype.onValueChanged = function () { + var val = this.restfullValue; + this.koUrl(val ? val.url : ""); + this.koPath(val ? val.path : ""); + this.koValueName(val ? val.valueName : ""); + this.koTitleName(val ? val.titleName : ""); + }; + SurveyPropertyResultfullEditor.prototype.onBeforeApply = function () { + var val = new __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["ChoicesRestfull"](); + val.url = this.koUrl(); + val.path = this.koPath(); + val.valueName = this.koValueName(); + val.titleName = this.koTitleName(); + this.setValueCore(val); + }; + SurveyPropertyResultfullEditor.prototype.run = function () { + this.question.choicesByUrl.run(); + }; + SurveyPropertyResultfullEditor.prototype.createSurvey = function () { + this.survey = new __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["Survey"](); + this.survey.showNavigationButtons = false; + this.survey.showQuestionNumbers = "off"; + var page = this.survey.addNewPage("page1"); + this.question = page.addNewQuestion("dropdown", "q1"); + this.question.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.testService"); + this.question.choices = []; + }; + return SurveyPropertyResultfullEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); + +__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("restfull", function () { return new SurveyPropertyResultfullEditor(); }); + + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyItemsEditor__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyValidatorsEditor__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_survey_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyTextItemsEditor; }); + + + + + + + + +var SurveyPropertyTextItemsEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTextItemsEditor, _super); + function SurveyPropertyTextItemsEditor() { + return _super.call(this) || this; + } + Object.defineProperty(SurveyPropertyTextItemsEditor.prototype, "editorType", { + get: function () { return "textitems"; }, + enumerable: true, + configurable: true + }); + SurveyPropertyTextItemsEditor.prototype.createNewEditorItem = function () { + var objs = []; + var items = this.koItems(); + for (var i = 0; i < items.length; i++) { + objs.push({ name: items[i].koName() }); + } + var editItem = { koName: __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](__WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].getNewName(objs, "text")), koTitle: __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](), koIsRequired: __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](false) }; + this.createValidatorsEditor(editItem, []); + return editItem; + }; + SurveyPropertyTextItemsEditor.prototype.createEditorItem = function (item) { + var editItem = { koName: __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](item.name), koTitle: __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](item.title), koIsRequired: __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](item.isRequired) }; + this.createValidatorsEditor(editItem, item.validators); + return editItem; + }; + SurveyPropertyTextItemsEditor.prototype.createItemFromEditorItem = function (editorItem) { + var itemText = new __WEBPACK_IMPORTED_MODULE_6_survey_knockout__["MultipleTextItem"](editorItem.koName(), editorItem.koTitle()); + itemText.isRequired = editorItem.koIsRequired(); + itemText.validators = editorItem.validators; + return itemText; + }; + SurveyPropertyTextItemsEditor.prototype.createValidatorsEditor = function (item, validators) { + item.validators = validators.slice(); + var self = this; + var onItemChanged = function (newValue) { item.validators = newValue; item.koText(self.getText(newValue.length)); }; + var propertyEditor = new __WEBPACK_IMPORTED_MODULE_5__propertyValidatorsEditor__["a" /* SurveyPropertyValidatorsEditor */](); + item.editor = propertyEditor; + propertyEditor.onChanged = function (newValue) { onItemChanged(newValue); }; + propertyEditor.object = item; + propertyEditor.title(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.editProperty")["format"]("Validators")); + propertyEditor.value = item.validators; + item.koText = __WEBPACK_IMPORTED_MODULE_7_knockout__["observable"](this.getText(validators.length)); + }; + SurveyPropertyTextItemsEditor.prototype.getText = function (length) { + return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.items")["format"](length); + }; + return SurveyPropertyTextItemsEditor; +}(__WEBPACK_IMPORTED_MODULE_1__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); + +__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("textitems", function () { return new SurveyPropertyTextItemsEditor(); }); + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_survey_knockout__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_survey_knockout__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyTriggersEditor; }); +/* unused harmony export SurveyPropertyTrigger */ +/* unused harmony export SurveyPropertyVisibleTrigger */ +/* unused harmony export SurveyPropertySetValueTrigger */ +/* unused harmony export SurveyPropertyTriggerObjects */ + + + + + + +var SurveyPropertyTriggersEditor = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTriggersEditor, _super); + function SurveyPropertyTriggersEditor() { + var _this = _super.call(this) || this; + _this.availableTriggers = []; + _this.triggerClasses = []; + var self = _this; + _this.onDeleteClick = function () { self.koItems.remove(self.koSelected()); }; + _this.onAddClick = function (triggerType) { self.addItem(triggerType); }; + _this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); + _this.koPages = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + _this.koQuestions = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); + _this.triggerClasses = __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.getChildrenClasses("surveytrigger", true); + _this.availableTriggers = _this.getAvailableTriggers(); + return _this; + } + Object.defineProperty(SurveyPropertyTriggersEditor.prototype, "editorType", { + get: function () { return "triggers"; }, + enumerable: true, + configurable: true + }); + SurveyPropertyTriggersEditor.prototype.onValueChanged = function () { + if (this.object) { + this.koPages(this.getNames(this.object.pages)); + this.koQuestions(this.getNames(this.object.getAllQuestions())); + } + _super.prototype.onValueChanged.call(this); + if (this.koSelected) { + this.koSelected(this.koItems().length > 0 ? this.koItems()[0] : null); + } + }; + SurveyPropertyTriggersEditor.prototype.addItem = function (triggerType) { + var trigger = __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.createClass(triggerType); + var triggerItem = this.createPropertyTrigger(trigger); + this.koItems.push(triggerItem); + this.koSelected(triggerItem); + }; + SurveyPropertyTriggersEditor.prototype.createEditorItem = function (item) { + var jsonObj = new __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"](); + var trigger = __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.createClass(item.getType()); + jsonObj.toObject(item, trigger); + return this.createPropertyTrigger(trigger); + }; + SurveyPropertyTriggersEditor.prototype.createItemFromEditorItem = function (editorItem) { + var editorTrigger = editorItem; + return editorTrigger.createTrigger(); + }; + SurveyPropertyTriggersEditor.prototype.getAvailableTriggers = function () { + var result = []; + for (var i = 0; i < this.triggerClasses.length; i++) { + result.push(this.triggerClasses[i].name); + } + return result; + }; + SurveyPropertyTriggersEditor.prototype.getNames = function (items) { + var names = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item["name"]) { + names.push(item["name"]); + } + } + return names; + }; + SurveyPropertyTriggersEditor.prototype.createPropertyTrigger = function (trigger) { + var triggerItem = null; + if (trigger.getType() == "visibletrigger") { + triggerItem = new SurveyPropertyVisibleTrigger(trigger, this.koPages, this.koQuestions); + } + if (trigger.getType() == "setvaluetrigger") { + triggerItem = new SurveyPropertySetValueTrigger(trigger, this.koQuestions); + } + if (!triggerItem) { + triggerItem = new SurveyPropertyTrigger(trigger); + } + return triggerItem; + }; + return SurveyPropertyTriggersEditor; +}(__WEBPACK_IMPORTED_MODULE_2__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); + +var SurveyPropertyTrigger = (function () { + function SurveyPropertyTrigger(trigger) { + this.trigger = trigger; + this.operators = ["empty", "notempty", "equal", "notequal", "contains", "notcontains", "greater", "less", "greaterorequal", "lessorequal"]; + this.availableOperators = []; + this.createOperators(); + this.triggerType = trigger.getType(); + this.koType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.triggerType); + this.koName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.name); + this.koOperator = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.operator); + this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.value); + var self = this; + this.koRequireValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.koOperator() != "empty" && self.koOperator() != "notempty"; }); + this.koIsValid = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (self.koName() && (!self.koRequireValue() || self.koValue())) + return true; return false; }); + this.koText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.koName(); self.koOperator(); self.koValue(); return self.getText(); }); + } + SurveyPropertyTrigger.prototype.createTrigger = function () { + var trigger = __WEBPACK_IMPORTED_MODULE_5_survey_knockout__["JsonObject"].metaData.createClass(this.triggerType); + trigger.name = this.koName(); + trigger.operator = this.koOperator(); + trigger.value = this.koValue(); + return trigger; + }; + SurveyPropertyTrigger.prototype.createOperators = function () { + for (var i = 0; i < this.operators.length; i++) { + var name = this.operators[i]; + this.availableOperators.push({ name: name, text: __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("op." + name) }); + } + }; + SurveyPropertyTrigger.prototype.getText = function () { + if (!this.koIsValid()) + return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerNotSet"); + return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerRunIf") + " '" + this.koName() + "' " + this.getOperatorText() + this.getValueText(); + }; + SurveyPropertyTrigger.prototype.getOperatorText = function () { + var op = this.koOperator(); + for (var i = 0; i < this.availableOperators.length; i++) { + if (this.availableOperators[i].name == op) + return this.availableOperators[i].text; + } + return op; + }; + SurveyPropertyTrigger.prototype.getValueText = function () { + if (!this.koRequireValue()) + return ""; + return " " + this.koValue(); + }; + return SurveyPropertyTrigger; +}()); + +var SurveyPropertyVisibleTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyVisibleTrigger, _super); + function SurveyPropertyVisibleTrigger(trigger, koPages, koQuestions) { + var _this = _super.call(this, trigger) || this; + _this.trigger = trigger; + _this.pages = new SurveyPropertyTriggerObjects(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerMakePagesVisible"), koPages(), trigger.pages); + _this.questions = new SurveyPropertyTriggerObjects(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerMakeQuestionsVisible"), koQuestions(), trigger.questions); + return _this; + } + SurveyPropertyVisibleTrigger.prototype.createTrigger = function () { + var trigger = _super.prototype.createTrigger.call(this); + trigger.pages = this.pages.koChoosen(); + trigger.questions = this.questions.koChoosen(); + return trigger; + }; + return SurveyPropertyVisibleTrigger; +}(SurveyPropertyTrigger)); + +var SurveyPropertySetValueTrigger = (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertySetValueTrigger, _super); + function SurveyPropertySetValueTrigger(trigger, koQuestions) { + var _this = _super.call(this, trigger) || this; + _this.trigger = trigger; + _this.koQuestions = koQuestions; + _this.kosetToName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.setToName); + _this.kosetValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.setValue); + _this.koisVariable = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.isVariable); + return _this; + } + SurveyPropertySetValueTrigger.prototype.createTrigger = function () { + var trigger = _super.prototype.createTrigger.call(this); + trigger.setToName = this.kosetToName(); + trigger.setValue = this.kosetValue(); + trigger.isVariable = this.koisVariable(); + return trigger; + }; + return SurveyPropertySetValueTrigger; +}(SurveyPropertyTrigger)); + +var SurveyPropertyTriggerObjects = (function () { + function SurveyPropertyTriggerObjects(title, allObjects, choosenObjects) { + this.title = title; + this.koChoosen = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](choosenObjects); + var array = []; + for (var i = 0; i < allObjects.length; i++) { + var item = allObjects[i]; + if (choosenObjects.indexOf(item) < 0) { + array.push(item); + } + } + this.koObjects = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](array); + this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + this.koChoosenSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); + var self = this; + this.onDeleteClick = function () { self.deleteItem(); }; + this.onAddClick = function () { self.addItem(); }; + } + SurveyPropertyTriggerObjects.prototype.deleteItem = function () { + this.changeItems(this.koChoosenSelected(), this.koChoosen, this.koObjects); + }; + SurveyPropertyTriggerObjects.prototype.addItem = function () { + this.changeItems(this.koSelected(), this.koObjects, this.koChoosen); + }; + SurveyPropertyTriggerObjects.prototype.changeItems = function (item, removedFrom, addTo) { + removedFrom.remove(item); + addTo.push(item); + removedFrom.sort(); + addTo.sort(); + }; + return SurveyPropertyTriggerObjects; +}()); + +__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */].registerEditor("triggers", function () { return new SurveyPropertyTriggersEditor(); }); + + +/***/ }), +/* 33 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 34 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_34__; + +/***/ }), +/* 35 */ +/***/ (function(module, exports) { + +module.exports = "
\r\n
    \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n\r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n
    \r\n \r\n
      \r\n
    • \r\n
    • \r\n
    \r\n
    \r\n
  • \r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
"; + +/***/ }), +/* 36 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 38 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 39 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 40 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 41 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 42 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n\r\n"; + +/***/ }), +/* 43 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n\r\n"; + +/***/ }), +/* 44 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n"; + +/***/ }), +/* 45 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n"; + +/***/ }), +/* 46 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 47 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 48 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n\r\n"; + +/***/ }), +/* 49 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 50 */ +/***/ (function(module, exports) { + +module.exports = "\r\n\r\n\r\n"; + +/***/ }), +/* 51 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 52 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 53 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 54 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 55 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 56 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 57 */ +/***/ (function(module, exports) { + +module.exports = "\r\n"; + +/***/ }), +/* 58 */ +/***/ (function(module, exports) { + +module.exports = ""; + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = "" + __webpack_require__(35) + "\n" + __webpack_require__(36) + "\n" + __webpack_require__(37) + "\n" + __webpack_require__(38) + "\n" + __webpack_require__(39) + "\n" + __webpack_require__(58) + "\n" + __webpack_require__(56) + "\n" + __webpack_require__(55) + "\n" + __webpack_require__(57) + "\n" + __webpack_require__(40) + "\n" + __webpack_require__(41) + "\n" + __webpack_require__(43) + "\n" + __webpack_require__(42) + "\n" + __webpack_require__(44) + "\n" + __webpack_require__(45) + "\n" + __webpack_require__(46) + "\n" + __webpack_require__(47) + "\n" + __webpack_require__(48) + "\n" + __webpack_require__(49) + "\n" + __webpack_require__(50) + "\n" + __webpack_require__(51) + "\n" + __webpack_require__(52) + "\n" + __webpack_require__(53) + "\n" + __webpack_require__(54) + ""; + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__textWorker__ = __webpack_require__(10); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyJSONEditor; }); + + +var SurveyJSONEditor = (function () { + function SurveyJSONEditor() { + this.isProcessingImmediately = false; + this.timeoutId = -1; + this.koText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); + this.koErrors = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); + var self = this; + this.koText.subscribe(function (newValue) { + self.onJsonEditorChanged(); + }); + } + SurveyJSONEditor.prototype.init = function () { + if (!this.hasAceEditor) + return; + this.aceEditor = ace.edit("surveyjsJSONEditor"); + var self = this; + //TODO add event to change ace theme and mode + //this.aceEditor.setTheme("ace/theme/monokai"); + //this.aceEditor.session.setMode("ace/mode/json"); + this.aceEditor.setShowPrintMargin(false); + this.aceEditor.getSession().on("change", function () { + self.onJsonEditorChanged(); + }); + this.aceEditor.getSession().setUseWorker(true); + __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */].newLineChar = this.aceEditor.session.doc.getNewLineCharacter(); + }; + Object.defineProperty(SurveyJSONEditor.prototype, "hasAceEditor", { + get: function () { return typeof ace !== "undefined"; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyJSONEditor.prototype, "text", { + get: function () { + if (!this.hasAceEditor) + return this.koText(); + return this.aceEditor.getValue(); + }, + set: function (value) { + this.isProcessingImmediately = true; + this.koText(value); + if (this.aceEditor) { + this.aceEditor.setValue(value); + this.aceEditor.renderer.updateFull(true); + } + this.processJson(value); + this.isProcessingImmediately = false; + }, + enumerable: true, + configurable: true + }); + SurveyJSONEditor.prototype.show = function (value) { + this.text = value; + if (this.aceEditor) { + this.aceEditor.focus(); + } + }; + Object.defineProperty(SurveyJSONEditor.prototype, "isJsonCorrect", { + get: function () { + this.textWorker = new __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */](this.text); + return this.textWorker.isJsonCorrect; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SurveyJSONEditor.prototype, "survey", { + get: function () { return this.textWorker.survey; }, + enumerable: true, + configurable: true + }); + SurveyJSONEditor.prototype.onJsonEditorChanged = function () { + if (this.timeoutId > -1) { + clearTimeout(this.timeoutId); + } + if (this.isProcessingImmediately) { + this.timeoutId = -1; + } + else { + var self = this; + this.timeoutId = setTimeout(function () { + self.timeoutId = -1; + self.processJson(self.text); + }, SurveyJSONEditor.updateTextTimeout); + } + }; + SurveyJSONEditor.prototype.processJson = function (text) { + this.textWorker = new __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */](text); + if (this.aceEditor) { + this.aceEditor.getSession().setAnnotations(this.createAnnotations(text, this.textWorker.errors)); + } + else { + this.koErrors(this.textWorker.errors); + } + }; + SurveyJSONEditor.prototype.createAnnotations = function (text, errors) { + var annotations = new Array(); + for (var i = 0; i < errors.length; i++) { + var error = errors[i]; + var annotation = { row: error.position.start.row, column: error.position.start.column, text: error.text, type: "error" }; + annotations.push(annotation); + } + return annotations; + }; + return SurveyJSONEditor; +}()); + +SurveyJSONEditor.updateTextTimeout = 1000; + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) {Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(25); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_jquery__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_jquery__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_bootstrap__ = __webpack_require__(34); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_bootstrap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_bootstrap__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dragdrophelper__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "DragDropHelper", function() { return __WEBPACK_IMPORTED_MODULE_3__dragdrophelper__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditors_propertyEditorBase__ = __webpack_require__(4); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorBase", function() { return __WEBPACK_IMPORTED_MODULE_4__propertyEditors_propertyEditorBase__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyStringPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_4__propertyEditors_propertyEditorBase__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyDropdownPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_4__propertyEditors_propertyEditorBase__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyBooleanPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_4__propertyEditors_propertyEditorBase__["d"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNumberPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_4__propertyEditors_propertyEditorBase__["e"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditors_propertyTextItemsEditor__ = __webpack_require__(31); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTextItemsEditor", function() { return __WEBPACK_IMPORTED_MODULE_5__propertyEditors_propertyTextItemsEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__propertyEditors_propertyItemsEditor__ = __webpack_require__(5); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyItemsEditor", function() { return __WEBPACK_IMPORTED_MODULE_6__propertyEditors_propertyItemsEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyEditors_propertyItemValuesEditor__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyItemValuesEditor", function() { return __WEBPACK_IMPORTED_MODULE_7__propertyEditors_propertyItemValuesEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__propertyEditors_propertyMatrixDropdownColumnsEditor__ = __webpack_require__(29); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDropdownColumnsEditor", function() { return __WEBPACK_IMPORTED_MODULE_8__propertyEditors_propertyMatrixDropdownColumnsEditor__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyMatrixDropdownColumnsItem", function() { return __WEBPACK_IMPORTED_MODULE_8__propertyEditors_propertyMatrixDropdownColumnsEditor__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyModalEditor__ = __webpack_require__(8); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyModalEditor", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyModalEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__propertyEditors_propertyRestfullEditor__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyResultfullEditor", function() { return __WEBPACK_IMPORTED_MODULE_10__propertyEditors_propertyRestfullEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyTriggersEditor__ = __webpack_require__(32); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTriggersEditor", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyTriggersEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__propertyEditors_propertyValidatorsEditor__ = __webpack_require__(16); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyValidatorsEditor", function() { return __WEBPACK_IMPORTED_MODULE_12__propertyEditors_propertyValidatorsEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__surveyObjects__ = __webpack_require__(21); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjects", function() { return __WEBPACK_IMPORTED_MODULE_13__surveyObjects__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__editorLocalization__ = __webpack_require__(2); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "editorLocalization", function() { return __WEBPACK_IMPORTED_MODULE_14__editorLocalization__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__questionEditors_questionEditorGeneralProperties__ = __webpack_require__(18); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorGeneralProperties", function() { return __WEBPACK_IMPORTED_MODULE_15__questionEditors_questionEditorGeneralProperties__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorGeneralRow", function() { return __WEBPACK_IMPORTED_MODULE_15__questionEditors_questionEditorGeneralProperties__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorGeneralProperty", function() { return __WEBPACK_IMPORTED_MODULE_15__questionEditors_questionEditorGeneralProperties__["c"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__questionEditors_questionEditorDefinition__ = __webpack_require__(17); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorDefinition", function() { return __WEBPACK_IMPORTED_MODULE_16__questionEditors_questionEditorDefinition__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__questionEditors_questionEditor__ = __webpack_require__(9); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorShowWindow", function() { return __WEBPACK_IMPORTED_MODULE_17__questionEditors_questionEditor__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditor", function() { return __WEBPACK_IMPORTED_MODULE_17__questionEditors_questionEditor__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorTabGeneral", function() { return __WEBPACK_IMPORTED_MODULE_17__questionEditors_questionEditor__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorTabProperty", function() { return __WEBPACK_IMPORTED_MODULE_17__questionEditors_questionEditor__["d"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__questionToolbox__ = __webpack_require__(19); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionToolbox", function() { return __WEBPACK_IMPORTED_MODULE_18__questionToolbox__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__objectProperty__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_19__objectProperty__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__objectEditor__ = __webpack_require__(7); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjectEditor", function() { return __WEBPACK_IMPORTED_MODULE_20__objectEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__pagesEditor__ = __webpack_require__(15); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPagesEditor", function() { return __WEBPACK_IMPORTED_MODULE_21__pagesEditor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__textWorker__ = __webpack_require__(10); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyTextWorker", function() { return __WEBPACK_IMPORTED_MODULE_22__textWorker__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__surveyHelper__ = __webpack_require__(6); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ObjType", function() { return __WEBPACK_IMPORTED_MODULE_23__surveyHelper__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyHelper", function() { return __WEBPACK_IMPORTED_MODULE_23__surveyHelper__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__surveyEmbedingWindow__ = __webpack_require__(20); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEmbedingWindow", function() { return __WEBPACK_IMPORTED_MODULE_24__surveyEmbedingWindow__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__objectVerbs__ = __webpack_require__(14); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyVerbs", function() { return __WEBPACK_IMPORTED_MODULE_25__objectVerbs__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyVerbItem", function() { return __WEBPACK_IMPORTED_MODULE_25__objectVerbs__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyVerbChangeTypeItem", function() { return __WEBPACK_IMPORTED_MODULE_25__objectVerbs__["c"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyVerbChangePageItem", function() { return __WEBPACK_IMPORTED_MODULE_25__objectVerbs__["d"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__undoredo__ = __webpack_require__(23); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyUndoRedo", function() { return __WEBPACK_IMPORTED_MODULE_26__undoredo__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "UndoRedoItem", function() { return __WEBPACK_IMPORTED_MODULE_26__undoredo__["b"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__surveyjsObjects__ = __webpack_require__(22); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyForDesigner", function() { return __WEBPACK_IMPORTED_MODULE_27__surveyjsObjects__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__editor__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEditor", function() { return __WEBPACK_IMPORTED_MODULE_28__editor__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__localization_french__ = __webpack_require__(27); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return Version; }); +// styles + +var Version; +Version = "" + "0.12.8"; + +global["jQuery"] = __WEBPACK_IMPORTED_MODULE_1_jquery__; + + + + + + + + + + + + + + + + + + + + + + + + + + + +//editorLocalization + + +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(33))) + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA4ZTJjNTczOGFmM2IyODlmOThkMCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwia29cIixcImNvbW1vbmpzMlwiOlwia25vY2tvdXRcIixcImNvbW1vbmpzXCI6XCJrbm9ja291dFwiLFwiYW1kXCI6XCJrbm9ja291dFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1rbm9ja291dFwiLFwiY29tbW9uanNcIjpcInN1cnZleS1rbm9ja291dFwiLFwiYW1kXCI6XCJzdXJ2ZXkta25vY2tvdXRcIn0iLCJ3ZWJwYWNrOi8vLy4vc3JjL2VkaXRvckxvY2FsaXphdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9oZWxwZXJzLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlJdGVtc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5SGVscGVyLnRzIiwid2VicGFjazovLy8uL3NyYy9vYmplY3RFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1vZGFsRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RleHRXb3JrZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2pzb241LnRzIiwid2VicGFjazovLy8uL3NyYy9kcmFnZHJvcGhlbHBlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvb2JqZWN0UHJvcGVydHkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL29iamVjdFZlcmJzLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VmFsaWRhdG9yc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yR2VuZXJhbFByb3BlcnRpZXMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uVG9vbGJveC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5RW1iZWRpbmdXaW5kb3cudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleU9iamVjdHMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleWpzT2JqZWN0cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdW5kb3JlZG8udHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcImpRdWVyeVwiLFwiY29tbW9uanMyXCI6XCJqcXVlcnlcIixcImNvbW1vbmpzXCI6XCJqcXVlcnlcIixcImFtZFwiOlwianF1ZXJ5XCJ9Iiwid2VicGFjazovLy8uL3NyYy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2ZyZW5jaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5SXRlbVZhbHVlc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlSZXN0ZnVsbEVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VGV4dEl0ZW1zRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlUcmlnZ2Vyc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJib290c3RyYXBcIixcImNvbW1vbmpzMlwiOlwiYm9vdHN0cmFwXCIsXCJjb21tb25qc1wiOlwiYm9vdHN0cmFwXCIsXCJhbWRcIjpcImJvb3RzdHJhcFwifSIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL2luZGV4Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9qc29uZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9vYmplY3RlZGl0b3IuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL29iamVjdHZlcmJzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wYWdlZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItYm9vbGVhbi5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRyb3Bkb3duLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZXhwcmVzc2lvbi5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWh0bWwuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbWF0cml4ZHJvcGRvd25jb2x1bW5zLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWwuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1udW1iZXIuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1yZXN0ZnVsbC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXN0cmluZy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHQuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10ZXh0aXRlbXMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10cmlnZ2Vycy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzaXRlbXMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci12YWxpZGF0b3JzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3ItY29udGVudC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3J0YWItZ2VuZXJhbC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvc3VydmV5ZW1iZWRpbmcuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL2VudHJ5Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleUpTT05FZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDaEVBLCtDOzs7Ozs7QUNBQSwrQzs7Ozs7Ozs7O0FDQU8sSUFBSSxrQkFBa0IsR0FBRztJQUM1QixhQUFhLEVBQUUsRUFBRTtJQUNqQixPQUFPLEVBQUUsRUFBRTtJQUNYLFNBQVMsRUFBRSxVQUFVLE9BQWUsRUFBRSxNQUFxQjtRQUFyQixzQ0FBcUI7UUFDdkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDekQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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QUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0ksV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ0wsdUJBQUM7QUFBRCxDQUFDOztBQXhGaUIsa0NBQWlCLEdBQVcsSUFBSSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0xuRDtBQUFBLFNBQVM7QUFDYTtBQUVmLElBQUksT0FBZSxDQUFDO0FBQzNCLE9BQU8sR0FBRyxLQUFHLFFBQXFCLENBQUM7QUFFRjtBQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsb0NBQU0sQ0FBQztBQUNQO0FBRThCO0FBSUY7QUFDMEM7QUFDUjtBQUNVO0FBRXpCO0FBQ2U7QUFDUTtBQUNGO0FBQ0k7QUFDNUM7QUFFVTtBQUVxSDtBQUNuRjtBQUM2RTtBQUVySDtBQUNJO0FBQ0o7QUFDRjtBQUNGO0FBQ087QUFDTztBQUNrRDtBQUN0RDtBQUNMO0FBQ2I7QUFFdkMsb0JBQW9CO0FBQ1kiLCJmaWxlIjoiLi9wYWNrYWdlL3N1cnZleWVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpLCByZXF1aXJlKFwic3VydmV5LWtub2Nrb3V0XCIpLCByZXF1aXJlKFwianF1ZXJ5XCIpLCByZXF1aXJlKFwiYm9vdHN0cmFwXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5RWRpdG9yXCIsIFtcImtub2Nrb3V0XCIsIFwic3VydmV5LWtub2Nrb3V0XCIsIFwianF1ZXJ5XCIsIFwiYm9vdHN0cmFwXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleUVkaXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpLCByZXF1aXJlKFwic3VydmV5LWtub2Nrb3V0XCIpLCByZXF1aXJlKFwianF1ZXJ5XCIpLCByZXF1aXJlKFwiYm9vdHN0cmFwXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlFZGl0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJrb1wiXSwgcm9vdFtcIlN1cnZleVwiXSwgcm9vdFtcImpRdWVyeVwiXSwgcm9vdFtcImJvb3RzdHJhcFwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMjRfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8zNF9fKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDYxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA4ZTJjNTczOGFmM2IyODlmOThkMCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwia29cIixcImNvbW1vbmpzMlwiOlwia25vY2tvdXRcIixcImNvbW1vbmpzXCI6XCJrbm9ja291dFwiLFwiYW1kXCI6XCJrbm9ja291dFwifVxuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXkta25vY2tvdXRcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXkta25vY2tvdXRcIixcImFtZFwiOlwic3VydmV5LWtub2Nrb3V0XCJ9XG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydCB2YXIgZWRpdG9yTG9jYWxpemF0aW9uID0ge1xyXG4gICAgY3VycmVudExvY2FsZTogXCJcIixcclxuICAgIGxvY2FsZXM6IHt9LFxyXG4gICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIWxvY2FsZSkgbG9jYWxlID0gdGhpcy5jdXJyZW50TG9jYWxlO1xyXG4gICAgICAgIHZhciBsb2MgPSBsb2NhbGUgPyB0aGlzLmxvY2FsZXNbbG9jYWxlXSA6IGRlZmF1bHRTdHJpbmdzO1xyXG4gICAgICAgIGlmICghbG9jKSBsb2MgPSBkZWZhdWx0U3RyaW5ncztcclxuICAgICAgICB2YXIgcGF0aCA9IHN0ck5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICB2YXIgb2JqID0gbG9jO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBvYmogPSBvYmpbcGF0aFtpXV07XHJcbiAgICAgICAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jID09PSBkZWZhdWx0U3RyaW5ncykgcmV0dXJuIHBhdGhbaV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoc3RyTmFtZSwgXCJlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSxcclxuICAgIGdldFByb3BlcnR5TmFtZTogZnVuY3Rpb24gKHN0ck5hbWU6IHN0cmluZywgbG9jYWw6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICB2YXIgb2JqID0gdGhpcy5nZXRQcm9wZXJ0eShzdHJOYW1lLCBsb2NhbCk7XHJcbiAgICAgICAgaWYgKG9ialtcIm5hbWVcIl0pIHJldHVybiBvYmpbXCJuYW1lXCJdO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9LFxyXG4gICAgZ2V0UHJvcGVydHlUaXRsZTogZnVuY3Rpb24gKHN0ck5hbWU6IHN0cmluZywgbG9jYWw6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICB2YXIgb2JqID0gdGhpcy5nZXRQcm9wZXJ0eShzdHJOYW1lLCBsb2NhbCk7XHJcbiAgICAgICAgaWYgKG9ialtcInRpdGxlXCJdKSByZXR1cm4gb2JqW1widGl0bGVcIl07XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9LFxyXG4gICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uIChzdHJOYW1lOiBzdHJpbmcsIGxvY2FsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIG9iaiA9IHRoaXMuZ2V0U3RyaW5nKFwicC5cIiArIHN0ck5hbWUsIGxvY2FsKTtcclxuICAgICAgICBpZiAob2JqICE9PSBzdHJOYW1lKSByZXR1cm4gb2JqO1xyXG4gICAgICAgIHZhciBwb3MgPSBzdHJOYW1lLmluZGV4T2YoJ18nKTtcclxuICAgICAgICBpZiAocG9zIDwgLTEpIHJldHVybiBvYmo7XHJcbiAgICAgICAgc3RyTmFtZSA9IHN0ck5hbWUuc3Vic3RyKHBvcyArIDEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZyhcInAuXCIgKyBzdHJOYW1lLCBsb2NhbCk7XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYWxlczogZnVuY3Rpb24gKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciByZXMgPSBbXTtcclxuICAgICAgICByZXMucHVzaChcIlwiKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5sb2NhbGVzKSB7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgdmFyIGRlZmF1bHRTdHJpbmdzID0ge1xyXG4gICAgLy9zdXJ2ZXkgdGVtcGxhdGVzXHJcbiAgICBzdXJ2ZXk6IHtcclxuICAgICAgICBkcm9wUXVlc3Rpb246IFwiUGxlYXNlIGRyb3AgYSBxdWVzdGlvbiBoZXJlLlwiLFxyXG4gICAgICAgIGNvcHk6IFwiQ29weVwiLFxyXG4gICAgICAgIGFkZFRvVG9vbGJveDogXCJBZGQgdG8gdG9vbGJveFwiLFxyXG4gICAgICAgIGRlbGV0ZVBhbmVsOiBcIkRlbGV0ZSBQYW5lbFwiLFxyXG4gICAgICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIkRlbGV0ZSBRdWVzdGlvblwiXHJcbiAgICB9LFxyXG4gICAgLy9xdWVzdGlvblR5cGVzXHJcbiAgICBxdDoge1xyXG4gICAgICAgIGNoZWNrYm94OiBcIkNoZWNrYm94XCIsXHJcbiAgICAgICAgY29tbWVudDogXCJDb21tZW50XCIsXHJcbiAgICAgICAgZHJvcGRvd246IFwiRHJvcGRvd25cIixcclxuICAgICAgICBmaWxlOiBcIkZpbGVcIixcclxuICAgICAgICBodG1sOiBcIkh0bWxcIixcclxuICAgICAgICBtYXRyaXg6IFwiTWF0cml4IChzaW5nbGUgY2hvaWNlKVwiLFxyXG4gICAgICAgIG1hdHJpeGRyb3Bkb3duOiBcIk1hdHJpeCAobXVsdGlwbGUgY2hvaWNlKVwiLFxyXG4gICAgICAgIG1hdHJpeGR5bmFtaWM6IFwiTWF0cml4IChkeW5hbWljIHJvd3MpXCIsXHJcbiAgICAgICAgbXVsdGlwbGV0ZXh0OiBcIk11bHRpcGxlIFRleHRcIixcclxuICAgICAgICBwYW5lbDogXCJQYW5lbFwiLFxyXG4gICAgICAgIHJhZGlvZ3JvdXA6IFwiUmFkaW9ncm91cFwiLFxyXG4gICAgICAgIHJhdGluZzogXCJSYXRpbmdcIixcclxuICAgICAgICB0ZXh0OiBcIlNpbmdsZSBJbnB1dFwiXHJcbiAgICB9LFxyXG4gICAgLy9TdHJpbmdzIGluIEVkaXRvclxyXG4gICAgZWQ6IHtcclxuICAgICAgICBhZGROZXdQYWdlOiBcIkFkZCBOZXcgUGFnZVwiLFxyXG4gICAgICAgIG5ld1BhZ2VOYW1lOiBcInBhZ2VcIixcclxuICAgICAgICBuZXdRdWVzdGlvbk5hbWU6IFwicXVlc3Rpb25cIixcclxuICAgICAgICBuZXdQYW5lbE5hbWU6IFwicGFuZWxcIixcclxuICAgICAgICB0ZXN0U3VydmV5OiBcIlRlc3QgU3VydmV5XCIsXHJcbiAgICAgICAgdGVzdFN1cnZleUFnYWluOiBcIlRlc3QgU3VydmV5IEFnYWluXCIsXHJcbiAgICAgICAgdGVzdFN1cnZleVdpZHRoOiBcIlN1cnZleSB3aWR0aDogXCIsXHJcbiAgICAgICAgZW1iZWRTdXJ2ZXk6IFwiRW1iZWQgU3VydmV5XCIsXHJcbiAgICAgICAgc2F2ZVN1cnZleTogXCJTYXZlIFN1cnZleVwiLFxyXG4gICAgICAgIGRlc2lnbmVyOiBcIlN1cnZleSBEZXNpZ25lclwiLFxyXG4gICAgICAgIGpzb25FZGl0b3I6IFwiSlNPTiBFZGl0b3JcIixcclxuICAgICAgICB1bmRvOiBcIlVuZG9cIixcclxuICAgICAgICByZWRvOiBcIlJlZG9cIixcclxuICAgICAgICBvcHRpb25zOiBcIk9wdGlvbnNcIixcclxuICAgICAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCJHZW5lcmF0ZSBWYWxpZCBKU09OXCIsXHJcbiAgICAgICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiR2VuZXJhdGUgUmVhZGFibGUgSlNPTlwiLFxyXG4gICAgICAgIHRvb2xib3g6IFwiVG9vbGJveFwiLFxyXG4gICAgICAgIGRlbFNlbE9iamVjdDogXCJEZWxldGUgc2VsZWN0ZWQgb2JqZWN0XCIsXHJcbiAgICAgICAgY29ycmVjdEpTT046IFwiUGxlYXNlIGNvcnJlY3QgSlNPTi5cIixcclxuICAgICAgICBzdXJ2ZXlSZXN1bHRzOiBcIlN1cnZleSBSZXN1bHQ6IFwiXHJcbiAgICB9LFxyXG4gICAgLy9Qcm9wZXJ0eSBFZGl0b3JzXHJcbiAgICBwZToge1xyXG4gICAgICAgIGFwcGx5OiBcIkFwcGx5XCIsXHJcbiAgICAgICAgb2s6IFwiT0tcIixcclxuICAgICAgICBjYW5jZWw6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgcmVzZXQ6IFwiUmVzZXRcIixcclxuICAgICAgICBjbG9zZTogXCJDbG9zZVwiLFxyXG4gICAgICAgIGRlbGV0ZTogXCJEZWxldGVcIixcclxuICAgICAgICBhZGROZXc6IFwiQWRkIE5ld1wiLFxyXG4gICAgICAgIHJlbW92ZUFsbDogXCJSZW1vdmUgQWxsXCIsXHJcbiAgICAgICAgZWRpdDogXCJFZGl0XCIsXHJcbiAgICAgICAgZW1wdHk6IFwiPGVtcHR5PlwiLFxyXG4gICAgICAgIGZhc3RFbnRyeTogXCJGYXN0IEVudHJ5XCIsXHJcbiAgICAgICAgZm9ybUVudHJ5OiBcIkZvcm0gRW50cnlcIixcclxuICAgICAgICB0ZXN0U2VydmljZTogXCJUZXN0IHRoZSBzZXJ2aWNlXCIsXHJcbiAgICAgICAgZXhwcmVzc2lvbkhlbHA6IFwiUGxlYXNlIGVudGVyIGEgYm9vbGVhbiBleHByZXNzaW9uLiBJdCBzaG91bGQgcmV0dXJuIHRydWUgdG8ga2VlcCB0aGUgcXVlc3Rpb24vcGFnZSB2aXNpYmxlLiBGb3IgZXhhbXBsZToge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gPSAzIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXHJcblxyXG4gICAgICAgIHByb3BlcnR5SXNFbXB0eTogXCJQbGVhc2UgZW50ZXIgdmFsdWUgaW50byB0aGUgcHJvcGVydHlcIixcclxuICAgICAgICB2YWx1ZTogXCJWYWx1ZVwiLFxyXG4gICAgICAgIHRleHQ6IFwiVGV4dFwiLFxyXG4gICAgICAgIHJlcXVpcmVkOiBcIlJlcXVpcmVkP1wiLFxyXG4gICAgICAgIGNvbHVtbkVkaXQ6IFwiRWRpdCBjb2x1bW46IHswfVwiLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGhhc090aGVyOiBcIkhhcyBvdGhlciBpdGVtXCIsXHJcbiAgICAgICAgbmFtZTogXCJOYW1lXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVGl0bGVcIixcclxuICAgICAgICBjZWxsVHlwZTogXCJDZWxsIHR5cGVcIixcclxuICAgICAgICBjb2xDb3VudDogXCJDb2x1bW4gY291bnRcIixcclxuICAgICAgICBjaG9pY2VzT3JkZXI6IFwiU2VsZWN0IGNob2ljZXMgb3JkZXJcIixcclxuICAgICAgICB2aXNpYmxlOiBcIklzIHZpc2libGU/XCIsXHJcbiAgICAgICAgaXNSZXF1aXJlZDogXCJJcyByZXF1aXJlZD9cIixcclxuICAgICAgICBzdGFydFdpdGhOZXdMaW5lOiBcIklzIHN0YXJ0IHdpdGggbmV3IGxpbmU/XCIsXHJcbiAgICAgICAgcm93czogXCJSb3cgY291bnRcIixcclxuICAgICAgICBwbGFjZUhvbGRlcjogXCJJbnB1dCBwbGFjZSBob2xkZXJcIixcclxuICAgICAgICBzaG93UHJldmlldzogXCJJcyBpbWFnZSBwcmV2aWV3IHNob3duP1wiLFxyXG4gICAgICAgIHN0b3JlRGF0YUFzVGV4dDogXCJTdG9yZSBmaWxlIGNvbnRlbnQgaW4gSlNPTiByZXN1bHQgYXMgdGV4dFwiLFxyXG4gICAgICAgIG1heFNpemU6IFwiTWF4aW11bSBmaWxlIHNpemUgaW4gYnl0ZXNcIixcclxuICAgICAgICBpbWFnZUhlaWdodDogXCJJbWFnZSBoZWlnaHRcIixcclxuICAgICAgICBpbWFnZVdpZHRoOiBcIkltYWdlIHdpZHRoXCIsXHJcbiAgICAgICAgcm93Q291bnQ6IFwiUm93IGNvdW50XCIsIFxyXG4gICAgICAgIGFkZFJvd1RleHQ6IFwiQWRkIHJvdyBidXR0b24gdGV4dFwiLCBcclxuICAgICAgICByZW1vdmVSb3dUZXh0OiBcIlJlbW92ZSByb3cgYnV0dG9uIHRleHRcIixcclxuICAgICAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiTWluaW11bSByYXRlIGRlc2NyaXB0aW9uXCIsIFxyXG4gICAgICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJNYXhpbXVtIHJhdGUgZGVzY3JpcHRpb25cIixcclxuICAgICAgICBpbnB1dFR5cGU6IFwiSW5wdXQgdHlwZVwiLFxyXG4gICAgICAgIG9wdGlvbnNDYXB0aW9uOiBcIk9wdGlvbnMgY2FwdGlvblwiLFxyXG5cclxuICAgICAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdCBxdWVzdGlvbjogezB9XCIsXHJcbiAgICAgICAgdGFiczoge1xyXG4gICAgICAgICAgICBnZW5lcmFsOiBcIkdlbmVyYWxcIixcclxuICAgICAgICAgICAgZmlsZU9wdGlvbnM6IFwiT3B0aW9uc1wiLFxyXG4gICAgICAgICAgICBodG1sOiBcIkh0bWwgRWRpdG9yXCIsXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IFwiQ29sdW1uc1wiLFxyXG4gICAgICAgICAgICByb3dzOiBcIlJvd3NcIixcclxuICAgICAgICAgICAgY2hvaWNlczogXCJDaG9pY2VzXCIsXHJcbiAgICAgICAgICAgIHZpc2libGVJZjogXCJWaXNpYmxlIElmXCIsXHJcbiAgICAgICAgICAgIHJhdGVWYWx1ZXM6IFwiUmF0ZSBWYWx1ZXNcIixcclxuICAgICAgICAgICAgY2hvaWNlc0J5VXJsOiBcIkNob2ljZXMgZnJvbSBXZWJcIixcclxuICAgICAgICAgICAgbWF0cml4Q2hvaWNlczogXCJEZWZhdWx0IENob2ljZXNcIixcclxuICAgICAgICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwiVGV4dCBJbnB1dHNcIlxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGVkaXRQcm9wZXJ0eTogXCJFZGl0IHByb3BlcnR5ICd7MH0nXCIsXHJcbiAgICAgICAgaXRlbXM6IFwiWyBJdGVtczogezB9IF1cIixcclxuXHJcbiAgICAgICAgZW50ZXJOZXdWYWx1ZTogXCJQbGVhc2UsIGVudGVyIHRoZSB2YWx1ZS5cIixcclxuICAgICAgICBub3F1ZXN0aW9uczogXCJUaGVyZSBpcyBubyBhbnkgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcclxuICAgICAgICBjcmVhdGV0cmlnZ2VyOiBcIlBsZWFzZSBjcmVhdGUgYSB0cmlnZ2VyXCIsXHJcbiAgICAgICAgdHJpZ2dlck9uOiBcIk9uIFwiLFxyXG4gICAgICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIk1ha2UgcGFnZXMgdmlzaWJsZTpcIixcclxuICAgICAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwiTWFrZSBxdWVzdGlvbnMgdmlzaWJsZTpcIixcclxuICAgICAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIkNvbXBsZXRlIHRoZSBzdXJ2ZXkgaWYgc3VjY2VlZC5cIixcclxuICAgICAgICB0cmlnZ2VyTm90U2V0OiBcIlRoZSB0cmlnZ2VyIGlzIG5vdCBzZXRcIixcclxuICAgICAgICB0cmlnZ2VyUnVuSWY6IFwiUnVuIGlmXCIsXHJcbiAgICAgICAgdHJpZ2dlclNldFRvTmFtZTogXCJDaGFuZ2UgdmFsdWUgb2Y6IFwiLFxyXG4gICAgICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJ0bzogXCIsXHJcbiAgICAgICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiRG8gbm90IHB1dCB0aGUgdmFyaWFibGUgaW50byB0aGUgc3VydmV5IHJlc3VsdC5cIixcclxuICAgICAgICB2ZXJiQ2hhbmdlVHlwZTogXCJDaGFuZ2UgdHlwZSBcIixcclxuICAgICAgICB2ZXJiQ2hhbmdlUGFnZTogXCJDaGFuZ2UgcGFnZSBcIlxyXG4gICAgfSxcclxuICAgIC8vT3BlcmF0b3JzXHJcbiAgICBvcDoge1xyXG4gICAgICAgIGVtcHR5OiBcImlzIGVtcHR5XCIsXHJcbiAgICAgICAgbm90ZW1wdHk6IFwiaXMgbm90IGVtcHR5XCIsXHJcbiAgICAgICAgZXF1YWw6IFwiZXF1YWxzXCIsXHJcbiAgICAgICAgbm90ZXF1YWw6IFwibm90IGVxdWFsc1wiLFxyXG4gICAgICAgIGNvbnRhaW5zOiBcImNvbnRhaW5zXCIsXHJcbiAgICAgICAgbm90Y29udGFpbnM6IFwibm90IGNvbnRhaW5zXCIsXHJcbiAgICAgICAgZ3JlYXRlcjogXCJncmVhdGVyXCIsXHJcbiAgICAgICAgbGVzczogXCJsZXNzXCIsXHJcbiAgICAgICAgZ3JlYXRlcm9yZXF1YWw6IFwiZ3JlYXRlciBvciBlcXVhbHNcIixcclxuICAgICAgICBsZXNzb3JlcXVhbDogXCJMZXNzIG9yIEVxdWFsc1wiXHJcbiAgICB9LFxyXG4gICAgLy9FbWJlZCB3aW5kb3dcclxuICAgIGV3OiB7XHJcbiAgICAgICAgYW5ndWxhcjogXCJVc2UgQW5ndWxhciB2ZXJzaW9uXCIsXHJcbiAgICAgICAganF1ZXJ5OiBcIlVzZSBqUXVlcnkgdmVyc2lvblwiLFxyXG4gICAgICAgIGtub2Nrb3V0OiBcIlVzZSBLbm9ja291dCB2ZXJzaW9uXCIsXHJcbiAgICAgICAgcmVhY3Q6IFwiVXNlIFJlYWN0IHZlcnNpb25cIixcclxuICAgICAgICB2dWU6IFwiVXNlIFZ1ZSB2ZXJzaW9uXCIsXHJcbiAgICAgICAgYm9vdHN0cmFwOiBcIkZvciBib290c3RyYXAgZnJhbWV3b3JrXCIsXHJcbiAgICAgICAgc3RhbmRhcmQ6IFwiTm8gYm9vdHN0cmFwXCIsXHJcbiAgICAgICAgc2hvd09uUGFnZTogXCJTaG93IHN1cnZleSBvbiBhIHBhZ2VcIixcclxuICAgICAgICBzaG93SW5XaW5kb3c6IFwiU2hvdyBzdXJ2ZXkgaW4gYSB3aW5kb3dcIixcclxuICAgICAgICBsb2FkRnJvbVNlcnZlcjogXCJMb2FkIFN1cnZleSBKU09OIGZyb20gc2VydmVyXCIsXHJcbiAgICAgICAgdGl0bGVTY3JpcHQ6IFwiU2NyaXB0cyBhbmQgc3R5bGVzXCIsXHJcbiAgICAgICAgdGl0bGVIdG1sOiBcIkhUTUxcIixcclxuICAgICAgICB0aXRsZUphdmFTY3JpcHQ6IFwiSmF2YVNjcmlwdFwiXHJcbiAgICB9LFxyXG4gICAgLy9Qcm9wZXJ0aWVzXHJcbiAgICBwOiB7XHJcbiAgICAgICAgbmFtZTogXCJuYW1lXCIsXHJcbiAgICAgICAgdGl0bGU6IHsgbmFtZTogXCJ0aXRsZVwiLCB0aXRsZTogXCJMZWF2ZSBpdCBlbXB0eSwgaWYgaXQgaXMgdGhlIHNhbWUgYXMgJ05hbWUnXCIgfSxcclxuICAgICAgICBzdXJ2ZXlfdGl0bGU6IHsgbmFtZTogXCJ0aXRsZVwiLCB0aXRsZTogXCJJdCB3aWxsIGJlIHNob3duIG9uIGV2ZXJ5IHBhZ2UuXCIgfSxcclxuICAgICAgICBwYWdlX3RpdGxlOiB7IG5hbWU6IFwidGl0bGVcIiwgdGl0bGU6IFwiUGFnZSB0aXRsZVwiIH1cclxuICAgIH1cclxufTtcclxuXHJcbmVkaXRvckxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZW5cIl0gPSBkZWZhdWx0U3RyaW5ncztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZWRpdG9yTG9jYWxpemF0aW9uLnRzIiwiZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdFtcImFzc2lnblwiXSB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcykgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7IH1cclxuICAgIHRoaXNDbGFzcy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcykgOiAoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJleHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZGVmYXVsdEVkaXRvcjogc3RyaW5nID0gXCJzdHJpbmdcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIGVkaXRvclJlZ2lzdGVyZWRMaXN0ID0ge307XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRWRpdG9yKG5hbWU6IHN0cmluZywgY3JlYXRvcjogKCkgPT4gU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlKSB7XHJcbiAgICAgICAgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLmVkaXRvclJlZ2lzdGVyZWRMaXN0W25hbWVdID0gY3JlYXRvcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRWRpdG9yKGVkaXRvclR5cGU6IHN0cmluZywgZnVuYzogKG5ld1ZhbHVlOiBhbnkpID0+IGFueSk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XHJcbiAgICAgICAgdmFyIGNyZWF0b3IgPSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UuZWRpdG9yUmVnaXN0ZXJlZExpc3RbZWRpdG9yVHlwZV07XHJcbiAgICAgICAgaWYgKCFjcmVhdG9yKSBjcmVhdG9yID0gU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLmVkaXRvclJlZ2lzdGVyZWRMaXN0W1N1cnZleVByb3BlcnR5RWRpdG9yQmFzZS5kZWZhdWx0RWRpdG9yXTtcclxuICAgICAgICB2YXIgcHJvcGVydHlFZGl0b3IgPSBjcmVhdG9yKCk7XHJcbiAgICAgICAgcHJvcGVydHlFZGl0b3Iub25DaGFuZ2VkID0gZnVuYztcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlFZGl0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWx1ZV86IGFueSA9IG51bGw7XHJcbiAgICBwdWJsaWMgb3B0aW9uczogYW55ID0gbnVsbDtcclxuICAgIHB1YmxpYyBvbkNoYW5nZWQ6IChuZXdWYWx1ZTogYW55KSA9PiBhbnk7XHJcbiAgICBwdWJsaWMgb25HZXRMb2NhbGU6ICgpID0+IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHRocm93IFwiZWRpdG9yVHlwZSBpcyBub3QgZGVmaW5lZFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcgeyByZXR1cm4gdmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHsgcmV0dXJuIHRoaXMudmFsdWVfOyB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q29ycmVjdGVkVmFsdWUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKHZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIDogc3RyaW5nIHsgXHJcbiAgICAgICAgaWYodGhpcy5vbkdldExvY2FsZSkgcmV0dXJuIHRoaXMub25HZXRMb2NhbGUoKTtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVfID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0VGl0bGUodmFsdWU6IHN0cmluZykgeyB9XHJcbiAgICBwdWJsaWMgc2V0T2JqZWN0KHZhbHVlOiBhbnkpIHsgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldENvcnJlY3RlZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkgeyAgcmV0dXJuIHZhbHVlOyAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmdQcm9wZXJ0eUVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInN0cmluZ1wiOyB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleURyb3Bkb3duUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJkcm9wZG93blwiOyB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleUJvb2xlYW5Qcm9wZXJ0eUVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImJvb2xlYW5cIjsgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOdW1iZXJQcm9wZXJ0eUVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcIm51bWJlclwiOyB9XHJcbn1cclxuXHJcblN1cnZleVByb3BlcnR5RWRpdG9yQmFzZS5yZWdpc3RlckVkaXRvcihcInN0cmluZ1wiLCBmdW5jdGlvbiAoKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHsgcmV0dXJuIG5ldyBTdXJ2ZXlTdHJpbmdQcm9wZXJ0eUVkaXRvcigpOyB9KTtcclxuU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLnJlZ2lzdGVyRWRpdG9yKFwiZHJvcGRvd25cIiwgZnVuY3Rpb24gKCk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7IHJldHVybiBuZXcgU3VydmV5RHJvcGRvd25Qcm9wZXJ0eUVkaXRvcigpOyB9KTtcclxuU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLnJlZ2lzdGVyRWRpdG9yKFwiYm9vbGVhblwiLCBmdW5jdGlvbiAoKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHsgcmV0dXJuIG5ldyBTdXJ2ZXlCb29sZWFuUHJvcGVydHlFZGl0b3IoKTsgfSk7XHJcblN1cnZleVByb3BlcnR5RWRpdG9yQmFzZS5yZWdpc3RlckVkaXRvcihcIm51bWJlclwiLCBmdW5jdGlvbiAoKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHsgcmV0dXJuIG5ldyBTdXJ2ZXlOdW1iZXJQcm9wZXJ0eUVkaXRvcigpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yQmFzZS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5TW9kYWxFZGl0b3J9IGZyb20gXCIuL3Byb3BlcnR5TW9kYWxFZGl0b3JcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB7XHJcbiAgICBwdWJsaWMga29JdGVtczogYW55O1xyXG4gICAgcHVibGljIG9uRGVsZXRlQ2xpY2s6IGFueTtcclxuICAgIHB1YmxpYyBvbk1vdmVVcENsaWNrOiBhbnk7XHJcbiAgICBwdWJsaWMgb25Nb3ZlRG93bkNsaWNrOiBhbnk7XHJcbiAgICBwdWJsaWMgb25BZGRDbGljazogYW55O1xyXG4gICAgcHVibGljIG9uQ2xlYXJDbGljazogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5rb0l0ZW1zID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uRGVsZXRlQ2xpY2sgPSBmdW5jdGlvbiAoaXRlbSkgeyBzZWxmLmtvSXRlbXMucmVtb3ZlKGl0ZW0pOyB9O1xyXG4gICAgICAgIHNlbGYub25DbGVhckNsaWNrID0gZnVuY3Rpb24gKGl0ZW0pIHsgc2VsZi5rb0l0ZW1zLnJlbW92ZUFsbCgpOyB9O1xyXG4gICAgICAgIHNlbGYub25BZGRDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5BZGRJdGVtKCk7IH07XHJcbiAgICAgICAgc2VsZi5vbk1vdmVVcENsaWNrID0gZnVuY3Rpb24gKGl0ZW0pIHsgc2VsZi5tb3ZlVXAoaXRlbSk7IH07XHJcbiAgICAgICAgc2VsZi5vbk1vdmVEb3duQ2xpY2sgPSBmdW5jdGlvbiAoaXRlbSkgeyBzZWxmLm1vdmVEb3duKGl0ZW0pOyB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFZhbHVlVGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgbGVuID0gdmFsdWUgPyB2YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuaXRlbXNcIilbXCJmb3JtYXRcIl0obGVuKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW107XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIEFkZEl0ZW0oKSB7XHJcbiAgICAgICAgdGhpcy5rb0l0ZW1zLnB1c2godGhpcy5jcmVhdGVOZXdFZGl0b3JJdGVtKCkpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG1vdmVVcChpdGVtOiBhbnkpIHtcclxuICAgICAgICB2YXIgYXJyID0gdGhpcy5rb0l0ZW1zKCk7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMSkgcmV0dXJuO1xyXG4gICAgICAgIGFycltpbmRleF0gPSBhcnJbaW5kZXggLSAxXTtcclxuICAgICAgICBhcnJbaW5kZXggLSAxXSA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5rb0l0ZW1zKGFycik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgbW92ZURvd24oaXRlbTogYW55KSB7XHJcbiAgICAgICAgdmFyIGFyciA9IHRoaXMua29JdGVtcygpO1xyXG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyLmxlbmd0aCAtIDEpIHJldHVybjtcclxuICAgICAgICBhcnJbaW5kZXhdID0gYXJyW2luZGV4ICsgMV07XHJcbiAgICAgICAgYXJyW2luZGV4ICsgMV0gPSBpdGVtO1xyXG4gICAgICAgIHRoaXMua29JdGVtcyhhcnIpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29JdGVtcyh0aGlzLmdldEl0ZW1zRnJvbVZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRJdGVtc0Zyb21WYWx1ZSh2YWx1ZTogYW55ID0gbnVsbCk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGlmKCF2YWx1ZSkgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXRlbXMucHVzaCh0aGlzLmNyZWF0ZUVkaXRvckl0ZW0odmFsdWVbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgdmFyIGludGVybmFsSXRlbXMgPSB0aGlzLmtvSXRlbXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGVybmFsSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXRlbXMucHVzaCh0aGlzLmNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShpbnRlcm5hbEl0ZW1zW2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKGl0ZW1zKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVOZXdFZGl0b3JJdGVtKCk6IGFueSB7IHRocm93IFwiT3ZlcnJpZGUgJ2NyZWF0ZU5ld0VkaXRvckl0ZW0nIG1ldGhvZFwiOyB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHsgcmV0dXJuIGl0ZW07IH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJdGVtRnJvbUVkaXRvckl0ZW0oZWRpdG9ySXRlbTogYW55KSB7ICByZXR1cm4gZWRpdG9ySXRlbTsgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlJdGVtc0VkaXRvci50cyIsImltcG9ydCB7ZWRpdG9yTG9jYWxpemF0aW9ufSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuXHJcbmV4cG9ydCBlbnVtIE9ialR5cGUgeyBVbmtub3duLCBTdXJ2ZXksIFBhZ2UsIFBhbmVsLCBRdWVzdGlvbiB9XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlIZWxwZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXROZXdQYWdlTmFtZShvYmpzOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXROZXdOYW1lKG9ianMsIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC5uZXdQYWdlTmFtZVwiKSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE5ld1F1ZXN0aW9uTmFtZShvYmpzOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXROZXdOYW1lKG9ianMsIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC5uZXdRdWVzdGlvbk5hbWVcIikpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXROZXdQYW5lbE5hbWUob2JqczogQXJyYXk8YW55Pikge1xyXG4gICAgICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShvYmpzLCBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3UGFuZWxOYW1lXCIpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmV3TmFtZShvYmpzOiBBcnJheTxhbnk+LCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgaGFzaCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBoYXNoW29ianNbaV0ubmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbnVtID0gMTtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWhhc2hbYmFzZU5hbWUgKyBudW0udG9TdHJpbmcoKV0pIGJyZWFrO1xyXG4gICAgICAgICAgICBudW0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJhc2VOYW1lICsgbnVtLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE9iamVjdFR5cGUob2JqOiBhbnkpOiBPYmpUeXBlIHtcclxuICAgICAgICBpZiAoIW9iaiB8fCAhb2JqW1wiZ2V0VHlwZVwiXSkgcmV0dXJuIE9ialR5cGUuVW5rbm93bjtcclxuICAgICAgICBpZiAob2JqLmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIE9ialR5cGUuUGFnZTtcclxuICAgICAgICBpZiAob2JqLmdldFR5cGUoKSA9PSBcInBhbmVsXCIpIHJldHVybiBPYmpUeXBlLlBhbmVsO1xyXG4gICAgICAgIGlmIChvYmouZ2V0VHlwZSgpID09IFwic3VydmV5XCIpIHJldHVybiBPYmpUeXBlLlN1cnZleTtcclxuICAgICAgICBpZiAob2JqW1wibmFtZVwiXSkgcmV0dXJuIE9ialR5cGUuUXVlc3Rpb247XHJcbiAgICAgICAgcmV0dXJuIE9ialR5cGUuVW5rbm93bjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0T2JqZWN0TmFtZShvYmo6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG9ialtcIm5hbWVcIl0pIHJldHVybiBvYmpbXCJuYW1lXCJdO1xyXG4gICAgICAgIHZhciBvYmpUeXBlID0gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2JqKTtcclxuICAgICAgICBpZiAob2JqVHlwZSAhPSBPYmpUeXBlLlBhZ2UpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHZhciBkYXRhID0gPFN1cnZleS5TdXJ2ZXk+KDxTdXJ2ZXkuUGFnZT5vYmopLmRhdGE7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gZGF0YS5wYWdlcy5pbmRleE9mKDxTdXJ2ZXkuUGFnZT5vYmopO1xyXG4gICAgICAgIHJldHVybiBcIltQYWdlIFwiICsgKGluZGV4ICsgMSkgKyBcIl1cIjtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlIZWxwZXIudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlPYmplY3RQcm9wZXJ0eX0gZnJvbSBcIi4vb2JqZWN0UHJvcGVydHlcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleU9iamVjdEVkaXRvciB7XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkT2JqZWN0VmFsdWU6IGFueTtcclxuICAgIHB1YmxpYyBwcm9wZXJ0eUVkaXRvck9wdGlvbnM6IGFueSA9IG51bGw7XHJcbiAgICBwdWJsaWMga29Qcm9wZXJ0aWVzOiBhbnk7XHJcbiAgICBwdWJsaWMga29BY3RpdmVQcm9wZXJ0eTogYW55O1xyXG4gICAgcHVibGljIGtvSGFzT2JqZWN0OiBhbnk7XHJcbiAgICBwdWJsaWMgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZDogU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleU9iamVjdEVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleU9iamVjdEVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrOiAob2JqZWN0OiBhbnksIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSA9PiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5RWRpdG9yT3B0aW9uczogYW55ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhwcm9wZXJ0eUVkaXRvck9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMua29Qcm9wZXJ0aWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5rb0FjdGl2ZVByb3BlcnR5ID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMua29IYXNPYmplY3QgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkT2JqZWN0KCk6IGFueSB7IHJldHVybiB0aGlzLnNlbGVjdGVkT2JqZWN0VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWRPYmplY3QodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0VmFsdWUgPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmtvSGFzT2JqZWN0KHZhbHVlICE9IG51bGwpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvcGVydGllcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvcGVydGllc09iamVjdCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldE9wdGlvbnMocHJvcGVydHlFZGl0b3JPcHRpb25zOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5RWRpdG9yT3B0aW9ucyA9IHByb3BlcnR5RWRpdG9yT3B0aW9ucztcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9wZXJ0eUVkaXRvcihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMua29Qcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNoYW5nZUFjdGl2ZVByb3BlcnR5KHByb3BlcnR5OiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSkge1xyXG4gICAgICAgIHRoaXMua29BY3RpdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgT2JqZWN0Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByb3BlcnRpZXNPYmplY3QoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGRhdGVQcm9wZXJ0aWVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9iamVjdCB8fCAhdGhpcy5zZWxlY3RlZE9iamVjdC5nZXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMua29Qcm9wZXJ0aWVzKFtdKTtcclxuICAgICAgICAgICAgdGhpcy5rb0FjdGl2ZVByb3BlcnR5KG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyh0aGlzLnNlbGVjdGVkT2JqZWN0LmdldFR5cGUoKSk7XHJcbiAgICAgICAgcHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT0gYi5uYW1lKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgb2JqZWN0UHJvcGVydGllcyA9IFtdO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgcHJvcEV2ZW50ID0gKHByb3BlcnR5OiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7IHByb3BlcnR5OiBwcm9wZXJ0eS5wcm9wZXJ0eSwgb2JqZWN0OiBwcm9wZXJ0eS5vYmplY3QsIG5ld1ZhbHVlOiBuZXdWYWx1ZSB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuU2hvd1Byb3BlcnR5KHByb3BlcnRpZXNbaV0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIG9iamVjdFByb3BlcnR5ID0gbmV3IFN1cnZleU9iamVjdFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHByb3BFdmVudCwgdGhpcy5wcm9wZXJ0eUVkaXRvck9wdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgbG9jTmFtZSA9IHRoaXMuc2VsZWN0ZWRPYmplY3QuZ2V0VHlwZSgpICsgJ18nICsgcHJvcGVydGllc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICBvYmplY3RQcm9wZXJ0eS5kaXNwbGF5TmFtZSA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRQcm9wZXJ0eU5hbWUobG9jTmFtZSk7XHJcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRQcm9wZXJ0eVRpdGxlKGxvY05hbWUpO1xyXG4gICAgICAgICAgICBpZiAoIXRpdGxlKSB0aXRsZSA9IG9iamVjdFByb3BlcnR5LmRpc3BsYXlOYW1lO1xyXG4gICAgICAgICAgICBvYmplY3RQcm9wZXJ0eS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgICAgICBvYmplY3RQcm9wZXJ0aWVzLnB1c2gob2JqZWN0UHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtvUHJvcGVydGllcyhvYmplY3RQcm9wZXJ0aWVzKTtcclxuICAgICAgICB0aGlzLmtvQWN0aXZlUHJvcGVydHkodGhpcy5nZXRQcm9wZXJ0eUVkaXRvcihcIm5hbWVcIikpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNhblNob3dQcm9wZXJ0eShwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmKHByb3BlcnR5W1widmlzaWJsZVwiXSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrKSByZXR1cm4gdGhpcy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWRPYmplY3QsIHByb3BlcnR5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCB1cGRhdGVQcm9wZXJ0aWVzT2JqZWN0KCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5rb1Byb3BlcnRpZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcHJvcGVydGllc1tpXS5vYmplY3QgPSB0aGlzLnNlbGVjdGVkT2JqZWN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9vYmplY3RFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2V9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xyXG4gICAgcHVibGljIG9iamVjdDogYW55O1xyXG4gICAgcHVibGljIHRpdGxlOiBhbnk7XHJcbiAgICBwdWJsaWMgb25BcHBseUNsaWNrOiBhbnk7XHJcbiAgICBwdWJsaWMgb25SZXNldENsaWNrOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYub25BcHBseUNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmFwcGx5KCk7IH07XHJcbiAgICAgICAgc2VsZi5vblJlc2V0Q2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYucmVzZXQoKTsgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRUaXRsZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMudGl0bGUodmFsdWUpOyB9XHJcbiAgICBwdWJsaWMgaGFzRXJyb3IoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7IH1cclxuICAgIHByaXZhdGUgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0T2JqZWN0KHZhbHVlOiBhbnkpIHsgdGhpcy5vYmplY3QgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICAgIHB1YmxpYyBhcHBseSgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNFcnJvcigpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUFwcGx5KCk7XHJcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VGV4dEVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3Ige1xyXG4gICAgcHVibGljIGtvVmFsdWU6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMua29WYWx1ZSA9IGtvLm9ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJ0ZXh0XCI7IH1cclxuICAgIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHN0ciA9IHZhbHVlO1xyXG4gICAgICAgIGlmIChzdHIubGVuZ3RoID4gMjApIHtcclxuICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAyMCkgKyBcIi4uLlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBvbkJlZm9yZUFwcGx5KCkge1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKHRoaXMua29WYWx1ZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5SHRtbEVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5VGV4dEVkaXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcImh0bWxcIjsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlFeHByZXNzaW9uRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwiZXhwcmVzc2lvblwiOyB9XHJcbn1cclxuXHJcblN1cnZleVByb3BlcnR5RWRpdG9yQmFzZS5yZWdpc3RlckVkaXRvcihcInRleHRcIiwgZnVuY3Rpb24gKCk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7IHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yKCk7IH0pO1xyXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UucmVnaXN0ZXJFZGl0b3IoXCJodG1sXCIsIGZ1bmN0aW9uICgpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgeyByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5SHRtbEVkaXRvcigpOyB9KTtcclxuU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLnJlZ2lzdGVyRWRpdG9yKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbiAoKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHsgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUV4cHJlc3Npb25FZGl0b3IoKTsgfSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNb2RhbEVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQgKiBhcyBqUXVlcnkgZnJvbSBcImpxdWVyeVwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5TW9kYWxFZGl0b3J9IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNb2RhbEVkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5RWRpdG9yQmFzZX0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxQcm9wZXJ0eSwgU3VydmV5UXVlc3Rpb25FZGl0b3JHZW5lcmFsUm93LCBTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxQcm9wZXJ0aWVzfSBmcm9tIFwiLi9xdWVzdGlvbkVkaXRvckdlbmVyYWxQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7U3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9ufSBmcm9tIFwiLi9xdWVzdGlvbkVkaXRvckRlZmluaXRpb25cIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvclNob3dXaW5kb3cge1xyXG4gICAga29WaXNpYmxlOiBhbnk7XHJcbiAgICBrb0VkaXRvcjogYW55O1xyXG4gICAgcHVibGljIG9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2s6IChvYmplY3Q6IGFueSwgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpID0+IGJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmtvVmlzaWJsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMua29FZGl0b3IgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNob3cocXVlc3Rpb25CYXNlOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlLCBvbkNoYW5nZWQ6IChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSkgPT4gYW55KSB7XHJcbiAgICAgICAgdmFyIGVkaXRvciA9IG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvcihxdWVzdGlvbkJhc2UsIHRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFjayk7XHJcbiAgICAgICAgZWRpdG9yLm9uQ2hhbmdlZCA9IG9uQ2hhbmdlZDtcclxuXHJcbiAgICAgICAgdGhpcy5rb0VkaXRvcihlZGl0b3IpO1xyXG4gICAgICAgIHRoaXMua29WaXNpYmxlKHRydWUpO1xyXG4gICAgICAgIGpRdWVyeShcIiNzdXJ2ZXlxdWVzdGlvbmVkaXRvcndpbmRvd1wiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICAgICAgZWRpdG9yLm9uSGlkZVdpbmRvdyA9IGZ1bmN0aW9uKCkge2pRdWVyeShcIiNzdXJ2ZXlxdWVzdGlvbmVkaXRvcndpbmRvd1wiKS5tb2RhbChcImhpZGVcIik7fTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUHJvcGVydGllcyB7XHJcbiAgICBwcml2YXRlIHByb3BlcnRpZXM6IEFycmF5PFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHk+O1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG9iajogU3VydmV5LkJhc2UsIHB1YmxpYyBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrOiAob2JqZWN0OiBhbnksIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSA9PiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyh0aGlzLm9iai5nZXRUeXBlKCkpOyBcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllc1tpXS5uYW1lID09IHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihwcm9wZXJ0eSAmJiBwcm9wZXJ0eVtcInZpc2libGVcIl0gPT09IGZhbHNlKSBwcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5ICYmIHRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFjayh0aGlzLm9iaiwgcHJvcGVydHkpKSBwcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcclxuICAgIH0gXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVkaXRvciB7XHJcbiAgICBwcm90ZWN0ZWQgcHJvcGVydGllczogU3VydmV5UXVlc3Rpb25Qcm9wZXJ0aWVzO1xyXG4gICAgcHVibGljIG9uQ2hhbmdlZDogKG9iajogU3VydmV5LkJhc2UpID0+IGFueTtcclxuICAgIHB1YmxpYyBvbkhpZGVXaW5kb3c6ICgpPT4gYW55O1xyXG4gICAgcHVibGljIG9uT2tDbGljazogYW55O1xyXG4gICAgcHVibGljIG9uQXBwbHlDbGljazogYW55O1xyXG4gICAgcHVibGljIG9uUmVzZXRDbGljazogYW55O1xyXG4gICAga29UYWJzOiBhbnk7IGtvQWN0aXZlVGFiOiBhbnk7IGtvVGl0bGU6IGFueTtcclxuICAgIG9uVGFiQ2xpY2s6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlLCBwdWJsaWMgb25DYW5TaG93UHJvcGVydHlDYWxsYmFjazogKG9iamVjdDogYW55LCBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkgPT4gYm9vbGVhbiwgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpZighdGhpcy5jbGFzc05hbWUpIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5vYmouZ2V0VHlwZSgpO1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBTdXJ2ZXlRdWVzdGlvblByb3BlcnRpZXMob2JqLCBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrKTtcclxuICAgICAgICBzZWxmLm9uQXBwbHlDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5hcHBseSgpOyB9O1xyXG4gICAgICAgIHNlbGYub25Pa0NsaWNrID0gZnVuY3Rpb24oKSB7c2VsZi5hcHBseSgpOyBpZighc2VsZi5oYXNFcnJvcigpICYmIHNlbGYub25IaWRlV2luZG93KSBzZWxmLm9uSGlkZVdpbmRvdygpOyB9O1xyXG4gICAgICAgIHNlbGYub25SZXNldENsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLnJlc2V0KCk7IH07XHJcbiAgICAgICAgdGhpcy5vblRhYkNsaWNrID0gZnVuY3Rpb24gKHRhYikgeyBzZWxmLmtvQWN0aXZlVGFiKHRhYi5uYW1lKTsgfTtcclxuICAgICAgICB2YXIgdGFicyA9IHRoaXMuYnVpbGRUYWJzKCk7XHJcbiAgICAgICAgdGhpcy5rb0FjdGl2ZVRhYiA9IGtvLm9ic2VydmFibGUodGFic1swXS5uYW1lKTtcclxuICAgICAgICB0aGlzLmtvVGFicyA9IGtvLm9ic2VydmFibGVBcnJheSh0YWJzKTtcclxuICAgICAgICB0aGlzLmtvVGl0bGUgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgaWYodGhpcy5vYmpbXCJuYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMua29UaXRsZShlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUucUVkaXRvclRpdGxlXCIpW1wiZm9ybWF0XCJdKHRoaXMub2JqW1wibmFtZVwiXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgdGFicyA9IHRoaXMua29UYWJzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWJzW2ldLmhhc0Vycm9yKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMua29BY3RpdmVUYWIodGFic1tpXS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB2YXIgdGFicyA9IHRoaXMua29UYWJzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRhYnNbaV0ucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXBwbHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3IoKSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciB0YWJzID0gdGhpcy5rb1RhYnMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGFic1tpXS5hcHBseSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vbkNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQodGhpcy5vYmopO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYnVpbGRUYWJzKCk6IEFycmF5PFN1cnZleVF1ZXN0aW9uRWRpdG9yVGFiQmFzZT4ge1xyXG4gICAgICAgIHZhciB0YWJzID0gW107XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3JHZW5lcmFsUHJvcGVydGllcyh0aGlzLm9iaiwgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldFByb3BlcnRpZXModGhpcy5jbGFzc05hbWUpLCB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2spO1xyXG4gICAgICAgIHRhYnMucHVzaChuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWJHZW5lcmFsKHRoaXMub2JqLCBwcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0aWVzVGFicyh0YWJzKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGFic1tpXS5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrID0gdGhpcy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFicztcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkUHJvcGVydGllc1RhYnModGFiczogQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JUYWJCYXNlPikge1xyXG4gICAgICAgIHZhciB0YWJOYW1lcyA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRUYWJzKHRoaXMuY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYk5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJJdGVtID0gdGFiTmFtZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0YWJJdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5KSBjb250aW51ZTtcclxuICAgICAgICAgICAgdmFyIGVkaXRvclRhYiA9IG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYlByb3BlcnR5KHRoaXMub2JqLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIGlmICh0YWJJdGVtLnRpdGxlKSBlZGl0b3JUYWIudGl0bGUgPSB0YWJJdGVtLnRpdGxlO1xyXG4gICAgICAgICAgICB0YWJzLnB1c2goZWRpdG9yVGFiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYkJhc2Uge1xyXG4gICAgcHJpdmF0ZSB0aXRsZVZhbHVlOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7IHJldHVybiBcIm5hbWVcIjsgfVxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy50aXRsZVZhbHVlKSByZXR1cm4gdGhpcy50aXRsZVZhbHVlO1xyXG4gICAgICAgIHZhciBzdHIgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudGFicy5cIiArIHRoaXMubmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHN0ciA/IHN0ciA6IHRoaXMubmFtZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykgeyB0aGlzLnRpdGxlVmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBodG1sVGVtcGxhdGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicXVlc3Rpb25lZGl0b3J0YWItXCIgKyB0aGlzLm5hbWU7IH1cclxuICAgIHB1YmxpYyBnZXQgdGVtcGxhdGVPYmplY3QoKTogYW55IHsgcmV0dXJuIHRoaXM7IH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBwdWJsaWMgcmVzZXQoKSB7IH1cclxuICAgIHB1YmxpYyBhcHBseSgpIHsgfVxyXG4gICAgcHJvdGVjdGVkIGdldFZhbHVlKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcclxuXHRpZihwcm9wZXJ0eVtcImdldFByb3BlcnR5VmFsdWVcIl0pIHJldHVybiBwcm9wZXJ0eVtcImdldFByb3BlcnR5VmFsdWVcIl0odGhpcy5vYmopOyAvL1RPRE8gbWFrZSB0aGUgb25seSBjYWxsXHJcbiAgICAgICAgaWYgKHByb3BlcnR5Lmhhc1RvVXNlR2V0VmFsdWUpIHJldHVybiBwcm9wZXJ0eS5nZXRWYWx1ZSh0aGlzLm9iaik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqW3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWJHZW5lcmFsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWJCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlLCBwdWJsaWMgcHJvcGVydGllczogU3VydmV5UXVlc3Rpb25FZGl0b3JHZW5lcmFsUHJvcGVydGllcyA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcihvYmopO1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDogbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yR2VuZXJhbFByb3BlcnRpZXMob2JqLCBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIFwiZ2VuZXJhbFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGh0bWxUZW1wbGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJxdWVzdGlvbmVkaXRvcnRhYi1nZW5lcmFsXCI7IH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucHJvcGVydGllcy5oYXNFcnJvcigpOyB9IFxyXG4gICAgcHVibGljIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcy5yZXNldCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFwcGx5KCkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcy5hcHBseSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWJQcm9wZXJ0eSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWRpdG9yVGFiQmFzZSB7XHJcbiAgICBwcml2YXRlIHByb3BlcnR5RWRpdG9yVmFsdWU6IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3I7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSwgcHVibGljIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgc3VwZXIob2JqKTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5RWRpdG9yVmFsdWUgPSA8U3VydmV5UHJvcGVydHlNb2RhbEVkaXRvcj5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UuY3JlYXRlRWRpdG9yKHRoaXMucHJvcGVydHkudHlwZSwgbnVsbCk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlFZGl0b3JWYWx1ZS5vbkdldExvY2FsZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VsZi5kb09uR2V0TG9jYWxlKCkgfTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5RWRpdG9yVmFsdWUudmFsdWUgPSB0aGlzLmdldFZhbHVlKHRoaXMucHJvcGVydHkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBkb09uR2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYodGhpcy5vYmogJiYgdGhpcy5vYmpbXCJnZXRMb2NhbGVcIl0pIHJldHVybiB0aGlzLm9ialtcImdldExvY2FsZVwiXSgpO1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnByb3BlcnR5Lm5hbWU7IH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucHJvcGVydHlFZGl0b3IuaGFzRXJyb3IoKTsgfVxyXG4gICAgcHVibGljIGdldCBodG1sVGVtcGxhdGUoKTogc3RyaW5nIHsgcmV0dXJuIFwicHJvcGVydHllZGl0b3Jjb250ZW50LVwiICsgdGhpcy5wcm9wZXJ0eS50eXBlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlT2JqZWN0KCk6IGFueSB7IHJldHVybiB0aGlzLnByb3BlcnR5RWRpdG9yOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5RWRpdG9yKCk6IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgeyByZXR1cm4gdGhpcy5wcm9wZXJ0eUVkaXRvclZhbHVlOyB9XHJcbiAgICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUVkaXRvclZhbHVlLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSh0aGlzLnByb3BlcnR5KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhcHBseSgpIHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5RWRpdG9yLmFwcGx5KCk7XHJcbiAgICAgICAgdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eS5uYW1lXSA9IHRoaXMucHJvcGVydHlFZGl0b3JWYWx1ZS52YWx1ZTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3IudHMiLCJpbXBvcnQge1N1cnZleUpTT041fSBmcm9tIFwiLi9qc29uNVwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuY2xhc3MgVGV4dFBhcnNlclByb3Blcnkge1xyXG4gICAgaXNGb3VuZDogYm9vbGVhbjtcclxuICAgIHByb3BlcnRpZXNDb3VudDogbnVtYmVyO1xyXG4gICAgc3RhcnQ6IG51bWJlcjtcclxuICAgIGVuZDogbnVtYmVyO1xyXG4gICAgdmFsdWVTdGFydDogbnVtYmVyO1xyXG4gICAgdmFsdWVFbmQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVRleHRXb3JrZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBuZXdMaW5lQ2hhcjogc3RyaW5nO1xyXG4gICAgcHVibGljIGVycm9yczogQXJyYXk8YW55PjtcclxuICAgIHByaXZhdGUgc3VydmV5VmFsdWU6IFN1cnZleS5TdXJ2ZXk7XHJcbiAgICBwcml2YXRlIGpzb25WYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXlPYmplY3RzOiBBcnJheTxhbnk+O1xyXG4gICAgcHJpdmF0ZSBpc1N1cnZleUFzUGFnZTogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRleHQgfHwgdGhpcy50ZXh0LnRyaW0oKSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IFwie31cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleS5TdXJ2ZXkgeyByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBpc0pzb25Db3JyZWN0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZSAhPSBudWxsOyB9XHJcbiAgICBwcm90ZWN0ZWQgcHJvY2VzcygpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25WYWx1ZSA9IG5ldyBTdXJ2ZXlKU09ONSgxKS5wYXJzZSh0aGlzLnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IHBvczogeyBzdGFydDogZXJyb3IuYXQsIGVuZDogLTEgfSwgdGV4dDogZXJyb3IubWVzc2FnZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuanNvblZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVKc29uUG9zaXRpb25zKHRoaXMuanNvblZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IG5ldyBTdXJ2ZXkuU3VydmV5KHRoaXMuanNvblZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5VmFsdWUuanNvbkVycm9ycyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3VydmV5VmFsdWUuanNvbkVycm9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMuc3VydmV5VmFsdWUuanNvbkVycm9yc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKHsgcG9zOiB7IHN0YXJ0OiBlcnJvci5hdCwgZW5kOiAtMSB9LCB0ZXh0OiBlcnJvci5nZXRGdWxsRGVzY3JpcHRpb24oKSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMgPSB0aGlzLmNyZWF0ZVN1cnZleU9iamVjdHMoKTtcclxuICAgICAgICB0aGlzLnNldEVkaXRvclBvc2l0aW9uQnlDaGFydEF0KHRoaXMuc3VydmV5T2JqZWN0cyk7XHJcbiAgICAgICAgdGhpcy5zZXRFZGl0b3JQb3NpdGlvbkJ5Q2hhcnRBdCh0aGlzLmVycm9ycyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZUpzb25Qb3NpdGlvbnMoanNvbk9iajogYW55KSB7XHJcbiAgICAgICAganNvbk9ialtcInBvc1wiXVtcInNlbGZcIl0gPSBqc29uT2JqO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBqc29uT2JqW2tleV07XHJcbiAgICAgICAgICAgIGlmIChvYmogJiYgb2JqW1wicG9zXCJdKSB7XHJcbiAgICAgICAgICAgICAgICBqc29uT2JqW1wicG9zXCJdW2tleV0gPSBvYmpbXCJwb3NcIl07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUpzb25Qb3NpdGlvbnMob2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgY3JlYXRlU3VydmV5T2JqZWN0cygpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5VmFsdWUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB0aGlzLmlzU3VydmV5QXNQYWdlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleVZhbHVlLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5zdXJ2ZXlWYWx1ZS5wYWdlc1tpXTtcclxuICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiAhcGFnZVtcInBvc1wiXSkge1xyXG4gICAgICAgICAgICAgICAgcGFnZVtcInBvc1wiXSA9IHRoaXMuc3VydmV5VmFsdWVbXCJwb3NcIl07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VydmV5QXNQYWdlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQucHVzaChwYWdlKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFnZS5xdWVzdGlvbnNbal0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldEVkaXRvclBvc2l0aW9uQnlDaGFydEF0KG9iamVjdHM6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdHMgPT0gbnVsbCB8fCBvYmplY3RzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0geyByb3c6IDAsIGNvbHVtbjogMCB9O1xyXG4gICAgICAgIHZhciBhdE9iamVjdHNBcnJheSA9IHRoaXMuZ2V0QXRBcnJheShvYmplY3RzKTtcclxuICAgICAgICB2YXIgc3RhcnRBdDogbnVtYmVyID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0T2JqZWN0c0FycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhdCA9IGF0T2JqZWN0c0FycmF5W2ldLmF0O1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zdGlvbkJ5Q2hhcnRBdChwb3NpdGlvbiwgc3RhcnRBdCwgYXQpO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gYXRPYmplY3RzQXJyYXlbaV0ub2JqO1xyXG4gICAgICAgICAgICBpZiAoIW9iai5wb3NpdGlvbikgb2JqLnBvc2l0aW9uID0ge307XHJcbiAgICAgICAgICAgIGlmIChhdCA9PSBvYmoucG9zLnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBvYmoucG9zaXRpb24uc3RhcnQgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChhdCA9PSBvYmoucG9zLmVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5wb3NpdGlvbi5lbmQgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRQb3N0aW9uQnlDaGFydEF0KHN0YXJ0UG9zaXRpb246IGFueSwgc3RhcnRBdDogbnVtYmVyLCBhdDogbnVtYmVyKTogYW55IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0geyByb3c6IHN0YXJ0UG9zaXRpb24ucm93LCBjb2x1bW46IHN0YXJ0UG9zaXRpb24uY29sdW1uIH07XHJcbiAgICAgICAgdmFyIGN1ckNoYXIgPSBzdGFydEF0O1xyXG4gICAgICAgIHdoaWxlIChjdXJDaGFyIDwgYXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGV4dC5jaGFyQXQoY3VyQ2hhcikgPT0gU3VydmV5VGV4dFdvcmtlci5uZXdMaW5lQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdysrO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNvbHVtbiA9IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY29sdW1uKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VyQ2hhcisrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRBdEFycmF5KG9iamVjdHM6IGFueVtdKTogYW55W10ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IG9iamVjdHNbaV07XHJcbiAgICAgICAgICAgIHZhciBwb3MgPSBvYmoucG9zO1xyXG4gICAgICAgICAgICBpZiAoIXBvcykgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgYXQ6IHBvcy5zdGFydCwgb2JqOiBvYmogfSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MuZW5kID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBhdDogcG9zLmVuZCwgb2JqOiBvYmogfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChlbDEsIGVsMikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWwxLmF0ID4gZWwyLmF0KSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKGVsMS5hdCA8IGVsMi5hdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90ZXh0V29ya2VyLnRzIiwiLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIEpTT041LCBodHRwOi8vanNvbjUub3JnL1xyXG4vLyBUaGUgbW9kaWZpY2F0aW9uIGZvciBnZXR0aW5nIG9iamVjdCBhbmQgcHJvcGVydGllcyBsb2NhdGlvbiAnYXQnIHdlcmUgbWFkZW4uXHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5SlNPTjUge1xyXG4gICAgcHVibGljIHN0YXRpYyBwb3NpdGlvbk5hbWUgPSBcInBvc1wiO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZXNjYXBlZSA9IHtcclxuICAgICAgICBcIidcIjogXCInXCIsXHJcbiAgICAgICAgJ1wiJzogJ1wiJyxcclxuICAgICAgICAnXFxcXCc6ICdcXFxcJyxcclxuICAgICAgICAnLyc6ICcvJyxcclxuICAgICAgICAnXFxuJzogJycsICAgICAgIC8vIFJlcGxhY2UgZXNjYXBlZCBuZXdsaW5lcyBpbiBzdHJpbmdzIHcvIGVtcHR5IHN0cmluZ1xyXG4gICAgICAgIGI6ICdcXGInLFxyXG4gICAgICAgIGY6ICdcXGYnLFxyXG4gICAgICAgIG46ICdcXG4nLFxyXG4gICAgICAgIHI6ICdcXHInLFxyXG4gICAgICAgIHQ6ICdcXHQnXHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgd3MgPSBbXHJcbiAgICAgICAgJyAnLFxyXG4gICAgICAgICdcXHQnLFxyXG4gICAgICAgICdcXHInLFxyXG4gICAgICAgICdcXG4nLFxyXG4gICAgICAgICdcXHYnLFxyXG4gICAgICAgICdcXGYnLFxyXG4gICAgICAgICdcXHhBMCcsXHJcbiAgICAgICAgJ1xcdUZFRkYnXHJcbiAgICBdO1xyXG4gICAgcHJpdmF0ZSBlbmRBdDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhdDogbnVtYmVyOyAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlclxyXG4gICAgcHJpdmF0ZSBjaDogYW55OyAgICAgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXHJcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgcGFyc2VUeXBlOiBudW1iZXI7IC8vIDAgLSBzdGFkYXJkLCAxIC0gZ2V0IGluZm9ybWF0aW9uIGFib3V0IG9iamVjdHMsIDIgLSBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHByb3BlcnRpZXNcclxuICAgIGNvbnN0cnVjdG9yKHBhcnNlVHlwZTogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIHRoaXMucGFyc2VUeXBlID0gcGFyc2VUeXBlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHBhcnNlKHNvdXJjZTogYW55LCByZXZpdmVyOiBhbnkgPSBudWxsLCBzdGFydEZyb206IG51bWJlciA9IDAsIGVuZEF0OiBudW1iZXIgPSAtMSk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuXHJcbiAgICAgICAgdGhpcy50ZXh0ID0gU3RyaW5nKHNvdXJjZSk7XHJcbiAgICAgICAgdGhpcy5hdCA9IHN0YXJ0RnJvbTtcclxuICAgICAgICB0aGlzLmVuZEF0ID0gZW5kQXQ7XHJcbiAgICAgICAgdGhpcy5jaCA9ICcgJztcclxuICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy53aGl0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoXCJTeW50YXggZXJyb3JcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXHJcbiAgICAgICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcclxuICAgICAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcclxuICAgICAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXHJcbiAgICAgICAgLy8gcmVzdWx0LlxyXG5cclxuICAgICAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xyXG4gICAgICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9ICh7ICcnOiByZXN1bHQgfSwgJycpKSA6IHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZXJyb3IobTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cclxuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IoKTtcclxuICAgICAgICBlcnJvci5tZXNzYWdlID0gbTtcclxuICAgICAgICBlcnJvcltcImF0XCJdID0gdGhpcy5hdDtcclxuICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbmV4dChjOiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXHJcbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gdGhpcy5jaCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIHRoaXMuY2ggKyBcIidcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEdldCB0aGUgdGhpcy5uZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxyXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxyXG4gICAgICAgIHRoaXMuY2ggPSB0aGlzLmNoYXJ0QXQoKTtcclxuICAgICAgICB0aGlzLmF0ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2g7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBlZWsoKSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSB0aGlzLm5leHQgY2hhcmFjdGVyIHdpdGhvdXQgY29uc3VtaW5nIGl0IG9yXHJcbiAgICAgICAgLy8gYXNzaWduaW5nIGl0IHRvIHRoZSB0aGlzLmNoIHZhcmFpYmxlLlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJ0QXQoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY2hhcnRBdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5lbmRBdCA+IC0xICYmIHRoaXMuYXQgPj0gdGhpcy5lbmRBdCkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuY2hhckF0KHRoaXMuYXQpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpZGVudGlmaWVyKCkge1xyXG4gICAgICAgIC8vIFBhcnNlIGFuIGlkZW50aWZpZXIuIE5vcm1hbGx5LCByZXNlcnZlZCB3b3JkcyBhcmUgZGlzYWxsb3dlZCBoZXJlLCBidXQgd2VcclxuICAgICAgICAvLyBvbmx5IHVzZSB0aGlzIGZvciB1bnF1b3RlZCBvYmplY3Qga2V5cywgd2hlcmUgcmVzZXJ2ZWQgd29yZHMgYXJlIGFsbG93ZWQsXHJcbiAgICAgICAgLy8gc28gd2UgZG9uJ3QgY2hlY2sgZm9yIHRob3NlIGhlcmUuIFJlZmVyZW5jZXM6XHJcbiAgICAgICAgLy8gLSBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g3LjZcclxuICAgICAgICAvLyAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfR3VpZGUvQ29yZV9MYW5ndWFnZV9GZWF0dXJlcyNWYXJpYWJsZXNcclxuICAgICAgICAvLyAtIGh0dHA6Ly9kb2NzdG9yZS5taWsudWEvb3JlbGx5L3dlYnByb2cvanNjcmlwdC9jaDAyXzA3Lmh0bVxyXG4gICAgICAgIC8vIFRPRE8gSWRlbnRpZmllcnMgY2FuIGhhdmUgVW5pY29kZSBcImxldHRlcnNcIiBpbiB0aGVtOyBhZGQgc3VwcG9ydCBmb3IgdGhvc2UuXHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuY2g7XHJcblxyXG4gICAgICAgIC8vIElkZW50aWZpZXJzIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgXyBvciAkLlxyXG4gICAgICAgIGlmICgodGhpcy5jaCAhPT0gJ18nICYmIHRoaXMuY2ggIT09ICckJykgJiZcclxuICAgICAgICAgICAgKHRoaXMuY2ggPCAnYScgfHwgdGhpcy5jaCA+ICd6JykgJiZcclxuICAgICAgICAgICAgKHRoaXMuY2ggPCAnQScgfHwgdGhpcy5jaCA+ICdaJykpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcihcIkJhZCBpZGVudGlmaWVyXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU3Vic2VxdWVudCBjaGFyYWN0ZXJzIGNhbiBjb250YWluIGRpZ2l0cy5cclxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0KCkgJiYgKFxyXG4gICAgICAgIHRoaXMuY2ggPT09ICdfJyB8fCB0aGlzLmNoID09PSAnJCcgfHxcclxuICAgICAgICAodGhpcy5jaCA+PSAnYScgJiYgdGhpcy5jaCA8PSAneicpIHx8XHJcbiAgICAgICAgKHRoaXMuY2ggPj0gJ0EnICYmIHRoaXMuY2ggPD0gJ1onKSB8fFxyXG4gICAgICAgICh0aGlzLmNoID49ICcwJyAmJiB0aGlzLmNoIDw9ICc5JykpKSB7XHJcbiAgICAgICAgICAgIGtleSArPSB0aGlzLmNoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGtleTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbnVtYmVyKCkge1xyXG5cclxuICAgICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cclxuXHJcbiAgICAgICAgdmFyIG51bWJlcixcclxuICAgICAgICAgICAgc2lnbiA9ICcnLFxyXG4gICAgICAgICAgICBzdHJpbmcgPSAnJyxcclxuICAgICAgICAgICAgYmFzZSA9IDEwO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jaCA9PT0gJy0nIHx8IHRoaXMuY2ggPT09ICcrJykge1xyXG4gICAgICAgICAgICBzaWduID0gdGhpcy5jaDtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KHRoaXMuY2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3VwcG9ydCBmb3IgSW5maW5pdHkgKGNvdWxkIHR3ZWFrIHRvIGFsbG93IG90aGVyIHdvcmRzKTpcclxuICAgICAgICBpZiAodGhpcy5jaCA9PT0gJ0knKSB7XHJcbiAgICAgICAgICAgIG51bWJlciA9IHRoaXMud29yZCgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bWJlciAhPT0gJ251bWJlcicgfHwgaXNOYU4obnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcignVW5leHBlY3RlZCB3b3JkIGZvciBudW1iZXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKHNpZ24gPT09ICctJykgPyAtbnVtYmVyIDogbnVtYmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3VwcG9ydCBmb3IgTmFOXHJcbiAgICAgICAgaWYgKHRoaXMuY2ggPT09ICdOJykge1xyXG4gICAgICAgICAgICBudW1iZXIgPSB0aGlzLndvcmQoKTtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihudW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yKCdleHBlY3RlZCB3b3JkIHRvIGJlIE5hTicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBzaWduIGFzIC1OYU4gYWxzbyBpcyBOYU5cclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoID09PSAnMCcpIHtcclxuICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XHJcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaCA9PT0gJ3gnIHx8IHRoaXMuY2ggPT09ICdYJykge1xyXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIGJhc2UgPSAxNjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID49ICcwJyAmJiB0aGlzLmNoIDw9ICc5Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcignT2N0YWwgbGl0ZXJhbCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGJhc2UpIHtcclxuICAgICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmNoID49ICcwJyAmJiB0aGlzLmNoIDw9ICc5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2ggPT09ICcuJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSAnLic7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubmV4dCgpICYmIHRoaXMuY2ggPj0gJzAnICYmIHRoaXMuY2ggPD0gJzknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoID09PSAnZScgfHwgdGhpcy5jaCA9PT0gJ0UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2ggPT09ICctJyB8fCB0aGlzLmNoID09PSAnKycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5jaCA+PSAnMCcgJiYgdGhpcy5jaCA8PSAnOScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE2OlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuY2ggPj0gJzAnICYmIHRoaXMuY2ggPD0gJzknIHx8IHRoaXMuY2ggPj0gJ0EnICYmIHRoaXMuY2ggPD0gJ0YnIHx8IHRoaXMuY2ggPj0gJ2EnICYmIHRoaXMuY2ggPD0gJ2YnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzaWduID09PSAnLScpIHtcclxuICAgICAgICAgICAgbnVtYmVyID0gLXN0cmluZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoXCJCYWQgbnVtYmVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdHJpbmcoKSB7XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLlxyXG5cclxuICAgICAgICB2YXIgaGV4LFxyXG4gICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICBzdHJpbmcgPSAnJyxcclxuICAgICAgICAgICAgZGVsaW0sICAgICAgLy8gZG91YmxlIHF1b3RlIG9yIHNpbmdsZSBxdW90ZVxyXG4gICAgICAgICAgICB1ZmZmZjtcclxuXHJcbiAgICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yICcgb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoID09PSAnXCInIHx8IHRoaXMuY2ggPT09IFwiJ1wiKSB7XHJcbiAgICAgICAgICAgIGRlbGltID0gdGhpcy5jaDtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMubmV4dCgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaCA9PT0gZGVsaW0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSAnXFxcXCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaCA9PT0gJ3UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQodGhpcy5uZXh0KCksIDE2KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09ICdcXHInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgU3VydmV5SlNPTjUuZXNjYXBlZVt0aGlzLmNoXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN1cnZleUpTT041LmVzY2FwZWVbdGhpcy5jaF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSAnXFxuJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZXNjYXBlZCBuZXdsaW5lcyBhcmUgaW52YWxpZDsgc2VlOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2VlbWsvanNvbjUvaXNzdWVzLzI0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyB0aGlzIGZlZWxzIHNwZWNpYWwtY2FzZWQ7IGFyZSB0aGVyZSBvdGhlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQgdW5lc2NhcGVkIGNoYXJzP1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gdGhpcy5jaDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVycm9yKFwiQmFkIHN0cmluZ1wiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaW5saW5lQ29tbWVudCgpIHtcclxuXHJcbiAgICAgICAgLy8gU2tpcCBhbiBpbmxpbmUgY29tbWVudCwgYXNzdW1pbmcgdGhpcyBpcyBvbmUuIFRoZSBjdXJyZW50IGNoYXJhY3RlciBzaG91bGRcclxuICAgICAgICAvLyBiZSB0aGUgc2Vjb25kIC8gY2hhcmFjdGVyIGluIHRoZSAvLyBwYWlyIHRoYXQgYmVnaW5zIHRoaXMgaW5saW5lIGNvbW1lbnQuXHJcbiAgICAgICAgLy8gVG8gZmluaXNoIHRoZSBpbmxpbmUgY29tbWVudCwgd2UgbG9vayBmb3IgYSBuZXdsaW5lIG9yIHRoZSBlbmQgb2YgdGhlIHRleHQuXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoICE9PSAnLycpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcihcIk5vdCBhbiBpbmxpbmUgY29tbWVudFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoID09PSAnXFxuJyB8fCB0aGlzLmNoID09PSAnXFxyJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlICh0aGlzLmNoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYmxvY2tDb21tZW50KCkge1xyXG5cclxuICAgICAgICAvLyBTa2lwIGEgYmxvY2sgY29tbWVudCwgYXNzdW1pbmcgdGhpcyBpcyBvbmUuIFRoZSBjdXJyZW50IGNoYXJhY3RlciBzaG91bGQgYmVcclxuICAgICAgICAvLyB0aGUgKiBjaGFyYWN0ZXIgaW4gdGhlIC8qIHBhaXIgdGhhdCBiZWdpbnMgdGhpcyBibG9jayBjb21tZW50LlxyXG4gICAgICAgIC8vIFRvIGZpbmlzaCB0aGUgYmxvY2sgY29tbWVudCwgd2UgbG9vayBmb3IgYW4gZW5kaW5nICovIHBhaXIgb2YgY2hhcmFjdGVycyxcclxuICAgICAgICAvLyBidXQgd2UgYWxzbyB3YXRjaCBmb3IgdGhlIGVuZCBvZiB0ZXh0IGJlZm9yZSB0aGUgY29tbWVudCBpcyB0ZXJtaW5hdGVkLlxyXG5cclxuICAgICAgICBpZiAodGhpcy5jaCAhPT0gJyonKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoXCJOb3QgYSBibG9jayBjb21tZW50XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuY2ggPT09ICcqJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCcqJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaCA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAodGhpcy5jaCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IoXCJVbnRlcm1pbmF0ZWQgYmxvY2sgY29tbWVudFwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29tbWVudCgpIHtcclxuXHJcbiAgICAgICAgLy8gU2tpcCBhIGNvbW1lbnQsIHdoZXRoZXIgaW5saW5lIG9yIGJsb2NrLWxldmVsLCBhc3N1bWluZyB0aGlzIGlzIG9uZS5cclxuICAgICAgICAvLyBDb21tZW50cyBhbHdheXMgYmVnaW4gd2l0aCBhIC8gY2hhcmFjdGVyLlxyXG5cclxuICAgICAgICBpZiAodGhpcy5jaCAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoXCJOb3QgYSBjb21tZW50XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uZXh0KCcvJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoID09PSAnLycpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmxpbmVDb21tZW50KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSAnKicpIHtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0NvbW1lbnQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yKFwiVW5yZWNvZ25pemVkIGNvbW1lbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB3aGl0ZSgpIHtcclxuXHJcbiAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cy5cclxuICAgICAgICAvLyBOb3RlIHRoYXQgd2UncmUgZGV0ZWN0aW5nIGNvbW1lbnRzIGJ5IG9ubHkgYSBzaW5nbGUgLyBjaGFyYWN0ZXIuXHJcbiAgICAgICAgLy8gVGhpcyB3b3JrcyBzaW5jZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBub3QgdmFsaWQgSlNPTig1KSwgYnV0IHRoaXMgd2lsbFxyXG4gICAgICAgIC8vIGJyZWFrIGlmIHRoZXJlIGFyZSBvdGhlciB2YWxpZCB2YWx1ZXMgdGhhdCBiZWdpbiB3aXRoIGEgLyBjaGFyYWN0ZXIhXHJcblxyXG4gICAgICAgIHdoaWxlICh0aGlzLmNoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoID09PSAnLycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFN1cnZleUpTT041LndzLmluZGV4T2YodGhpcy5jaCkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHdvcmQoKTogYW55IHtcclxuXHJcbiAgICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy5jaCkge1xyXG4gICAgICAgICAgICBjYXNlICd0JzpcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgndCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCdyJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ3UnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnZScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGNhc2UgJ2YnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCdmJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnbCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCdzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ2UnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgY2FzZSAnbic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ24nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgndScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCdsJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ2wnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBjYXNlICdJJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnSScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCduJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ2YnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnaScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCduJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ2knKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgndCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCd5Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIGNhc2UgJ04nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCdOJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnTicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lcnJvcihcIlVuZXhwZWN0ZWQgJ1wiICsgdGhpcy5jaCArIFwiJ1wiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYXJyYXkoKSB7XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxyXG5cclxuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2ggPT09ICdbJykge1xyXG4gICAgICAgICAgICB0aGlzLm5leHQoJ1snKTtcclxuICAgICAgICAgICAgdGhpcy53aGl0ZSgpO1xyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5jaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2ggPT09ICddJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnXScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsgICAvLyBQb3RlbnRpYWxseSBlbXB0eSBhcnJheVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRVM1IGFsbG93cyBvbWl0dGluZyBlbGVtZW50cyBpbiBhcnJheXMsIGUuZy4gWyxdIGFuZFxyXG4gICAgICAgICAgICAgICAgLy8gWyxudWxsXS4gV2UgZG9uJ3QgYWxsb3cgdGhpcyBpbiBKU09ONS5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoID09PSAnLCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKFwiTWlzc2luZyBhcnJheSBlbGVtZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHRoaXMudmFsdWUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLndoaXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGNvbW1hIGFmdGVyIHRoaXMgdmFsdWUsIHRoaXMgbmVlZHMgdG9cclxuICAgICAgICAgICAgICAgIC8vIGJlIHRoZSBlbmQgb2YgdGhlIGFycmF5LlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2ggIT09ICcsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnXScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aGl0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXJyb3IoXCJCYWQgYXJyYXlcIik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9iamVjdCgpIHtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgYW4gb2JqZWN0IHZhbHVlLlxyXG5cclxuICAgICAgICB2YXIga2V5LFxyXG4gICAgICAgICAgICBzdGFydCxcclxuICAgICAgICAgICAgaXNGaXJzdFByb3BlcnR5ID0gdHJ1ZSxcclxuICAgICAgICAgICAgb2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMucGFyc2VUeXBlID4gMCkge1xyXG4gICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXSA9IHsgc3RhcnQ6IHRoaXMuYXQgLSAxIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoID09PSAneycpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KCd7Jyk7XHJcbiAgICAgICAgICAgIHRoaXMud2hpdGUoKTtcclxuICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmF0IC0gMTtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuY2gpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoID09PSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJzZVR5cGUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdLmVuZCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoJ30nKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIFBvdGVudGlhbGx5IGVtcHR5IG9iamVjdFxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEtleXMgY2FuIGJlIHVucXVvdGVkLiBJZiB0aGV5IGFyZSwgdGhleSBuZWVkIHRvIGJlXHJcbiAgICAgICAgICAgICAgICAvLyB2YWxpZCBKUyBpZGVudGlmaWVycy5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoID09PSAnXCInIHx8IHRoaXMuY2ggPT09IFwiJ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5zdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5pZGVudGlmaWVyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy53aGl0ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyc2VUeXBlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0gPSB7IHN0YXJ0OiBzdGFydCwgdmFsdWVTdGFydDogdGhpcy5hdCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCc6Jyk7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuYXQgLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0udmFsdWVFbmQgPSBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldLmVuZCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy53aGl0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBjb21tYSBhZnRlciB0aGlzIHBhaXIsIHRoaXMgbmVlZHMgdG8gYmVcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIG9iamVjdC5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoICE9PSAnLCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJzZVR5cGUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0udmFsdWVFbmQtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W1N1cnZleUpTT041LnBvc2l0aW9uTmFtZV1ba2V5XS5lbmQtLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyc2VUeXBlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXS5lbmQgPSB0aGlzLmF0IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCd9Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldLnZhbHVlRW5kLS07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0ZpcnN0UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W1N1cnZleUpTT041LnBvc2l0aW9uTmFtZV1ba2V5XS5lbmQtLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoJywnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2hpdGUoKTtcclxuICAgICAgICAgICAgICAgIGlzRmlyc3RQcm9wZXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXJyb3IoXCJCYWQgb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB2YWx1ZSgpOiBhbnkge1xyXG5cclxuICAgICAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcclxuICAgICAgICAvLyBvciBhIHdvcmQuXHJcblxyXG4gICAgICAgIHRoaXMud2hpdGUoKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY2gpIHtcclxuICAgICAgICAgICAgY2FzZSAneyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QoKTtcclxuICAgICAgICAgICAgY2FzZSAnWyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheSgpO1xyXG4gICAgICAgICAgICBjYXNlICdcIic6XHJcbiAgICAgICAgICAgIGNhc2UgXCInXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoKTtcclxuICAgICAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICAgIGNhc2UgJysnOlxyXG4gICAgICAgICAgICBjYXNlICcuJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bWJlcigpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2ggPj0gJzAnICYmIHRoaXMuY2ggPD0gJzknID8gdGhpcy5udW1iZXIoKSA6IHRoaXMud29yZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcGxhY2VyOiBhbnk7XHJcbiAgICBwcml2YXRlIGluZGVudFN0cjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBvYmpTdGFjaztcclxuXHJcbiAgICBwdWJsaWMgc3RyaW5naWZ5KG9iajogYW55LCByZXBsYWNlcjogYW55ID0gbnVsbCwgc3BhY2U6IGFueSA9IG51bGwpIHtcclxuICAgICAgICBpZiAocmVwbGFjZXIgJiYgKHR5cGVvZiAocmVwbGFjZXIpICE9PSBcImZ1bmN0aW9uXCIgJiYgIXRoaXMuaXNBcnJheShyZXBsYWNlcikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVwbGFjZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVwbGFjZXIgPSByZXBsYWNlcjtcclxuICAgICAgICB0aGlzLmluZGVudFN0ciA9IHRoaXMuZ2V0SW5kZW50KHNwYWNlKTtcclxuICAgICAgICB0aGlzLm9ialN0YWNrID0gW107XHJcbiAgICAgICAgLy8gc3BlY2lhbCBjYXNlLi4ud2hlbiB1bmRlZmluZWQgaXMgdXNlZCBpbnNpZGUgb2ZcclxuICAgICAgICAvLyBhIGNvbXBvdW5kIG9iamVjdC9hcnJheSwgcmV0dXJuIG51bGwuXHJcbiAgICAgICAgLy8gYnV0IHdoZW4gdG9wLWxldmVsLCByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgdmFyIHRvcExldmVsSG9sZGVyID0geyBcIlwiOiBvYmogfTtcclxuICAgICAgICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVwbGFjZWRWYWx1ZU9yVW5kZWZpbmVkKHRvcExldmVsSG9sZGVyLCAnJywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsU3RyaW5naWZ5KHRvcExldmVsSG9sZGVyLCAnJywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEluZGVudChzcGFjZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gXCJudW1iZXJcIiAmJiBzcGFjZSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlSW5kZW50KFwiIFwiLCBzcGFjZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFJlcGxhY2VkVmFsdWVPclVuZGVmaW5lZChob2xkZXI6IGFueSwga2V5OiBhbnksIGlzVG9wTGV2ZWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBob2xkZXJba2V5XTtcclxuXHJcbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgdG9KU09OIHZhbHVlIGZpcnN0LCBpZiBwb3NzaWJsZVxyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50b0pTT04gJiYgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgdXNlci1zdXBwbGllZCByZXBsYWNlciBpZiBhIGZ1bmN0aW9uLCBjYWxsIGl0LiBJZiBpdCdzIGFuIGFycmF5LCBjaGVjayBvYmplY3RzJyBzdHJpbmcga2V5cyBmb3JcclxuICAgICAgICAvLyBwcmVzZW5jZSBpbiB0aGUgYXJyYXkgKHJlbW92aW5nIHRoZSBrZXkvdmFsdWUgcGFpciBmcm9tIHRoZSByZXN1bHRpbmcgSlNPTiBpZiB0aGUga2V5IGlzIG1pc3NpbmcpLlxyXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMucmVwbGFjZXIpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXBsYWNlcikge1xyXG4gICAgICAgICAgICBpZiAoaXNUb3BMZXZlbCB8fCB0aGlzLmlzQXJyYXkoaG9sZGVyKSB8fCB0aGlzLnJlcGxhY2VyLmluZGV4T2Yoa2V5KSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzV29yZENoYXIoY2hhcjogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChjaGFyID49ICdhJyAmJiBjaGFyIDw9ICd6JykgfHxcclxuICAgICAgICAgICAgKGNoYXIgPj0gJ0EnICYmIGNoYXIgPD0gJ1onKSB8fFxyXG4gICAgICAgICAgICAoY2hhciA+PSAnMCcgJiYgY2hhciA8PSAnOScpIHx8XHJcbiAgICAgICAgICAgIGNoYXIgPT09ICdfJyB8fCBjaGFyID09PSAnJCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1dvcmRTdGFydChjaGFyOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKGNoYXIgPj0gJ2EnICYmIGNoYXIgPD0gJ3onKSB8fFxyXG4gICAgICAgICAgICAoY2hhciA+PSAnQScgJiYgY2hhciA8PSAnWicpIHx8XHJcbiAgICAgICAgICAgIGNoYXIgPT09ICdfJyB8fCBjaGFyID09PSAnJCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1dvcmQoa2V5OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNXb3JkU3RhcnQoa2V5WzBdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpID0gMSwgbGVuZ3RoID0ga2V5Lmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNXb3JkQ2hhcihrZXlbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIHBvbHlmaWxsc1xyXG4gICAgcHJpdmF0ZSBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNEYXRlKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBEYXRlXSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc05hTih2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgIT09IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrRm9yQ2lyY3VsYXIob2JqOiBhbnkpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2JqU3RhY2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub2JqU3RhY2tbaV0gPT09IG9iaikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1ha2VJbmRlbnQoc3RyOiBzdHJpbmcsIG51bTogbnVtYmVyLCBub05ld0xpbmU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbmRlbnRhdGlvbiBubyBtb3JlIHRoYW4gMTAgY2hhcnNcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGluZGVudCA9IG5vTmV3TGluZSA/IFwiXCIgOiBcIlxcblwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcclxuICAgICAgICAgICAgaW5kZW50ICs9IHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29waWVkIGZyb20gQ3Jva2ZvcmQncyBpbXBsZW1lbnRhdGlvbiBvZiBKU09OXHJcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RvdWdsYXNjcm9ja2ZvcmQvSlNPTi1qcy9ibG9iL2UzOWRiNGI3ZTYyNDlmMDRhMTk1ZTdkZDA4NDBlNjEwY2M5ZTk0MWUvanNvbjIuanMjTDE5NVxyXG4gICAgLy8gQmVnaW5cclxuICAgIHByaXZhdGUgc3RhdGljIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2c7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgbWV0YSA9IHsgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcclxuICAgICAgICAnXFxiJzogJ1xcXFxiJyxcclxuICAgICAgICAnXFx0JzogJ1xcXFx0JyxcclxuICAgICAgICAnXFxuJzogJ1xcXFxuJyxcclxuICAgICAgICAnXFxmJzogJ1xcXFxmJyxcclxuICAgICAgICAnXFxyJzogJ1xcXFxyJyxcclxuICAgICAgICAnXCInOiAnXFxcXFwiJyxcclxuICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcclxuICAgIH07XHJcbiAgICBwcml2YXRlIGVzY2FwZVN0cmluZyhzdHI6IHN0cmluZykge1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXHJcbiAgICAgICAgLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cclxuICAgICAgICAvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcclxuICAgICAgICAvLyBzZXF1ZW5jZXMuXHJcbiAgICAgICAgU3VydmV5SlNPTjUuZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIFN1cnZleUpTT041LmVzY2FwYWJsZS50ZXN0KHN0cikgPyAnXCInICsgc3RyLnJlcGxhY2UoU3VydmV5SlNPTjUuZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgICAgICB2YXIgYyA9IFN1cnZleUpTT041Lm1ldGFbYV07XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZycgP1xyXG4gICAgICAgICAgICAgICAgYyA6XHJcbiAgICAgICAgICAgICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xyXG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHIgKyAnXCInO1xyXG4gICAgfVxyXG4gICAgLy8gRW5kXHJcblxyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFN0cmluZ2lmeShob2xkZXI6IGFueSwga2V5OiBhbnksIGlzVG9wTGV2ZWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgYnVmZmVyLCByZXM7XHJcblxyXG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIHZhbHVlLCBpZiBuZWNlc3NhcnlcclxuICAgICAgICB2YXIgb2JqX3BhcnQgPSB0aGlzLmdldFJlcGxhY2VkVmFsdWVPclVuZGVmaW5lZChob2xkZXIsIGtleSwgaXNUb3BMZXZlbCk7XHJcblxyXG4gICAgICAgIGlmIChvYmpfcGFydCAmJiAhdGhpcy5pc0RhdGUob2JqX3BhcnQpKSB7XHJcbiAgICAgICAgICAgIC8vIHVuYm94IG9iamVjdHNcclxuICAgICAgICAgICAgLy8gZG9uJ3QgdW5ib3ggZGF0ZXMsIHNpbmNlIHdpbGwgdHVybiBpdCBpbnRvIG51bWJlclxyXG4gICAgICAgICAgICBvYmpfcGFydCA9IG9ial9wYXJ0LnZhbHVlT2YoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygb2JqX3BhcnQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpfcGFydC50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG9ial9wYXJ0KSB8fCAhaXNGaW5pdGUob2JqX3BhcnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ial9wYXJ0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lc2NhcGVTdHJpbmcob2JqX3BhcnQudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqX3BhcnQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheShvYmpfcGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2lyY3VsYXIob2JqX3BhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IFwiW1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2JqU3RhY2sucHVzaChvYmpfcGFydCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqX3BhcnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gdGhpcy5pbnRlcm5hbFN0cmluZ2lmeShvYmpfcGFydCwgaSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gdGhpcy5tYWtlSW5kZW50KHRoaXMuaW5kZW50U3RyLCB0aGlzLm9ialN0YWNrLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgPT09IG51bGwgfHwgdHlwZW9mIHJlcyA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IFwibnVsbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHJlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IG9ial9wYXJ0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBcIixcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGVudFN0cikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gdGhpcy5tYWtlSW5kZW50KHRoaXMuaW5kZW50U3RyLCB0aGlzLm9ialN0YWNrLmxlbmd0aCwgdHJ1ZSkgKyBcIl1cIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNpcmN1bGFyKG9ial9wYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBcIntcIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbm9uRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9ialN0YWNrLnB1c2gob2JqX3BhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqX3BhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9ial9wYXJ0Lmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmludGVybmFsU3RyaW5naWZ5KG9ial9wYXJ0LCBwcm9wLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RvcExldmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHRoaXMubWFrZUluZGVudCh0aGlzLmluZGVudFN0ciwgdGhpcy5vYmpTdGFjay5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbkVtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcEtleSA9IHRoaXMuaXNXb3JkKHByb3ApID8gcHJvcCA6IHRoaXMuZXNjYXBlU3RyaW5nKHByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBwcm9wS2V5ICsgXCI6XCIgKyAodGhpcy5pbmRlbnRTdHIgPyAnICcgOiAnJykgKyB2YWx1ZSArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2JqU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vbkVtcHR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJzdHJpbmcoMCwgYnVmZmVyLmxlbmd0aCAtIDEpICsgdGhpcy5tYWtlSW5kZW50KHRoaXMuaW5kZW50U3RyLCB0aGlzLm9ialN0YWNrLmxlbmd0aCkgKyBcIn1cIjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAne30nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIHVuZGVmaW5lZCBzaG91bGQgYmUgaWdub3JlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvanNvbjUudHMiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIERyYWdEcm9wVGFyZ2V0RWxlbWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFnZTogU3VydmV5LlBhZ2UsIHB1YmxpYyB0YXJnZXQ6IGFueSwgcHVibGljIHNvdXJjZTogYW55KSB7XHJcblxyXG4gICAgfVxyXG4gICAgcHVibGljIG1vdmVUbyhkZXN0aW5hdGlvbjogYW55LCBpc0JvdHRvbTogYm9vbGVhbiwgaXNFZGdlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiZGVzdDogXCIgKyBkZXN0aW5hdGlvbi5uYW1lICsgXCIsIGlzQm90dG9tOlwiICsgaXNCb3R0b20gKyBcIiwgaXNFZGdlOlwiICsgaXNFZGdlKTtcclxuICAgICAgICBpc0VkZ2UgPSBpc0VkZ2UgfHwgIWRlc3RpbmF0aW9uLmlzUGFuZWw7XHJcbiAgICAgICAgaWYoZGVzdGluYXRpb24gPT09IHRoaXMudGFyZ2V0KSByZXR1cm4gIXRoaXMudGFyZ2V0LmlzUGFuZWw7XHJcbiAgICAgICAgdmFyIGRlc3RJbmZvID0gdGhpcy5maW5kSW5mbyhkZXN0aW5hdGlvbiwgaXNFZGdlKTtcclxuICAgICAgICBpZighZGVzdEluZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0YXJnZXRJbmZvID0gdGhpcy5maW5kSW5mbyh0aGlzLnRhcmdldCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbmZvKGRlc3RJbmZvLCBpc0JvdHRvbSwgaXNFZGdlKTtcclxuICAgICAgICBpZih0aGlzLmlzSW5mb0VxdWFscyh0YXJnZXRJbmZvLCBkZXN0SW5mbykpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2xlYXJCeUluZm8odGFyZ2V0SW5mbyk7XHJcbiAgICAgICAgZGVzdEluZm8gPSB0aGlzLmZpbmRJbmZvKGRlc3RpbmF0aW9uLCBpc0VkZ2UpO1xyXG4gICAgICAgIGlmKCFkZXN0SW5mbykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlSW5mbyhkZXN0SW5mbywgaXNCb3R0b20sIGlzRWRnZSk7XHJcbiAgICAgICAgaWYoIXRoaXMuY2FuTW92ZShkZXN0SW5mbykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmFkZEluZm8oZGVzdEluZm8pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRvRHJvcCgpIHtcclxuICAgICAgICB2YXIgZGVzdEluZm8gPSB0aGlzLmZpbmRJbmZvKHRoaXMudGFyZ2V0KTtcclxuICAgICAgICBpZighZGVzdEluZm8pIHJldHVybjtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldEluZGV4QnlJbmZvKGRlc3RJbmZvKTtcclxuICAgICAgICBkZXN0SW5mby5wYW5lbC5hZGRFbGVtZW50KHRoaXMuZ2V0TmV3VGFyZ2V0RWxlbWVudCgpLCBpbmRleCk7IFxyXG4gICAgICAgIGlmKHRoaXMuc291cmNlKSB7XHJcbiAgICAgICAgICAgIHZhciBzcmNJbmZvID0gdGhpcy5maW5kSW5mbyh0aGlzLnNvdXJjZSk7XHJcbiAgICAgICAgICAgIHZhciBwYW5lbCA9IHNyY0luZm8gPyBzcmNJbmZvLnBhbmVsIDogdGhpcy5wYWdlO1xyXG4gICAgICAgICAgICBwYW5lbC5yZW1vdmVFbGVtZW50KHRoaXMuc291cmNlKTsgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJCeUluZm8odGhpcy5maW5kSW5mbyh0aGlzLnRhcmdldCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRJbmRleEJ5SW5mbyhpbmZvOiBhbnkpIHtcclxuICAgICAgICBpZighaW5mbykgcmV0dXJuIDA7XHJcbiAgICAgICAgdmFyIHJvd3MgPSBpbmZvLnBhbmVsLmtvUm93cygpO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGluZm8uckluZGV4OyBpICsrKSB7XHJcbiAgICAgICAgICAgIGluZGV4ICs9IHJvd3NbaV1bXCJrb0VsZW1lbnRzXCJdKCkubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5kZXggKyBpbmZvLmVsSW5kZXg7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNhbk1vdmUoZGVzdEluZm86IGFueSkgOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLnRhcmdldC5pc1BhbmVsICYmIGRlc3RJbmZvLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYodGhpcy50YXJnZXQgPT0gZGVzdEluZm8uZWxlbWVudCB8fCB0aGlzLnRhcmdldC5jb250YWluc0VsZW1lbnQoZGVzdEluZm8uZWxlbWVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYodGhpcy5zb3VyY2UgJiYgKHRoaXMuc291cmNlID09IGRlc3RJbmZvLmVsZW1lbnQgfHwgdGhpcy5zb3VyY2UuY29udGFpbnNFbGVtZW50KGRlc3RJbmZvLmVsZW1lbnQpKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zb3VyY2UpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHZhciBzcmNJbmZvID0gdGhpcy5maW5kSW5mbyh0aGlzLnNvdXJjZSk7XHJcbiAgICAgICAgaWYoc3JjSW5mbyA9PSBudWxsIHx8IHNyY0luZm8ucGFuZWwgIT0gZGVzdEluZm8ucGFuZWwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHZhciBzcmNJbmRleCA9IHRoaXMuZ2V0SW5kZXhCeUluZm8oc3JjSW5mbyk7XHJcbiAgICAgICAgdmFyIGRlc3RJbmRleCA9IHRoaXMuZ2V0SW5kZXhCeUluZm8oZGVzdEluZm8pO1xyXG4gICAgICAgIHZhciBkaWZmID0gZGVzdEluZGV4IC0gc3JjSW5kZXg7XHJcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAwIHx8IGRpZmYgPiAxO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0xhc3RFbGVtZW50SW5Sb3coaW5mbzogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGluZm8uZWxJbmRleCA9PSBpbmZvLnBhbmVsW1wia29Sb3dzXCJdKClbaW5mby5ySW5kZXhdW1wia29FbGVtZW50c1wiXSgpLmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZUluZm8oaW5mbzogYW55LCBpc0JvdHRvbTogYm9vbGVhbiwgaXNFZGdlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYoaW5mby5ySW5kZXggPCAwKSByZXR1cm47IFxyXG4gICAgICAgIGlmKHRoaXMudGFyZ2V0LnN0YXJ0V2l0aE5ld0xpbmUpIHtcclxuICAgICAgICAgICAgaWYoaXNCb3R0b20pIGluZm8uckluZGV4ICsrO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKGlzQm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICBpbmZvLmVsSW5kZXggKys7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZihpbmZvLmVsSW5kZXggPT0gMCAmJiBpbmZvLnJJbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmZvLnJJbmRleCAtLTtcclxuICAgICAgICAgICAgICAgICAgICBpbmZvLmVsSW5kZXggPSBpbmZvLnBhbmVsW1wia29Sb3dzXCJdKClbaW5mby5ySW5kZXhdW1wia29FbGVtZW50c1wiXSgpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkSW5mbyhpbmZvOiBhbnkpIHtcclxuICAgICAgICBpZih0aGlzLnRhcmdldC5zdGFydFdpdGhOZXdMaW5lIHx8IGluZm8uZWxJbmRleCA8IDEgXHJcbiAgICAgICAgICAgIHx8IGluZm8uckluZGV4IDwgMCB8fCBpbmZvLnJJbmRleCA+PSBpbmZvLnBhbmVsLmtvUm93cygpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLkFkZEluZm9Bc1JvdyhpbmZvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gaW5mby5wYW5lbC5rb1Jvd3MoKVtpbmZvLnJJbmRleF07XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IHJvd1tcImtvRWxlbWVudHNcIl0oKTtcclxuICAgICAgICAgICAgaWYoaW5mby5lbEluZGV4IDwgZWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5zcGxpY2UoaW5mby5lbEluZGV4LCAwLCB0aGlzLnRhcmdldCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMudGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3dbXCJrb0VsZW1lbnRzXCJdKGVsZW1lbnRzKTtcclxuICAgICAgICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIEFkZEluZm9Bc1JvdyhpbmZvOiBhbnkpIHtcclxuICAgICAgICB2YXIgcm93ID0gbmV3IFN1cnZleS5RdWVzdGlvblJvdyhpbmZvLnBhbmVsKTtcclxuICAgICAgICBpZih0aGlzLnRhcmdldC5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBhcmVudCA9IGluZm8ucGFuZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvdy5hZGRFbGVtZW50KHRoaXMudGFyZ2V0KTtcclxuICAgICAgICB2YXIgcm93cyA9IGluZm8ucGFuZWwua29Sb3dzKCk7XHJcbiAgICAgICAgaWYoaW5mby5ySW5kZXggPj0gMCAmJiBpbmZvLnJJbmRleCA8IGluZm8ucGFuZWwua29Sb3dzKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJvd3Muc3BsaWNlKGluZm8uckluZGV4LCAwLCByb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgfVxyXG4gICAgICAgaW5mby5wYW5lbC5rb1Jvd3Mocm93cyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNsZWFyQnlJbmZvKGluZm86IGFueSkge1xyXG4gICAgICAgIGlmKGluZm8gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciByb3dzID0gaW5mby5wYW5lbC5rb1Jvd3MoKTtcclxuICAgICAgICBpZihpbmZvLnJJbmRleCA8IDAgfHwgaW5mby5ySW5kZXggPj0gcm93cy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICB2YXIgcm93ID0gcm93c1tpbmZvLnJJbmRleF07XHJcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gcm93W1wia29FbGVtZW50c1wiXSgpOyBcclxuICAgICAgICBpZihyb3dbXCJrb0VsZW1lbnRzXCJdKCkubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBlbGVtZW50cy5zcGxpY2UoaW5mby5lbEluZGV4LCAxKTtcclxuICAgICAgICAgICAgcm93W1wia29FbGVtZW50c1wiXShlbGVtZW50cyk7XHJcbiAgICAgICAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93cy5zcGxpY2UoaW5mby5ySW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBpbmZvLnBhbmVsLmtvUm93cyhyb3dzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzSW5mb0VxdWFscyhhOiBhbnksIGI6IGFueSkgOiBib29sZWFuIHtcclxuICAgICAgICBpZihhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGEucGFuZWwgPT09IGIucGFuZWwgJiYgYS5ySW5kZXggPT09IGIuckluZGV4ICYmIGEuZWxJbmRleCA9PT0gYi5lbEluZGV4O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kSW5mbyhlbDogYW55LCBpc0VkZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEluZm9JblBhbmVsKHRoaXMucGFnZSwgZWwsIGlzRWRnZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGZpbmRJbmZvSW5QYW5lbChwYW5lbDogU3VydmV5LlBhbmVsTW9kZWxCYXNlLCBlbDogYW55LCBpc0VkZ2U6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgICAgIGlmKGVsID09IHBhbmVsKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBwYW5lbDtcclxuICAgICAgICAgICAgaWYocGFuZWwucGFyZW50ICYmIChpc0VkZ2UgfHwgdGhpcy50YXJnZXQuaXNQYW5lbCkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhbmVsLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBwYW5lbDogcGFyZW50LCByb3c6IG51bGwsIHJJbmRleDogMCwgZWxJbmRleDogMCwgZWxlbWVudDogcGFuZWwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJvd3MgPSBwYW5lbFtcImtvUm93c1wiXSgpO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gcm93W1wia29FbGVtZW50c1wiXSgpO1xyXG4gICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgZWxlbWVudHMubGVuZ3RoOyBqICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZihlbGVtZW50c1tqXS5pc1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuZmluZEluZm9JblBhbmVsKGVsZW1lbnRzW2pdLCBlbCwgaXNFZGdlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLmVsZW1lbnQgPT0gZWxlbWVudHNbal0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5ySW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVsSW5kZXggPSBqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50c1tqXSA9PSBlbCkgcmV0dXJuIHsgcGFuZWw6IHBhbmVsLCByb3c6IHJvdywgckluZGV4OiBpLCBlbEluZGV4OiBqLCBlbGVtZW50OiBlbGVtZW50c1tqXSB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROZXdUYXJnZXRFbGVtZW50KCk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKHRoaXMudGFyZ2V0LmdldFR5cGUoKSk7XHJcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy50YXJnZXQpO1xyXG4gICAgICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERyYWdEcm9wSGVscGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZWRnZUhlaWdodDogbnVtYmVyID0gMjA7XHJcbiAgICBzdGF0aWMgZGF0YVN0YXJ0OiBzdHJpbmcgPSBcInN1cnZleWpzLFwiO1xyXG4gICAgc3RhdGljIGRyYWdEYXRhOiBhbnkgPSB7dGV4dDogXCJcIiwganNvbjogbnVsbCB9O1xyXG4gICAgc3RhdGljIHByZXZFdmVudCA9IHsgZWxlbWVudDogbnVsbCwgeDogLTEsIHk6IC0xIH07XHJcbiAgICBwcml2YXRlIG9uTW9kaWZpZWRDYWxsYmFjazogKCkgPT4gYW55O1xyXG4gICAgcHJpdmF0ZSBzY3JvbGxhYmxlRWxlbWVudDogSFRNTEVsZW1lbnQgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBkZFRhcmdldDogRHJhZ0Ryb3BUYXJnZXRFbGVtZW50ID0gbnVsbDtcclxuICAgIHByaXZhdGUgcHJldkNvb3JkaW5hdGVzOiB7eDogbnVtYmVyLCB5OiBudW1iZXJ9O1xyXG4gICAgc3RhdGljIGNvdW50ZXI6IG51bWJlciAgPSAxO1xyXG4gICAgcHJpdmF0ZSBpZDogbnVtYmVyID0gRHJhZ0Ryb3BIZWxwZXIuY291bnRlciArKztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBTdXJ2ZXkuSVN1cnZleSwgb25Nb2RpZmllZENhbGxiYWNrOiAoKSA9PiBhbnksIHNjcm9sbGFibGVFbE5hbWU6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLm9uTW9kaWZpZWRDYWxsYmFjayA9IG9uTW9kaWZpZWRDYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNjcm9sbGFibGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoKHNjcm9sbGFibGVFbE5hbWUgPyBzY3JvbGxhYmxlRWxOYW1lIDogXCJzY3JvbGxhYmxlRGl2XCIpKTtcclxuICAgICAgICB0aGlzLnByZXZDb29yZGluYXRlcyA9IHt4OiAtMSwgeTogLTF9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHsgcmV0dXJuIDxTdXJ2ZXkuU3VydmV5PnRoaXMuZGF0YTsgfVxyXG4gICAgcHVibGljIHN0YXJ0RHJhZ1F1ZXN0aW9uKGV2ZW50OiBEcmFnRXZlbnQsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIHZhciBqc29uID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICAgIGpzb25bXCJ0eXBlXCJdID0gZWxlbWVudC5nZXRUeXBlKCk7XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlRGF0YShldmVudCwgZWxlbWVudC5uYW1lLCBqc29uKTtcclxuICAgICAgICB0aGlzLmRkVGFyZ2V0LnNvdXJjZSA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhcnREcmFnVG9vbGJveEl0ZW0oZXZlbnQ6IERyYWdFdmVudCwgZWxlbWVudE5hbWU6IHN0cmluZywgZWxlbWVudEpzb246IGFueSkge1xyXG4gICAgICAgIHRoaXMucHJlcGFyZURhdGEoZXZlbnQsICBlbGVtZW50TmFtZSwgZWxlbWVudEpzb24pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzU3VydmV5RHJhZ2dpbmcoZXZlbnQ6IERyYWdFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0RGF0YShldmVudCkudGV4dDtcclxuICAgICAgICByZXR1cm4gZGF0YSAmJiBkYXRhLmluZGV4T2YoRHJhZ0Ryb3BIZWxwZXIuZGF0YVN0YXJ0KSA9PSAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRvRHJhZ0Ryb3BPdmVyKGV2ZW50OiBEcmFnRXZlbnQsIGVsZW1lbnQ6IGFueSwgaXNFZGdlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBldmVudCA9IHRoaXMuZ2V0RXZlbnQoZXZlbnQpO1xyXG4gICAgICAgIGlmKHRoaXMuaXNTYW1lQ29vcmRpbmF0ZXMoZXZlbnQpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jaGVja1Njcm9sbFkoZXZlbnQpO1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCAhdGhpcy5pc1N1cnZleURyYWdnaW5nKGV2ZW50KSB8fCB0aGlzLmlzU2FtZVBsYWNlKGV2ZW50LCBlbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBib3R0b21JbmZvID0gdGhpcy5pc0JvdHRvbShldmVudCwgZWxlbWVudCk7XHJcbiAgICAgICAgaXNFZGdlID0gZWxlbWVudC5pc1BhbmVsID8gaXNFZGdlICYmIGJvdHRvbUluZm8uaXNFZGdlIDogdHJ1ZTtcclxuICAgICAgICBpZihlbGVtZW50LmlzUGFuZWwgJiYgIWlzRWRnZSAmJiBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA+IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRkVGFyZ2V0Lm1vdmVUbyhlbGVtZW50LCBib3R0b21JbmZvLmlzQm90dG9tLCBpc0VkZ2UpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGVuZCgpIHtcclxuICAgICAgICBpZih0aGlzLmRkVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGRUYXJnZXQuY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbFN0b3AgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2xlYXJEYXRhKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc1N1cnZleURyYWdnaW5nKGV2ZW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLmRkVGFyZ2V0LmRvRHJvcCgpO1xyXG4gICAgICAgICAgICBpZih0aGlzLm9uTW9kaWZpZWRDYWxsYmFjaykgdGhpcy5vbk1vZGlmaWVkQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbmQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkb0xlYXZlUGFnZShldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5kZFRhcmdldC5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNjcm9sbFRvRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgfHwgIWVsKSByZXR1cm47XHJcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjcmVhdGVUYXJnZXRFbGVtZW50KGVsZW1lbnROYW1lOiBzdHJpbmcsIGpzb246IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50TmFtZSB8fCAhanNvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyhqc29uW1widHlwZVwiXSk7XHJcbiAgICAgICAgbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgdGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5uYW1lID0gZWxlbWVudE5hbWU7XHJcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5zZXREYXRhKHRoaXMuc3VydmV5KTtcclxuICAgICAgICB0YXJnZXRFbGVtZW50LnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XHJcbiAgICAgICAgdGFyZ2V0RWxlbWVudFtcImtvSXNEcmFnZ2luZ1wiXSh0cnVlKTtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0RWxlbWVudDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNCb3R0b20oZXZlbnQ6IERyYWdFdmVudCwgc3VydmV5RWw6IGFueSk6IGFueSB7XHJcbiAgICAgICAgZXZlbnQgPSB0aGlzLmdldEV2ZW50KGV2ZW50KTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gPG51bWJlcj5ldmVudC5jdXJyZW50VGFyZ2V0W1wiY2xpZW50SGVpZ2h0XCJdO1xyXG4gICAgICAgIHZhciB5ID0gZXZlbnQub2Zmc2V0WTtcclxuICAgICAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ2xheWVyWCcpKSB7XHJcbiAgICAgICAgICAgIHkgPSBldmVudC5sYXllclkgLSA8bnVtYmVyPmV2ZW50LmN1cnJlbnRUYXJnZXRbXCJvZmZzZXRUb3BcIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBpc0JvdHRvbTogeSA+IGhlaWdodCAvIDIsIGlzRWRnZTogeSA8PSBEcmFnRHJvcEhlbHBlci5lZGdlSGVpZ2h0IHx8IGhlaWdodCAtIHkgPD0gRHJhZ0Ryb3BIZWxwZXIuZWRnZUhlaWdodH07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGlzU2FtZUNvb3JkaW5hdGVzKGV2ZW50OiBEcmFnRXZlbnQpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzID0gTWF0aC5hYnMoZXZlbnQucGFnZVggLSB0aGlzLnByZXZDb29yZGluYXRlcy54KSA+IDUgfHwgTWF0aC5hYnMoZXZlbnQucGFnZVkgLSB0aGlzLnByZXZDb29yZGluYXRlcy55KSA+IDU7XHJcbiAgICAgICAgaWYocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldkNvb3JkaW5hdGVzLnggPSBldmVudC5wYWdlWDtcclxuICAgICAgICAgICAgdGhpcy5wcmV2Q29vcmRpbmF0ZXMueSA9IGV2ZW50LnBhZ2VZO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gIXJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNTYW1lUGxhY2UoZXZlbnQ6IERyYWdFdmVudCwgZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHByZXYgPSBEcmFnRHJvcEhlbHBlci5wcmV2RXZlbnQ7XHJcbiAgICAgICAgaWYgKHByZXYuZWxlbWVudCAhPSBlbGVtZW50IHx8IE1hdGguYWJzKGV2ZW50LmNsaWVudFggLSBwcmV2LngpID4gNSB8fCBNYXRoLmFicyhldmVudC5jbGllbnRZIC0gcHJldi55KSA+IDUpIHtcclxuICAgICAgICAgICAgcHJldi5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICAgICAgcHJldi54ID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgICAgICAgcHJldi55ID0gZXZlbnQuY2xpZW50WTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXNTY3JvbGxTdG9wOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgc3RhdGljIFNjcm9sbERlbGF5OiBudW1iZXIgPSAzMDtcclxuICAgIHByaXZhdGUgc3RhdGljIFNjcm9sbE9mZnNldDogbnVtYmVyID0gMTAwO1xyXG4gICAgcHJpdmF0ZSBjaGVja1Njcm9sbFkoZTogRHJhZ0V2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbGFibGVFbGVtZW50KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLmdldFNjcm9sbGFibGVFbGVtZW50UG9zWShlKTtcclxuICAgICAgICBpZiAoeSA8IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsU3RvcCA9IHRydWU7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IDxudW1iZXI+dGhpcy5zY3JvbGxhYmxlRWxlbWVudFtcImNsaWVudEhlaWdodFwiXTtcclxuICAgICAgICBpZiAoeSA8IERyYWdEcm9wSGVscGVyLlNjcm9sbE9mZnNldCAmJiB5ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Njcm9sbFN0b3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kb1Njcm9sbFkoLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGVpZ2h0IC0geSA8IERyYWdEcm9wSGVscGVyLlNjcm9sbE9mZnNldCAmJiBoZWlnaHQgPj0geSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2Nyb2xsU3RvcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRvU2Nyb2xsWSgxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvU2Nyb2xsWShzdGVwOiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzLnNjcm9sbGFibGVFbGVtZW50O1xyXG4gICAgICAgIHZhciBzY3JvbGxZID0gZWwuc2Nyb2xsVG9wICsgc3RlcDtcclxuICAgICAgICBpZiAoc2Nyb2xsWSA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Njcm9sbFN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IHNjcm9sbFk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICghdGhpcy5pc1Njcm9sbFN0b3ApIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNlbGYuZG9TY3JvbGxZKHN0ZXApIH0sIERyYWdEcm9wSGVscGVyLlNjcm9sbERlbGF5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFNjcm9sbGFibGVFbGVtZW50UG9zWShlOiBEcmFnRXZlbnQpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICghdGhpcy5zY3JvbGxhYmxlRWxlbWVudCB8fCAhZS5jdXJyZW50VGFyZ2V0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgdmFyIGVsID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gICAgICAgIHZhciBvZmZzZXRUb3AgPSAwO1xyXG4gICAgICAgIHdoaWxlKGVsICYmIGVsICE9IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0VG9wICs9IDxudW1iZXI+ZWxbXCJvZmZzZXRUb3BcIl07XHJcbiAgICAgICAgICAgIGVsID0gZWxbXCJvZmZzZXRQYXJlbnRcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlLm9mZnNldFkgKyA8bnVtYmVyPmUuY3VycmVudFRhcmdldFtcIm9mZnNldFRvcFwiXSAtIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEV2ZW50KGV2ZW50OiBEcmFnRXZlbnQpOiBEcmFnRXZlbnQge1xyXG4gICAgICAgIHJldHVybiBldmVudFtcIm9yaWdpbmFsRXZlbnRcIl0gPyBldmVudFtcIm9yaWdpbmFsRXZlbnRcIl0gOiBldmVudDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0WShlbGVtZW50OiBIVE1MRWxlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAoZWxlbWVudC5vZmZzZXRUb3AgLSBlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50VG9wKTtcclxuICAgICAgICAgICAgZWxlbWVudCA9IDxIVE1MRWxlbWVudD5lbGVtZW50Lm9mZnNldFBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcHJlcGFyZURhdGEoZXZlbnQ6IERyYWdFdmVudCwgZWxlbWVudE5hbWU6IHN0cmluZywganNvbikge1xyXG4gICAgICAgIHZhciBzdHIgPSBEcmFnRHJvcEhlbHBlci5kYXRhU3RhcnQgKyBcInF1ZXN0aW9ubmFtZTpcIiArIGVsZW1lbnROYW1lO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YShldmVudCwgc3RyKTtcclxuICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IHRoaXMuY3JlYXRlVGFyZ2V0RWxlbWVudChlbGVtZW50TmFtZSwganNvbik7XHJcbiAgICAgICAgdGhpcy5kZFRhcmdldCA9IG5ldyBEcmFnRHJvcFRhcmdldEVsZW1lbnQoPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLCB0YXJnZXRFbGVtZW50LCBudWxsKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0RGF0YShldmVudDogRHJhZ0V2ZW50LCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdKSB7XHJcbiAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKFwiVGV4dFwiLCB0ZXh0KTtcclxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBcImNvcHlcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgRHJhZ0Ryb3BIZWxwZXIuZHJhZ0RhdGEgPSB7IHRleHQ6IHRleHQgfTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0RGF0YShldmVudDogRHJhZ0V2ZW50KTogYW55IHtcclxuICAgICAgICBpZiAoZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdKSB7XHJcbiAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoXCJUZXh0XCIpO1xyXG4gICAgICAgICAgICBpZiAodGV4dCkge1xyXG4gICAgICAgICAgICAgICAgRHJhZ0Ryb3BIZWxwZXIuZHJhZ0RhdGEudGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIERyYWdEcm9wSGVscGVyLmRyYWdEYXRhO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjbGVhckRhdGEoKSB7XHJcbiAgICAgICAgLy90aGlzLmRkVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICBEcmFnRHJvcEhlbHBlci5kcmFnRGF0YSA9IHt0ZXh0OiBcIlwiLCBqc29uOiBudWxsfTtcclxuICAgICAgICB2YXIgcHJldiA9IERyYWdEcm9wSGVscGVyLnByZXZFdmVudDtcclxuICAgICAgICBwcmV2LmVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIHByZXYueCA9IC0xO1xyXG4gICAgICAgIHByZXYueSA9IC0xO1xyXG4gICAgICAgIHRoaXMucHJldkNvb3JkaW5hdGVzLnggPSAtMTtcclxuICAgICAgICB0aGlzLnByZXZDb29yZGluYXRlcy55ID0gLTE7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZHJhZ2Ryb3BoZWxwZXIudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2V9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBTdXJ2ZXlPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gKHByb3BlcnR5OiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSkgPT4gdm9pZDtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSB7XHJcbiAgICBwcml2YXRlIG9iamVjdFZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIGlzVmFsdWVVcGRhdGluZzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgb25Qcm9wZXJ0eUNoYW5nZWQ6IFN1cnZleU9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2s7XHJcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBrb1ZhbHVlOiBhbnk7XHJcbiAgICBwdWJsaWMga29UZXh0OiBhbnk7XHJcbiAgICBwdWJsaWMgbW9kYWxOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbW9kYWxOYW1lVGFyZ2V0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMga29Jc0RlZmF1bHQ6IGFueTtcclxuICAgIHB1YmxpYyBlZGl0b3I6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZTtcclxuICAgIHB1YmxpYyBlZGl0b3JUeXBlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYmFzZUVkaXRvclR5cGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBjaG9pY2VzOiBBcnJheTxhbnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSwgb25Qcm9wZXJ0eUNoYW5nZWQ6IFN1cnZleU9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsLCBwcm9wZXJ0eUVkaXRvck9wdGlvbnM6IGFueSA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkID0gb25Qcm9wZXJ0eUNoYW5nZWQ7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5wcm9wZXJ0eS5uYW1lO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBwcm9wZXJ0eVtcInJlYWRPbmx5XCJdO1xyXG4gICAgICAgIHRoaXMua29WYWx1ZSA9IGtvLm9ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmNob2ljZXMgPSBwcm9wZXJ0eS5jaG9pY2VzO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmVkaXRvclR5cGUgPSBwcm9wZXJ0eS50eXBlO1xyXG4gICAgICAgIC8vVE9ET1xyXG4gICAgICAgIGlmICh0aGlzLmNob2ljZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvclR5cGUgPSBcImRyb3Bkb3duXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvbkl0ZW1DaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlOiBhbnkpIHsgc2VsZi5vbkFwcGx5RWRpdG9yVmFsdWUobmV3VmFsdWUpOyB9O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLmNyZWF0ZUVkaXRvcih0aGlzLmVkaXRvclR5cGUsIG9uSXRlbUNoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uR2V0TG9jYWxlID0gdGhpcy5kb09uR2V0TG9jYWxlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9wdGlvbnMgPSBwcm9wZXJ0eUVkaXRvck9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JUeXBlID0gdGhpcy5lZGl0b3IuZWRpdG9yVHlwZTtcclxuICAgICAgICB0aGlzLm1vZGFsTmFtZSA9IFwibW9kZWxFZGl0b3JcIiArIHRoaXMuZWRpdG9yVHlwZSArIHRoaXMubmFtZTtcclxuICAgICAgICB0aGlzLm1vZGFsTmFtZVRhcmdldCA9IFwiI1wiICsgdGhpcy5tb2RhbE5hbWU7XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHsgc2VsZi5vbmtvVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb1RleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7IHJldHVybiBzZWxmLmdldFZhbHVlVGV4dChzZWxmLmtvVmFsdWUoKSk7IH0pO1xyXG4gICAgICAgIHRoaXMua29Jc0RlZmF1bHQgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLnByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHNlbGYua29WYWx1ZSgpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvT25HZXRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZih0aGlzLm9iamVjdCAmJiB0aGlzLm9iamVjdFtcImdldExvY2FsZVwiXSkgcmV0dXJuIHRoaXMub2JqZWN0LmdldExvY2FsZSgpO1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvYmplY3QoKTogYW55IHsgcmV0dXJuIHRoaXMub2JqZWN0VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgb2JqZWN0KHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9iamVjdFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKCkge1xyXG4gICAgICAgIHRoaXMuaXNWYWx1ZVVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmtvVmFsdWUodGhpcy5nZXRWYWx1ZSgpKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRPYmplY3QodGhpcy5vYmplY3QpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRpdGxlKGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5lZGl0UHJvcGVydHlcIilbXCJmb3JtYXRcIl0odGhpcy5wcm9wZXJ0eS5uYW1lKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JEYXRhKHRoaXMua29WYWx1ZSgpKTtcclxuICAgICAgICB0aGlzLmlzVmFsdWVVcGRhdGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpc0FwcGx5aW5nTmV3VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgb25BcHBseUVkaXRvclZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzQXBwbHlpbmdOZXdWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLmlzQXBwbHlpbmdOZXdWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbmtvVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNBcHBseWluZ05ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWRpdG9yRGF0YShuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9iamVjdCA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PSBuZXdWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLm9uUHJvcGVydHlDaGFuZ2VkICE9IG51bGwgJiYgIXRoaXMuaXNWYWx1ZVVwZGF0aW5nKSB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkKHRoaXMsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgdXBkYXRlRWRpdG9yRGF0YShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRWYWx1ZSgpOiBhbnkge1xyXG5cdGlmKHRoaXMucHJvcGVydHlbXCJnZXRQcm9wZXJ0eVZhbHVlXCJdKSByZXR1cm4gdGhpcy5wcm9wZXJ0eVtcImdldFByb3BlcnR5VmFsdWVcIl0odGhpcy5vYmplY3QpOyAvL1RPRE8gbWFrZSB0aGUgb25seSBjYWxsXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHkuaGFzVG9Vc2VHZXRWYWx1ZSkgcmV0dXJuIHRoaXMucHJvcGVydHkuZ2V0VmFsdWUodGhpcy5vYmplY3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9iamVjdFt0aGlzLm5hbWVdO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldFZhbHVlVGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZWRpdG9yLmdldFZhbHVlVGV4dCh2YWx1ZSk7IH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9vYmplY3RQcm9wZXJ0eS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQge2VkaXRvckxvY2FsaXphdGlvbn0gZnJvbSBcIi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XHJcbmltcG9ydCB7U3VydmV5SGVscGVyLCBPYmpUeXBlfSBmcm9tIFwiLi9zdXJ2ZXlIZWxwZXJcIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWZXJicyB7XHJcbiAgICBwcml2YXRlIHN1cnZleVZhbHVlOiBTdXJ2ZXkuU3VydmV5O1xyXG4gICAgcHJpdmF0ZSBvYmpWYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjaG9pY2VzQ2xhc3NlczogQXJyYXk8c3RyaW5nPjtcclxuICAgIGtvVmVyYnM6IGFueTtcclxuICAgIGtvSGFzVmVyYnM6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBvbk1vZGlmaWVkQ2FsbGJhY2s6ICgpID0+IGFueSkge1xyXG4gICAgICAgIHRoaXMua29WZXJicyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xyXG4gICAgICAgIHRoaXMua29IYXNWZXJicyA9IGtvLm9ic2VydmFibGUoKTtcclxuICAgICAgICB2YXIgY2xhc3NlcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmdldENoaWxkcmVuQ2xhc3NlcyhcInNlbGVjdGJhc2VcIiwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jaG9pY2VzQ2xhc3NlcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmNob2ljZXNDbGFzc2VzLnB1c2goY2xhc3Nlc1tpXS5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc3VydmV5KHZhbHVlOiBTdXJ2ZXkuU3VydmV5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBvYmooKTogYW55IHsgcmV0dXJuIHRoaXMub2JqVmFsdWUgfVxyXG4gICAgcHVibGljIHNldCBvYmoodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLm9ialZhbHVlID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vYmpWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuYnVpbGRWZXJicygpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBidWlsZFZlcmJzKCkge1xyXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgICAgIHZhciBvYmpUeXBlID0gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUodGhpcy5vYmopO1xyXG4gICAgICAgIGlmIChvYmpUeXBlID09IE9ialR5cGUuUXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gPFN1cnZleS5RdWVzdGlvbkJhc2U+dGhpcy5vYmo7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cnZleS5wYWdlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKG5ldyBTdXJ2ZXlWZXJiQ2hhbmdlUGFnZUl0ZW0odGhpcy5zdXJ2ZXksIHF1ZXN0aW9uLCB0aGlzLm9uTW9kaWZpZWRDYWxsYmFjaykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNob2ljZXNDbGFzc2VzLmluZGV4T2YocXVlc3Rpb24uZ2V0VHlwZSgpKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKG5ldyBTdXJ2ZXlWZXJiQ2hhbmdlVHlwZUl0ZW0odGhpcy5zdXJ2ZXksIHF1ZXN0aW9uLCB0aGlzLm9uTW9kaWZpZWRDYWxsYmFjaykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua29WZXJicyhhcnJheSk7XHJcbiAgICAgICAgdGhpcy5rb0hhc1ZlcmJzKGFycmF5Lmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWZXJiSXRlbSB7XHJcbiAgICBrb0l0ZW1zOiBhbnk7XHJcbiAgICBrb1NlbGVjdGVkSXRlbTogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHN1cnZleTogU3VydmV5LlN1cnZleSwgcHVibGljIHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlLCBwdWJsaWMgb25Nb2RpZmllZENhbGxiYWNrOiAoKSA9PiBhbnkpIHtcclxuICAgICAgICB0aGlzLmtvSXRlbXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcclxuICAgICAgICB0aGlzLmtvU2VsZWN0ZWRJdGVtID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7IHJldHVybiBcIlwiOyB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFN1cnZleVZlcmJDaGFuZ2VUeXBlSXRlbSBleHRlbmRzIFN1cnZleVZlcmJJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXksIHB1YmxpYyBxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSwgcHVibGljIG9uTW9kaWZpZWRDYWxsYmFjazogKCkgPT4gYW55KSB7XHJcbiAgICAgICAgc3VwZXIoc3VydmV5LCBxdWVzdGlvbiwgb25Nb2RpZmllZENhbGxiYWNrKTtcclxuICAgICAgICB2YXIgY2xhc3NlcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmdldENoaWxkcmVuQ2xhc3NlcyhcInNlbGVjdGJhc2VcIiwgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycmF5LnB1c2goeyB2YWx1ZTogY2xhc3Nlc1tpXS5uYW1lLCB0ZXh0OiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicXQuXCIgKyBjbGFzc2VzW2ldLm5hbWUpIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtvSXRlbXMoYXJyYXkpO1xyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZEl0ZW0ocXVlc3Rpb24uZ2V0VHlwZSgpKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkSXRlbS5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IHNlbGYuY2hhbmdlVHlwZShuZXdWYWx1ZSk7IH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7IHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudmVyYkNoYW5nZVR5cGVcIik7IH1cclxuICAgIHByaXZhdGUgY2hhbmdlVHlwZShxdWVzdGlvblR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChxdWVzdGlvblR5cGUgPT0gdGhpcy5xdWVzdGlvbi5nZXRUeXBlKCkpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeVF1ZXN0aW9uKHRoaXMucXVlc3Rpb24pO1xyXG4gICAgICAgIHZhciBpbmRleCA9IHBhZ2UucXVlc3Rpb25zLmluZGV4T2YodGhpcy5xdWVzdGlvbik7XHJcbiAgICAgICAgdmFyIG5ld1F1ZXN0aW9uID0gU3VydmV5LlF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGUsIHRoaXMucXVlc3Rpb24ubmFtZSk7XHJcbiAgICAgICAgdmFyIGpzb25PYmogPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKTtcclxuICAgICAgICB2YXIganNvbiA9IGpzb25PYmoudG9Kc29uT2JqZWN0KHRoaXMucXVlc3Rpb24pO1xyXG4gICAgICAgIGpzb25PYmoudG9PYmplY3QoanNvbiwgbmV3UXVlc3Rpb24pO1xyXG4gICAgICAgIHBhZ2UucmVtb3ZlUXVlc3Rpb24odGhpcy5xdWVzdGlvbik7XHJcbiAgICAgICAgcGFnZS5hZGRRdWVzdGlvbihuZXdRdWVzdGlvbiwgaW5kZXgpO1xyXG4gICAgICAgIGlmICh0aGlzLm9uTW9kaWZpZWRDYWxsYmFjaykgdGhpcy5vbk1vZGlmaWVkQ2FsbGJhY2soKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5VmVyYkNoYW5nZVBhZ2VJdGVtIGV4dGVuZHMgU3VydmV5VmVyYkl0ZW0ge1xyXG4gICAgcHJpdmF0ZSBwcmV2UGFnZTogU3VydmV5LlBhZ2U7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5LCBwdWJsaWMgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UsIHB1YmxpYyBvbk1vZGlmaWVkQ2FsbGJhY2s6ICgpID0+IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHN1cnZleSwgcXVlc3Rpb24sIG9uTW9kaWZpZWRDYWxsYmFjayk7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleS5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LnBhZ2VzW2ldO1xyXG4gICAgICAgICAgICBhcnJheS5wdXNoKHsgdmFsdWU6IHBhZ2UsIHRleHQ6IFN1cnZleUhlbHBlci5nZXRPYmplY3ROYW1lKHBhZ2UpIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtvSXRlbXMoYXJyYXkpO1xyXG4gICAgICAgIHRoaXMucHJldlBhZ2UgPSA8U3VydmV5LlBhZ2U+dGhpcy5zdXJ2ZXkuZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZEl0ZW0odGhpcy5wcmV2UGFnZSk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZEl0ZW0uc3Vic2NyaWJlKGZ1bmN0aW9uIChuZXdWYWx1ZSkgeyBzZWxmLmNoYW5nZVBhZ2UobmV3VmFsdWUpOyB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnZlcmJDaGFuZ2VQYWdlXCIpOyB9XHJcbiAgICBwcml2YXRlIGNoYW5nZVBhZ2UobmV3UGFnZTogU3VydmV5LlBhZ2UpIHtcclxuICAgICAgICBpZiAobmV3UGFnZSA9PSBudWxsIHx8IG5ld1BhZ2UgPT0gdGhpcy5wcmV2UGFnZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldlBhZ2UucmVtb3ZlUXVlc3Rpb24odGhpcy5xdWVzdGlvbik7XHJcbiAgICAgICAgbmV3UGFnZS5hZGRRdWVzdGlvbih0aGlzLnF1ZXN0aW9uKTtcclxuICAgICAgICBpZiAodGhpcy5vbk1vZGlmaWVkQ2FsbGJhY2spIHRoaXMub25Nb2RpZmllZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvb2JqZWN0VmVyYnMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlIZWxwZXJ9IGZyb20gXCIuL3N1cnZleUhlbHBlclwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBTdXJ2ZXlBZGROZXdQYWdlQ2FsbGJhY2sgPSAoKSA9PiB2b2lkO1xyXG5leHBvcnQgZGVjbGFyZSB0eXBlIFN1cnZleVNlbGVjdFBhZ2VDYWxsYmFjayA9IChwYWdlOiBTdXJ2ZXkuUGFnZSkgPT4gdm9pZDtcclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBTdXJ2ZXlNb3ZlUGFnZUNhbGxiYWNrID0gKGluZGV4RnJvbTogbnVtYmVyLCBpbmRleFRvOiBudW1iZXIpID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZXNFZGl0b3Ige1xyXG4gICAgc3VydmV5VmFsdWU6IFN1cnZleS5TdXJ2ZXk7XHJcbiAgICBrb1BhZ2VzOiBhbnk7XHJcbiAgICBrb0lzVmFsaWQ6IGFueTtcclxuICAgIHNlbGVjdFBhZ2VDbGljazogYW55O1xyXG4gICAgb25BZGROZXdQYWdlQ2FsbGJhY2s6IFN1cnZleUFkZE5ld1BhZ2VDYWxsYmFjaztcclxuICAgIG9uU2VsZWN0UGFnZUNhbGxiYWNrOiBTdXJ2ZXlTZWxlY3RQYWdlQ2FsbGJhY2s7XHJcbiAgICBvbkRlbGV0ZVBhZ2VDYWxsYmFjazogU3VydmV5U2VsZWN0UGFnZUNhbGxiYWNrO1xyXG4gICAgb25Nb3ZlUGFnZUNhbGxiYWNrOiBTdXJ2ZXlNb3ZlUGFnZUNhbGxiYWNrO1xyXG4gICAgZHJhZ2dpbmdQYWdlOiBhbnkgPSBudWxsO1xyXG4gICAgZHJhZ1N0YXJ0OiBhbnk7IGRyYWdPdmVyOiBhbnk7IGRyYWdFbmQ6IGFueTsgZHJhZ0Ryb3A6IGFueTsga2V5RG93bjogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9uQWRkTmV3UGFnZUNhbGxiYWNrOiBTdXJ2ZXlBZGROZXdQYWdlQ2FsbGJhY2sgPSBudWxsLCBvblNlbGVjdFBhZ2VDYWxsYmFjazogU3VydmV5U2VsZWN0UGFnZUNhbGxiYWNrID0gbnVsbCxcclxuICAgICAgICAgICAgICAgIG9uTW92ZVBhZ2VDYWxsYmFjazogU3VydmV5TW92ZVBhZ2VDYWxsYmFjayA9IG51bGwsIG9uRGVsZXRlUGFnZUNhbGxiYWNrOiBTdXJ2ZXlTZWxlY3RQYWdlQ2FsbGJhY2sgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5rb1BhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5rb0lzVmFsaWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm9uQWRkTmV3UGFnZUNhbGxiYWNrID0gb25BZGROZXdQYWdlQ2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdFBhZ2VDYWxsYmFjayA9IG9uU2VsZWN0UGFnZUNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMub25Nb3ZlUGFnZUNhbGxiYWNrID0gb25Nb3ZlUGFnZUNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMub25EZWxldGVQYWdlQ2FsbGJhY2sgPSBvbkRlbGV0ZVBhZ2VDYWxsYmFjaztcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RQYWdlQ2xpY2sgPSBmdW5jdGlvbihwYWdlSXRlbSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5vblNlbGVjdFBhZ2VDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vblNlbGVjdFBhZ2VDYWxsYmFjayhwYWdlSXRlbS5wYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5rZXlEb3duID0gZnVuY3Rpb24gKGVsOiBhbnksIGU6IEtleWJvYXJkRXZlbnQpIHsgc2VsZi5vbktleURvd24oZWwsIGUpOyB9XHJcbiAgICAgICAgdGhpcy5kcmFnU3RhcnQgPSBmdW5jdGlvbiAoZWw6IGFueSkgeyBzZWxmLmRyYWdnaW5nUGFnZSA9IGVsOyB9O1xyXG4gICAgICAgIHRoaXMuZHJhZ092ZXIgPSBmdW5jdGlvbiAoZWw6IGFueSkgeyAgfTtcclxuICAgICAgICB0aGlzLmRyYWdFbmQgPSBmdW5jdGlvbiAoKSB7IHNlbGYuZHJhZ2dpbmdQYWdlID0gbnVsbDsgfTtcclxuICAgICAgICB0aGlzLmRyYWdEcm9wID0gZnVuY3Rpb24gKGVsOiBhbnkpIHsgc2VsZi5tb3ZlRHJhZ2dpbmdQYWdlVG8oZWwpOyB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5LlN1cnZleSB7IHJldHVybiB0aGlzLnN1cnZleVZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHN1cnZleSh2YWx1ZTogU3VydmV5LlN1cnZleSkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmtvSXNWYWxpZCh0aGlzLnN1cnZleVZhbHVlICE9IG51bGwpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGFnZXMoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRTZWxlY3RlZFBhZ2UocGFnZTogU3VydmV5LlBhZ2UpIHtcclxuICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLmtvUGFnZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzW2ldLmtvU2VsZWN0ZWQocGFnZXNbaV0ucGFnZSA9PSBwYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkTmV3UGFnZUNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uQWRkTmV3UGFnZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25BZGROZXdQYWdlQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlUGFnZShwYWdlOiBTdXJ2ZXkuUGFnZSkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SW5kZXhCeVBhZ2UocGFnZSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5rb1BhZ2VzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGNoYW5nZU5hbWUocGFnZTogU3VydmV5LlBhZ2UpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldEluZGV4QnlQYWdlKHBhZ2UpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMua29QYWdlcygpW2luZGV4XS50aXRsZShTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0TmFtZShwYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGdldEluZGV4QnlQYWdlKHBhZ2U6IFN1cnZleS5QYWdlKTogbnVtYmVyIHtcclxuICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLmtvUGFnZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChwYWdlc1tpXS5wYWdlID09IHBhZ2UpIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25LZXlEb3duKGVsOiBhbnksIGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5rb1BhZ2VzKCkubGVuZ3RoIDw9IDEpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLmtvUGFnZXMoKTtcclxuICAgICAgICB2YXIgcGFnZUluZGV4ID0gLTE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocGFnZXNbaV0ucGFnZSAmJiBwYWdlc1tpXS5rb1NlbGVjdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhZ2VJbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDQ2ICYmIHRoaXMub25EZWxldGVQYWdlQ2FsbGJhY2spIHRoaXMub25EZWxldGVQYWdlQ2FsbGJhY2soZWwucGFnZSk7XHJcbiAgICAgICAgaWYgKChlLmtleUNvZGUgPT0gMzcgfHwgZS5rZXlDb2RlID09IDM5KSAmJiB0aGlzLm9uU2VsZWN0UGFnZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmRleCArPSAoZS5rZXlDb2RlID09IDM3ID8gLTEgOiAxKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2VJbmRleCA8IDApIHBhZ2VJbmRleCA9IHBhZ2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGlmIChwYWdlSW5kZXggPj0gcGFnZXMubGVuZ3RoKSBwYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IHBhZ2VzW3BhZ2VJbmRleF0ucGFnZTtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdFBhZ2VDYWxsYmFjayhwYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFBhZ2UocGFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVBhZ2VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleVZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5rb1BhZ2VzKFtdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGFnZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3VydmV5VmFsdWUucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLnN1cnZleVZhbHVlLnBhZ2VzW2ldO1xyXG4gICAgICAgICAgICBwYWdlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBrby5vYnNlcnZhYmxlKFN1cnZleUhlbHBlci5nZXRPYmplY3ROYW1lKHBhZ2UpKSwgcGFnZTogcGFnZSwga29TZWxlY3RlZDoga28ub2JzZXJ2YWJsZShmYWxzZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua29QYWdlcyhwYWdlcyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1vdmVEcmFnZ2luZ1BhZ2VUbyh0b1BhZ2U6IGFueSkge1xyXG4gICAgICAgIGlmICh0b1BhZ2UgPT0gbnVsbCB8fCB0b1BhZ2UgPT0gdGhpcy5kcmFnZ2luZ1BhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ1BhZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyYWdnaW5nUGFnZSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5rb1BhZ2VzKCkuaW5kZXhPZih0aGlzLmRyYWdnaW5nUGFnZSk7XHJcbiAgICAgICAgdmFyIGluZGV4VG8gPSB0aGlzLmtvUGFnZXMoKS5pbmRleE9mKHRvUGFnZSk7XHJcbiAgICAgICAgaWYgKHRoaXMub25Nb3ZlUGFnZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25Nb3ZlUGFnZUNhbGxiYWNrKGluZGV4LCBpbmRleFRvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGFnZXNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yfSBmcm9tIFwiLi9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XHJcbmltcG9ydCB7U3VydmV5UHJvcGVydHlFZGl0b3JCYXNlfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcclxuaW1wb3J0IHtTdXJ2ZXlPYmplY3RFZGl0b3J9IGZyb20gXCIuLi9vYmplY3RFZGl0b3JcIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIHtcclxuICAgIHByaXZhdGUgc2VsZWN0ZWRPYmplY3RFZGl0b3I6IFN1cnZleU9iamVjdEVkaXRvcjtcclxuICAgIHB1YmxpYyBrb1NlbGVjdGVkOiBhbnk7XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlVmFsaWRhdG9yczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3JDbGFzc2VzOiBBcnJheTxTdXJ2ZXkuSnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yID0gbmV3IFN1cnZleU9iamVjdEVkaXRvcigpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3Iub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQob3B0aW9ucy5wcm9wZXJ0eSwgb3B0aW9ucy5vYmplY3QsIG9wdGlvbnMubmV3VmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZCA9IGtvLm9ic2VydmFibGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHsgc2VsZi5zZWxlY3RlZE9iamVjdEVkaXRvci5zZWxlY3RlZE9iamVjdCA9IG5ld1ZhbHVlICE9IG51bGwgPyBuZXdWYWx1ZS52YWxpZGF0b3IgOiBudWxsOyB9KTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRvckNsYXNzZXMgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoXCJzdXJ2ZXl2YWxpZGF0b3JcIiwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVWYWxpZGF0b3JzID0gdGhpcy5nZXRBdmFpbGFibGVWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5vbkRlbGV0ZUNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmtvSXRlbXMucmVtb3ZlKHNlbGYua29TZWxlY3RlZCgpKTsgfTtcclxuICAgICAgICB0aGlzLm9uQWRkQ2xpY2sgPSBmdW5jdGlvbiAodmFsaWRhdG9yVHlwZSkgeyBzZWxmLmFkZEl0ZW0odmFsaWRhdG9yVHlwZSk7IH07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidmFsaWRhdG9yc1wiOyB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5rb1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMua29TZWxlY3RlZCh0aGlzLmtvSXRlbXMoKS5sZW5ndGggPiAwID8gdGhpcy5rb0l0ZW1zKClbMF0gOiBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHtcclxuICAgICAgICB2YXIganNvbk9iaiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpO1xyXG4gICAgICAgIHZhciB2YWxpZGF0b3IgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyhpdGVtLmdldFR5cGUoKSk7XHJcbiAgICAgICAganNvbk9iai50b09iamVjdChpdGVtLCB2YWxpZGF0b3IpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlWYWxpZGF0b3JJdGVtKHZhbGlkYXRvcik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSXRlbUZyb21FZGl0b3JJdGVtKGVkaXRvckl0ZW06IGFueSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gPFN1cnZleVByb3BlcnR5VmFsaWRhdG9ySXRlbT5lZGl0b3JJdGVtO1xyXG4gICAgICAgIHJldHVybiBpdGVtLnZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYWRkSXRlbSh2YWxpZGF0b3JUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgbmV3VmFsaWRhdG9yID0gbmV3IFN1cnZleVByb3BlcnR5VmFsaWRhdG9ySXRlbShTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyh2YWxpZGF0b3JUeXBlKSk7XHJcbiAgICAgICAgdGhpcy5rb0l0ZW1zLnB1c2gobmV3VmFsaWRhdG9yKTtcclxuICAgICAgICB0aGlzLmtvU2VsZWN0ZWQobmV3VmFsaWRhdG9yKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmxlVmFsaWRhdG9ycygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbGlkYXRvckNsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZGF0b3JDbGFzc2VzW2ldLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvblByb3BlcnR5VmFsdWVDaGFuZ2VkKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LCBvYmo6IGFueSwgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtvU2VsZWN0ZWQoKSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkKCkudmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvckl0ZW0ge1xyXG4gICAgcHVibGljIHRleHQ6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWxpZGF0b3I6IFN1cnZleS5TdXJ2ZXlWYWxpZGF0b3IpIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB2YWxpZGF0b3IuZ2V0VHlwZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLnJlZ2lzdGVyRWRpdG9yKFwidmFsaWRhdG9yc1wiLCBmdW5jdGlvbiAoKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHsgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3IoKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRlZmluaXRpb246IGFueSA9IHtcclxuICAgICAgICBcInF1ZXN0aW9uYmFzZVwiIDoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXCJuYW1lXCIsIFwidGl0bGVcIiwge25hbWU6IFwidmlzaWJsZVwiLCBjYXRlZ29yeTogXCJjaGVja3NcIn0sIHtuYW1lOiBcImlzUmVxdWlyZWRcIiwgY2F0ZWdvcnk6IFwiY2hlY2tzXCJ9LCB7bmFtZTogXCJzdGFydFdpdGhOZXdMaW5lXCIsIGNhdGVnb3J5OiBcImNoZWNrc1wifSBdLFxyXG4gICAgICAgICAgICB0YWJzOiBbe25hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMDB9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJjb21tZW50XCI6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wicm93c1wiLCBcInBsYWNlSG9sZGVyXCJdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImZpbGVcIjoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbe25hbWU6IFwic2hvd1ByZXZpZXdcIiwgY2F0ZWdvcnk6IFwiaW1hZ2VDaGVja3NcIn0sIHtuYW1lOiBcInN0b3JlRGF0YUFzVGV4dFwiLCBjYXRlZ29yeTogXCJpbWFnZUNoZWNrc1wifSwgXCJtYXhTaXplXCIsIFwiaW1hZ2VIZWlnaHRcIiwgXCJpbWFnZVdpZHRoXCJdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImh0bWxcIjoge1xyXG4gICAgICAgICAgICB0YWJzOiBbe25hbWU6IFwiaHRtbFwiLCBpbmRleDogMTB9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIjoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXCJjZWxsVHlwZVwiXSxcclxuICAgICAgICAgICAgdGFiczogW3tuYW1lOiBcImNvbHVtbnNcIiwgaW5kZXg6IDEwfSwge25hbWU6IFwicm93c1wiLCBpbmRleDogMTF9LCB7bmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMn1dXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIm1hdHJpeGR5bmFtaWNcIjoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXCJyb3dDb3VudFwiLCBcImFkZFJvd1RleHRcIiwgXCJyZW1vdmVSb3dUZXh0XCJdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIm1hdHJpeFwiOiB7XHJcbiAgICAgICAgICAgIHRhYnM6IFt7bmFtZTogXCJjb2x1bW5zXCIsIGluZGV4OiAxMH0sIHtuYW1lOiBcInJvd3NcIiwgaW5kZXg6IDExfV1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwibXVsdGlwbGV0ZXh0XCI6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wiY29sQ291bnRcIl0sXHJcbiAgICAgICAgICAgIHRhYnM6IFt7bmFtZTogXCJpdGVtc1wiLCBpbmRleDogMTB9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJyYXRpbmdcIiA6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wibWluUmF0ZURlc2NyaXB0aW9uXCIsIFwibWF4UmF0ZURlc2NyaXB0aW9uXCJdLFxyXG4gICAgICAgICAgICB0YWJzOiBbe25hbWU6IFwicmF0ZVZhbHVlc1wiLCBpbmRleDogMTB9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJzZWxlY3RiYXNlXCIgOiB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcImhhc090aGVyXCIsIFwiY2hvaWNlc09yZGVyXCIsIFwiY29sQ291bnRcIl0sXHJcbiAgICAgICAgICAgIHRhYnM6IFt7bmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMH0sIHtuYW1lOiBcImNob2ljZXNCeVVybFwiLCBpbmRleDogMTF9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJkcm9wZG93blwiOiB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcIm9wdGlvbnNDYXB0aW9uXCJdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInRleHRcIiA6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wiaW5wdXRUeXBlXCIsIFwicGxhY2VIb2xkZXJcIl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AY2hlY2tib3hcIiA6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wiaGFzT3RoZXJcIiwgXCJjaG9pY2VzT3JkZXJcIiwgXCJjb2xDb3VudFwiXSxcclxuICAgICAgICAgICAgdGFiczogW3tuYW1lOiBcImNob2ljZXNcIiwgaW5kZXg6IDEwfSwge25hbWU6IFwiY2hvaWNlc0J5VXJsXCIsIGluZGV4OiAxMX1dXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQHJhZGlvZ3JvdXBcIiA6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wiaGFzT3RoZXJcIiwgXCJjaG9pY2VzT3JkZXJcIiwgXCJjb2xDb3VudFwiXSxcclxuICAgICAgICAgICAgdGFiczogW3tuYW1lOiBcImNob2ljZXNcIiwgaW5kZXg6IDEwfSwge25hbWU6IFwiY2hvaWNlc0J5VXJsXCIsIGluZGV4OiAxMX1dXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQGRyb3Bkb3duXCIgOiB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcImhhc090aGVyXCIsIFwiY2hvaWNlc09yZGVyXCIsIFwib3B0aW9uc0NhcHRpb25cIl0sXHJcbiAgICAgICAgICAgIHRhYnM6IFt7bmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMH0sIHtuYW1lOiBcImNob2ljZXNCeVVybFwiLCBpbmRleDogMTF9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkB0ZXh0XCIgOiB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcImlucHV0VHlwZVwiLCBcInBsYWNlSG9sZGVyXCJdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQGNvbW1lbnRcIiA6IHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwicGFuZWxcIjoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXCJuYW1lXCIsIFwidGl0bGVcIiwge25hbWU6IFwidmlzaWJsZVwiLCBjYXRlZ29yeTogXCJjaGVja3NcIn0gXSxcclxuICAgICAgICAgICAgdGFiczogW3tuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTAwfV1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xyXG4gICAgICAgIHZhciBhbGxEZWZpbml0aW9ucyA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IodmFyIGkgPSBhbGxEZWZpbml0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGkgLS0pIHtcclxuICAgICAgICAgICAgdmFyIGRlZiA9IGFsbERlZmluaXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZihkZWYucHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IGRlZi5wcm9wZXJ0aWVzLmxlbmd0aDsgaiArKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChkZWYucHJvcGVydGllc1tqXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFRhYnMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICB2YXIgdGFicyA9IFtdO1xyXG4gICAgICAgIHZhciBhbGxEZWZpbml0aW9ucyA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IodmFyIGkgPSBhbGxEZWZpbml0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGkgLS0pIHtcclxuICAgICAgICAgICAgdmFyIGRlZiA9IGFsbERlZmluaXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZihkZWYudGFicykge1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IGRlZi50YWJzLmxlbmd0aDsgaiArKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYnMucHVzaChkZWYudGFic1tqXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGFicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmluZGV4IDwgYi5pbmRleCA/IC0xIDogKGEuaW5kZXggPiBiLmluZGV4ID8gMSA6IDApOyB9KTtcclxuICAgICAgICByZXR1cm4gdGFicztcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIDogQXJyYXk8YW55PiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmKGNsYXNzTmFtZS5pbmRleE9mKCdAJykgPiAtMSAmJiBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZGVmaW5pdGlvbltjbGFzc05hbWVdKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5kZWZpbml0aW9uW2NsYXNzTmFtZV0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXRhQ2xhc3MgPSA8U3VydmV5Lkpzb25NZXRhZGF0YUNsYXNzPlN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhW1wiZmluZENsYXNzXCJdKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghbWV0YUNsYXNzKSBicmVhaztcclxuICAgICAgICAgICAgaWYoU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmRlZmluaXRpb25bbWV0YUNsYXNzLm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZGVmaW5pdGlvblttZXRhQ2xhc3MubmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IG1ldGFDbGFzcy5wYXJlbnROYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQge2VkaXRvckxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JHZW5lcmFsUHJvcGVydHkge1xyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGVkaXRUeXBlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgY2hvaWNlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAga29WYWx1ZTogYW55OyBrb0Vycm9yVGV4dDogYW55OyBrb0hhc0Vycm9yOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSwgcHVibGljIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LCBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gcHJvcGVydHkubmFtZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gcHJvcGVydHlbXCJyZWFkT25seVwiXTtcclxuICAgICAgICB0aGlzLmVkaXRUeXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgaWYocHJvcGVydHkudHlwZSA9PSBcInRleHRcIikgdGhpcy5lZGl0VHlwZSA9IFwidGV4dGFyZWFcIjtcclxuICAgICAgICBpZihwcm9wZXJ0eS50eXBlID09IFwiYm9vbGVhblwiKSB0aGlzLmVkaXRUeXBlID0gXCJjaGVja1wiO1xyXG4gICAgICAgIGlmKHByb3BlcnR5LmNob2ljZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9pY2VzID0gcHJvcGVydHkuY2hvaWNlcztcclxuICAgICAgICAgICAgdGhpcy5lZGl0VHlwZSA9IFwiZHJvcGRvd25cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMua29FcnJvclRleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xyXG4gICAgICAgIHRoaXMua29IYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuXCIgKyB0aGlzLm5hbWUpO1xyXG4gICAgICAgIGlmKCF0aGlzLnRpdGxlKSB0aGlzLnRpdGxlID0gdGhpcy5uYW1lO1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaXNFcnJvciA9IHRoaXMuaXNSZXF1aXJlZCAmJiAodGhpcy5rb1ZhbHVlKCkgIT09IGZhbHNlKSAmJiAhdGhpcy5rb1ZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5rb0Vycm9yVGV4dChpc0Vycm9yID8gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnByb3BlcnR5SXNFbXB0eVwiKTogXCJcIik7XHJcbiAgICAgICAgdGhpcy5rb0hhc0Vycm9yKGlzRXJyb3IpO1xyXG4gICAgICAgIHJldHVybiBpc0Vycm9yO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFwcGx5KCkge1xyXG4gICAgICAgIHRoaXMub2JqW3RoaXMubmFtZV0gPSB0aGlzLmtvVmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB0aGlzLmtvVmFsdWUodGhpcy5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VmFsdWUoKTogYW55IHtcclxuXHRpZih0aGlzLnByb3BlcnR5W1wiZ2V0UHJvcGVydHlWYWx1ZVwiXSkgcmV0dXJuIHRoaXMucHJvcGVydHlbXCJnZXRQcm9wZXJ0eVZhbHVlXCJdKHRoaXMub2JqKTsgLy9UT0RPIG1ha2UgdGhlIG9ubHkgY2FsbFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnR5Lmhhc1RvVXNlR2V0VmFsdWUpIHJldHVybiB0aGlzLnByb3BlcnR5LmdldFZhbHVlKHRoaXMub2JqKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmpbdGhpcy5uYW1lXTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxSb3cge1xyXG4gICAgcHVibGljIGNhdGVnb3J5OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcHJvcGVydGllczogQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JHZW5lcmFsUHJvcGVydHk+ID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSwgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksIGlzUHJvcGVydHlSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShwcm9wZXJ0eSwgaXNQcm9wZXJ0eVJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRQcm9wZXJ0eShwcm9wZXJ0eTogYW55LCBpc1Byb3BlcnR5UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxQcm9wZXJ0eSh0aGlzLm9iaiwgcHJvcGVydHksIGlzUHJvcGVydHlSZXF1aXJlZCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9yKCkgOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlzRXJyb3IgPSB0aGlzLnByb3BlcnRpZXNbaV0uaGFzRXJyb3IoKSB8fCBpc0Vycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFcnJvcjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWRpdG9yR2VuZXJhbFByb3BlcnRpZXMge1xyXG4gICAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBBcnJheTxTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5PjtcclxuICAgIHByaXZhdGUgb25DYW5TaG93UHJvcGVydHlDYWxsYmFjazogKG9iamVjdDogYW55LCBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkgPT4gYm9vbGVhbjtcclxuICAgIHB1YmxpYyByb3dzOiBBcnJheTxTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxSb3c+ID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSwgcHJvcGVydGllczogQXJyYXk8YW55Piwgb25DYW5TaG93UHJvcGVydHlDYWxsYmFjazogKG9iamVjdDogYW55LCBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkgPT4gYm9vbGVhbiA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2sgPSBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXModGhpcy5vYmouZ2V0VHlwZSgpKTsgXHJcbiAgICAgICAgdGhpcy5idWlsZFJvd3MocHJvcGVydGllcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXBwbHkoKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseU9yUmVzZXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseU9yUmVzZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9yKCkgOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlzRXJyb3IgPSB0aGlzLnJvd3NbaV0uaGFzRXJyb3IoKSB8fCBpc0Vycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFcnJvcjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBhcHBseU9yUmVzZXQoaXNBcHBseTogYm9vbGVhbikge1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCB0aGlzLnJvd3NbaV0ucHJvcGVydGllcy5sZW5ndGg7IGogKyspIHtcclxuICAgICAgICAgICAgICAgIGlmKGlzQXBwbHkpIHRoaXMucm93c1tpXS5wcm9wZXJ0aWVzW2pdLmFwcGx5KCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMucm93c1tpXS5wcm9wZXJ0aWVzW2pdLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgYnVpbGRSb3dzKHByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgcmVxdWlyZWRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKHRoaXMub2JqLmdldFR5cGUoKSk7XHJcbiAgICAgICAgaWYoIXJlcXVpcmVkUHJvcGVydGllcykgcmVxdWlyZWRQcm9wZXJ0aWVzID0gW107XHJcbiAgICAgICAgZm9yKHZhciBpID0gMCA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZShwcm9wZXJ0aWVzW2ldKTtcclxuICAgICAgICAgICAgdmFyIGpzb25Qcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHkobmFtZSk7XHJcbiAgICAgICAgICAgIGlmKCFqc29uUHJvcGVydHkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB2YXIgaXNQcm9wZXJ0eVJlcXVpcmVkOiBib29sZWFuID0gcmVxdWlyZWRQcm9wZXJ0aWVzLmluZGV4T2YobmFtZSkgPiAtMTtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93QnlDYXRlZ29yeShwcm9wZXJ0aWVzW2ldLmNhdGVnb3J5KTtcclxuICAgICAgICAgICAgaWYocm93KSByb3cuYWRkUHJvcGVydHkoanNvblByb3BlcnR5LCBpc1Byb3BlcnR5UmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxSb3codGhpcy5vYmosIGpzb25Qcm9wZXJ0eSwgaXNQcm9wZXJ0eVJlcXVpcmVkKTtcclxuICAgICAgICAgICAgICAgIGlmKHByb3BlcnRpZXNbaV0uY2F0ZWdvcnkpIHJvdy5jYXRlZ29yeSA9IHByb3BlcnRpZXNbaV0uY2F0ZWdvcnk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHByb3BlcnRpZXNbaV0udGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIHJvdy5wcm9wZXJ0aWVzW3Jvdy5wcm9wZXJ0aWVzLmxlbmd0aCAtIDFdLnRpdGxlID0gcHJvcGVydGllc1tpXS50aXRsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgfVxyXG4gICBwcml2YXRlIGdldE5hbWUocHJvcDogYW55KTogc3RyaW5nIHtcclxuICAgICAgIGlmKCFwcm9wKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZih0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHByb3A7XHJcbiAgICAgICAgaWYocHJvcC5uYW1lKSByZXR1cm4gcHJvcC5uYW1lO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICB9XHJcbiAgIHByaXZhdGUgZ2V0Um93QnlDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKSB7XHJcbiAgICAgICBpZighY2F0ZWdvcnkpIHJldHVybiBudWxsO1xyXG4gICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICBpZih0aGlzLnJvd3NbaV0uY2F0ZWdvcnkgPT0gY2F0ZWdvcnkpIHJldHVybiB0aGlzLnJvd3NbaV07XHJcbiAgICAgICB9XHJcbiAgICAgICByZXR1cm4gbnVsbDtcclxuICAgfVxyXG4gICBwcml2YXRlIGdldFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSB7XHJcbiAgICAgICBpZighcHJvcGVydHlOYW1lKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgcHJvcGVydHkgPSBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy9UT0RPIGNvZGUgZHVwbGljYXRpb24uIFRoaXMgY29kZSBpcyBpbiAzIHBsYWNlcyBhbHJlYWR5LCBkbyByZWZhY3RvcmluZy5cclxuICAgICAgICBpZihwcm9wZXJ0eSAmJiBwcm9wZXJ0eVtcInZpc2libGVcIl0gPT09IGZhbHNlKSBwcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5ICYmIHRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFjayh0aGlzLm9iaiwgcHJvcGVydHkpKSBwcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcclxuICAgIH0gXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvckdlbmVyYWxQcm9wZXJ0aWVzLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcbmltcG9ydCB7ZWRpdG9yTG9jYWxpemF0aW9ufSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXN0aW9uVG9vbGJveEl0ZW0ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbk5hbWU6IHN0cmluZztcclxuICAgIGpzb246IGFueTtcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBpc0NvcGllZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVG9vbGJveCB7XHJcbiAgICBwdWJsaWMgb3JkZXJlZFF1ZXN0aW9ucyA9IFtcInRleHRcIiwgXCJjaGVja2JveFwiLCBcInJhZGlvZ3JvdXBcIiwgXCJkcm9wZG93blwiLCBcImNvbW1lbnRcIiwgXCJyYXRpbmdcIiwgXCJodG1sXCJdO1xyXG4gICAgcHVibGljIGNvcGllZEl0ZW1NYXhDb3VudDogbnVtYmVyID0gMztcclxuICAgIHByaXZhdGUgaXRlbXNWYWx1ZTogQXJyYXk8SVF1ZXN0aW9uVG9vbGJveEl0ZW0+ID0gW107XHJcblxyXG4gICAga29JdGVtczogYW55O1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcihzdXBwb3J0ZWRRdWVzdGlvbnM6IEFycmF5PHN0cmluZz4gPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5rb0l0ZW1zID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0SXRlbXMoc3VwcG9ydGVkUXVlc3Rpb25zKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQganNvblRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXRlbXNWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGpzb25UZXh0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLml0ZW1zVmFsdWUgPSAodmFsdWUpID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiBbXTtcclxuICAgICAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvcGllZEpzb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuY29waWVkSXRlbXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjb3BpZWRKc29uVGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG5ld0l0ZW1zID0gKHZhbHVlKSA/IEpTT04ucGFyc2UodmFsdWUpIDogW107XHJcbiAgICAgICAgdGhpcy5jbGVhckNvcGllZEl0ZW1zKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBuZXdJdGVtc1tpXS5pc0NvcGllZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbShuZXdJdGVtc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBpdGVtcygpOiBBcnJheTxJUXVlc3Rpb25Ub29sYm94SXRlbT4geyByZXR1cm4gdGhpcy5pdGVtc1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGNvcGllZEl0ZW1zKCk6IEFycmF5PElRdWVzdGlvblRvb2xib3hJdGVtPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtc1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zVmFsdWVbaV0uaXNDb3BpZWQpIHJlc3VsdC5wdXNoKHRoaXMuaXRlbXNWYWx1ZVtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkSXRlbXMoaXRlbXM6IEFycmF5PElRdWVzdGlvblRvb2xib3hJdGVtPiwgY2xlYXJBbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChjbGVhckFsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFySXRlbXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1zQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZENvcGllZEl0ZW0ocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHsgbmFtZTogcXVlc3Rpb24ubmFtZSwgdGl0bGU6IHF1ZXN0aW9uLm5hbWUsIGlzQ29waWVkOiB0cnVlLCBpY29uTmFtZTogXCJpY29uLWRlZmF1bHRcIiwganNvbjogdGhpcy5nZXRRdWVzdGlvbkpTT04ocXVlc3Rpb24pIH07XHJcbiAgICAgICAgaWYgKHRoaXMucmVwbGFjZUl0ZW0oaXRlbSkpIHJldHVybjtcclxuICAgICAgICB2YXIgY29waWVkID0gdGhpcy5jb3BpZWRJdGVtcztcclxuICAgICAgICBpZiAodGhpcy5jb3BpZWRJdGVtTWF4Q291bnQgPiAwICYmIGNvcGllZC5sZW5ndGggPT0gdGhpcy5jb3BpZWRJdGVtTWF4Q291bnQpIHRoaXMucmVtb3ZlSXRlbShjb3BpZWRbdGhpcy5jb3BpZWRJdGVtTWF4Q291bnQgLSAxXS5uYW1lKTtcclxuICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYWRkSXRlbShpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXBsYWNlSXRlbShpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXhPZihpdGVtLm5hbWUpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLml0ZW1zVmFsdWVbaW5kZXhdID0gaXRlbTtcclxuICAgICAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4T2YobmFtZSk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhckl0ZW1zKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZSA9IFtdO1xyXG4gICAgICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhckNvcGllZEl0ZW1zKCkge1xyXG4gICAgICAgIHZhciByZW1vdmVkSXRlbXMgPSB0aGlzLmNvcGllZEl0ZW1zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVtb3ZlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShyZW1vdmVkSXRlbXNbaV0ubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uSXRlbXNDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMua29JdGVtcyh0aGlzLml0ZW1zVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpbmRleE9mKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtc1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zVmFsdWVbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0SXRlbXMoc3VwcG9ydGVkUXVlc3Rpb25zOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25UeXBlcyhzdXBwb3J0ZWRRdWVzdGlvbnMpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gcXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBTdXJ2ZXkuRWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChuYW1lLCBcInExXCIpO1xyXG4gICAgICAgICAgICBpZighcXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGpzb24gPSB0aGlzLmdldFF1ZXN0aW9uSlNPTihxdWVzdGlvbik7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0geyBuYW1lOiBuYW1lLCBpY29uTmFtZTogJ2ljb24tJyArIG5hbWUsIHRpdGxlOiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKCdxdC4nICsgbmFtZSksIGpzb246IGpzb24sIGlzQ29waWVkOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zVmFsdWUucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1zQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRRdWVzdGlvbkpTT04ocXVlc3Rpb246IGFueSk6IGFueSB7XHJcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3QocXVlc3Rpb24pO1xyXG4gICAgICAgIGpzb24udHlwZSA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcclxuICAgICAgICByZXR1cm4ganNvbjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0UXVlc3Rpb25UeXBlcyhzdXBwb3J0ZWRRdWVzdGlvbnM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgdmFyIGFsbFR5cGVzID0gU3VydmV5LkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmdldEFsbFR5cGVzKCk7XHJcbiAgICAgICAgaWYgKCFzdXBwb3J0ZWRRdWVzdGlvbnMgfHwgc3VwcG9ydGVkUXVlc3Rpb25zLmxlbmd0aCA9PSAwKSBzdXBwb3J0ZWRRdWVzdGlvbnMgPSBhbGxUeXBlcztcclxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yZGVyZWRRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLm9yZGVyZWRRdWVzdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRRdWVzdGlvbnMuaW5kZXhPZihuYW1lKSA+IC0xICYmIGFsbFR5cGVzLmluZGV4T2YobmFtZSkgPiAtMSkgcXVlc3Rpb25zLnB1c2gobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VwcG9ydGVkUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gc3VwcG9ydGVkUXVlc3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zLmluZGV4T2Yoc3VwcG9ydGVkUXVlc3Rpb25zW2ldKSA8IDAgJiYgYWxsVHlwZXMuaW5kZXhPZihuYW1lKSA+IC0xKSBxdWVzdGlvbnMucHVzaChuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9ucztcclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25Ub29sYm94LnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5SlNPTjV9IGZyb20gXCIuL2pzb241XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5RW1iZWRpbmdXaW5kb3cge1xyXG4gICAgcHJpdmF0ZSBqc29uVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgc3VydmV5RW1iZWRpbmdIZWFkOiBBY2VBamF4LkVkaXRvcjtcclxuICAgIHByaXZhdGUgc3VydmV5RW1iZWRpbmdKYXZhOiBBY2VBamF4LkVkaXRvcjtcclxuICAgIHByaXZhdGUgc3VydmV5RW1iZWRpbmdCb2R5OiBBY2VBamF4LkVkaXRvcjtcclxuICAgIGtvSGVhZFRleHQ6IGFueTtcclxuICAgIGtvQm9keVRleHQ6IGFueTtcclxuICAgIGtvSmF2YVRleHQ6IGFueTtcclxuICAgIHB1YmxpYyBzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBzdXJ2ZXlQb3N0SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVWYWxpZEpTT046IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzdXJ2ZXlKU1ZlcnNpb246IHN0cmluZyA9IFN1cnZleS5WZXJzaW9uO1xyXG4gICAgcHVibGljIHN1cnZleUNETlBhdGg6IHN0cmluZyA9IFwiaHR0cHM6Ly9zdXJ2ZXlqcy5henVyZWVkZ2UubmV0L1wiO1xyXG4gICAga29TaG93QXNXaW5kb3c6IGFueTtcclxuICAgIGtvU2NyaXB0VXNpbmc6IGFueTtcclxuICAgIGtvSGFzSWRzOiBhbnk7XHJcbiAgICBrb0xvYWRTdXJ2ZXk6IGFueTtcclxuICAgIGtvTGlicmFyeVZlcnNpb246IGFueTtcclxuICAgIGtvVmlzaWJsZUh0bWw6IGFueTtcclxuICAgIHByaXZhdGUgcGxhdGZvcm1TdXJ2ZXlKU1ByZWZpeCA9IHtcclxuICAgICAgICBcImFuZ3VsYXJcIjogXCJhbmd1bGFyXCIsXHJcbiAgICAgICAgXCJqcXVlcnlcIjogXCJqcXVlcnlcIixcclxuICAgICAgICBcImtub2Nrb3V0XCI6IFwia29cIixcclxuICAgICAgICBcInJlYWN0XCI6IFwicmVhY3RcIixcclxuICAgICAgICBcInZ1ZVwiOiBcInZ1ZVwiXHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHBsYXRmb3JtSlNvblBhZ2UgPSB7XHJcbiAgICAgICAgXCJhbmd1bGFyXCI6IFwiQENvbXBvbmVudCh7XFxuICBzZWxlY3RvcjogJ25nLWFwcCcsXFxuICAgICAgICB0ZW1wbGF0ZTogXFxuICAgICAgICA8ZGl2IGlkPSdzdXJ2ZXlFbGVtZW50Jz48L2Rpdj5cXFwiLFxcbn0pXFxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XFxuICAgIG5nT25Jbml0KCkge1xcbiAgICAgICAgdmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTik7XFxuICAgICAgICBzdXJ2ZXkub25Db21wbGV0ZS5hZGQoc2VuZERhdGFUb1NlcnZlcik7XFxuICAgICAgIFN1cnZleS5TdXJ2ZXlORy5yZW5kZXIoXFxcInN1cnZleUVsZW1lbnRcXFwiLCB7IG1vZGVsOiBzdXJ2ZXkgfSk7XFxuICAgIH1cXG59XCIsXHJcbiAgICAgICAgXCJqcXVlcnlcIjogXCJ2YXIgc3VydmV5ID0gbmV3IFN1cnZleS5Nb2RlbChzdXJ2ZXlKU09OKTtcXG4kKFxcXCIjc3VydmV5Q29udGFpbmVyXFxcIikuU3VydmV5KHtcXG4gICAgbW9kZWw6IHN1cnZleSxcXG4gICAgb25Db21wbGV0ZTogc2VuZERhdGFUb1NlcnZlclxcbn0pO1wiLFxyXG4gICAgICAgIFwia25vY2tvdXRcIjogXCJ2YXIgc3VydmV5ID0gbmV3IFN1cnZleS5Nb2RlbChzdXJ2ZXlKU09OLCBcXFwic3VydmV5Q29udGFpbmVyXFxcIik7XFxuc3VydmV5Lm9uQ29tcGxldGUuYWRkKHNlbmREYXRhVG9TZXJ2ZXIpO1wiLFxyXG4gICAgICAgIFwicmVhY3RcIjogXCJSZWFjdERPTS5yZW5kZXIoXFxuICAgIDxTdXJ2ZXkuU3VydmV5IGpzb249eyBzdXJ2ZXlKU09OIH0gb25Db21wbGV0ZT17IHNlbmREYXRhVG9TZXJ2ZXIgfSAvPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXFxcInN1cnZleUNvbnRhaW5lclxcXCIpKTtcIixcclxuICAgICAgICBcInZ1ZVwiOiBcInZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbm5ldyBWdWUoeyBlbDogJyNzdXJ2ZXlDb250YWluZXInLCBkYXRhOiB7IHN1cnZleTogc3VydmV5IH0gfSk7XCJcclxuICAgIH07XHJcbiAgICBwcml2YXRlIHBsYXRmb3JtSlNvbldpbmRvdyA9IHtcclxuICAgICAgICBcImFuZ3VsYXJcIjogXCJAQ29tcG9uZW50KHtcXG4gIHNlbGVjdG9yOiAnbmctYXBwJyxcXG4gICAgICAgIHRlbXBsYXRlOiBcXG4gICAgICAgIDxkaXYgaWQ9J3N1cnZleUVsZW1lbnQnPjwvZGl2PlxcXCIsXFxufSlcXG5leHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcXG4gICAgbmdPbkluaXQoKSB7XFxuICAgICAgICB2YXIgc3VydmV5ID0gbmV3IFN1cnZleS5Nb2RlbChzdXJ2ZXlKU09OKTtcXG4gICAgICAgIHN1cnZleS5vbkNvbXBsZXRlLmFkZChzZW5kRGF0YVRvU2VydmVyKTtcXG4gICAgICAgU3VydmV5LlN1cnZleVdpbmRvd05HLnJlbmRlcihcXFwic3VydmV5RWxlbWVudFxcXCIsIHsgbW9kZWw6IHN1cnZleSB9KTtcXG4gICAgfVxcbn1cIixcclxuICAgICAgICBcImpxdWVyeVwiOiBcInZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbiQoXFxcIiNzdXJ2ZXlDb250YWluZXJcXFwiKS5TdXJ2ZXlXaW5kb3coe1xcbiAgICBtb2RlbDogc3VydmV5LFxcbiAgICBvbkNvbXBsZXRlOiBzZW5kRGF0YVRvU2VydmVyXFxufSk7XCIsXHJcbiAgICAgICAgXCJrbm9ja291dFwiOiBcInZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbnN1cnZleVdpbmRvdy5zaG93KCk7XFxuc3VydmV5Lm9uQ29tcGxldGUuYWRkKHNlbmREYXRhVG9TZXJ2ZXIpO1wiLFxyXG4gICAgICAgIFwicmVhY3RcIjogXCJSZWFjdERPTS5yZW5kZXIoXFxuICAgIDxTdXJ2ZXkuU3VydmV5V2luZG93IGpzb249eyBzdXJ2ZXlKU09OIH0gb25Db21wbGV0ZT17IHNlbmREYXRhVG9TZXJ2ZXIgfSAvPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXFxcInN1cnZleUNvbnRhaW5lclxcXCIpKTtcIixcclxuICAgICAgICBcInZ1ZVwiOiBcIlwiXHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybUh0bWxvblBhZ2UgPSB7XHJcbiAgICAgICAgXCJhbmd1bGFyXCI6IFwiPG5nLWFwcD48L25nLWFwcD5cIixcclxuICAgICAgICBcImpxdWVyeVwiOiBcIjxkaXYgaWQ9XFxcInN1cnZleUNvbnRhaW5lclxcXCI+PC9kaXY+XCIsXHJcbiAgICAgICAgXCJrbm9ja291dFwiOiBcIjxkaXYgaWQ9XFxcInN1cnZleUNvbnRhaW5lclxcXCI+PC9kaXY+XCIsXHJcbiAgICAgICAgXCJyZWFjdFwiOiBcIjxkaXYgaWQ9XFxcInN1cnZleUNvbnRhaW5lclxcXCI+PC9kaXY+XCIsXHJcbiAgICAgICAgXCJ2dWVcIjogXCI8ZGl2IGlkPVxcXCJzdXJ2ZXlDb250YWluZXJcXFwiPjxzdXJ2ZXkgOnN1cnZleT1cXFwic3VydmV5XFxcIj48L3N1cnZleT48L2Rpdj5cIlxyXG4gICAgfTtcclxuICAgIHByaXZhdGUgcGxhdGZvcm1IdG1sb25XaW5kb3cgPSB7XHJcbiAgICAgICAgXCJhbmd1bGFyXCI6IFwiPG5nLWFwcD48L25nLWFwcD5cIixcclxuICAgICAgICBcImpxdWVyeVwiOiBcIjxkaXYgaWQ9XFxcInN1cnZleUNvbnRhaW5lclxcXCI+PC9kaXY+XCIsXHJcbiAgICAgICAgXCJrbm9ja291dFwiOiBcIlwiLFxyXG4gICAgICAgIFwicmVhY3RcIjogXCI8ZGl2IGlkPVxcXCJzdXJ2ZXlDb250YWluZXJcXFwiPjwvZGl2PlwiLFxyXG4gICAgICAgIFwidnVlXCI6IFwiPGRpdiBpZD0nc3VydmV5Q29udGFpbmVyJz48c3VydmV5LXdpbmRvdyA6c3VydmV5PSdzdXJ2ZXknPjwvc3VydmV5LXdpbmRvdz48L2Rpdj5cIlxyXG4gICAgfTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLmtvTGlicmFyeVZlcnNpb24gPSBrby5vYnNlcnZhYmxlKFwianF1ZXJ5XCIpO1xyXG4gICAgICAgIHRoaXMua29TaG93QXNXaW5kb3cgPSBrby5vYnNlcnZhYmxlKFwicGFnZVwiKTtcclxuICAgICAgICB0aGlzLmtvU2NyaXB0VXNpbmcgPSBrby5vYnNlcnZhYmxlKFwiYm9vdHN0cmFwXCIpO1xyXG4gICAgICAgIHRoaXMua29IYXNJZHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmtvTG9hZFN1cnZleSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmtvSGVhZFRleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xyXG4gICAgICAgIHRoaXMua29KYXZhVGV4dCA9IGtvLm9ic2VydmFibGUoXCJcIik7XHJcbiAgICAgICAgdGhpcy5rb0JvZHlUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5rb1Zpc2libGVIdG1sID0ga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5rb1Nob3dBc1dpbmRvdygpID09IFwicGFnZVwiIHx8IHNlbGYucGxhdGZvcm1IdG1sb25XaW5kb3dbc2VsZi5rb0xpYnJhcnlWZXJzaW9uKCldICE9IFwiXCI7IH0pO1xyXG4gICAgICAgIHRoaXMua29MaWJyYXJ5VmVyc2lvbi5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IHNlbGYuc2V0SGVhZFRleHQoKTsgc2VsZi5zZXRKYXZhVGVzdCgpOyBzZWxmLnNldEJvZHlUZXh0KCk7IH0pO1xyXG4gICAgICAgIHRoaXMua29TaG93QXNXaW5kb3cuc3Vic2NyaWJlKGZ1bmN0aW9uIChuZXdWYWx1ZSkgeyBzZWxmLnNldEphdmFUZXN0KCk7IHNlbGYuc2V0Qm9keVRleHQoKTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb1NjcmlwdFVzaW5nLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHsgc2VsZi5zZXRIZWFkVGV4dCgpOyBzZWxmLnNldEphdmFUZXN0KCk7IH0pO1xyXG4gICAgICAgIHRoaXMua29Mb2FkU3VydmV5LnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHsgc2VsZi5zZXRKYXZhVGVzdCgpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleUVtYmVkaW5nSGVhZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGpzb24oKTogYW55IHsgcmV0dXJuIHRoaXMuanNvblZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IGpzb24odmFsdWU6IGFueSkgeyB0aGlzLmpzb25WYWx1ZSA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGhhc0FjZUVkaXRvcigpOiBib29sZWFuIHsgcmV0dXJuIHR5cGVvZiBhY2UgIT09IFwidW5kZWZpbmVkXCI7IH1cclxuICAgIHB1YmxpYyBzaG93KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0FjZUVkaXRvciAmJiB0aGlzLnN1cnZleUVtYmVkaW5nSGVhZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmdIZWFkID0gdGhpcy5jcmVhdGVFZGl0b3IoXCJzdXJ2ZXlFbWJlZGluZ0hlYWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmdCb2R5ID0gdGhpcy5jcmVhdGVFZGl0b3IoXCJzdXJ2ZXlFbWJlZGluZ0JvZHlcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmdKYXZhID0gdGhpcy5jcmVhdGVFZGl0b3IoXCJzdXJ2ZXlFbWJlZGluZ0phdmFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua29IYXNJZHModGhpcy5zdXJ2ZXlJZCAmJiB0aGlzLnN1cnZleVBvc3RJZCk7XHJcbiAgICAgICAgdGhpcy5zZXRCb2R5VGV4dCgpO1xyXG4gICAgICAgIHRoaXMuc2V0SGVhZFRleHQoKTtcclxuICAgICAgICB0aGlzLnNldEphdmFUZXN0KCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldEJvZHlUZXh0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0VGV4dFRvRWRpdG9yKHRoaXMuc3VydmV5RW1iZWRpbmdCb2R5LCB0aGlzLmtvQm9keVRleHQsIHRoaXMucGxhdGZvcm1IdG1sb25QYWdlW3RoaXMua29MaWJyYXJ5VmVyc2lvbigpXSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBnZXRDRE5QYXRoKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN1cnZleUNETlBhdGggKyB0aGlzLnN1cnZleUpTVmVyc2lvbiArIFwiL1wiOyB9XHJcbiAgICBwcml2YXRlIHNldEhlYWRUZXh0KCkge1xyXG4gICAgICAgIHZhciBzdHIgPSBcIjwhLS0gWW91ciBwbGF0Zm9ybSAoXCIgKyB0aGlzLmtvTGlicmFyeVZlcnNpb24oKSArIFwiKSBzY3JpcHRzLiAtLT5cXG5cIjtcclxuICAgICAgICBpZiAodGhpcy5rb1NjcmlwdFVzaW5nKCkgIT0gXCJib290c3RyYXBcIikge1xyXG4gICAgICAgICAgICBzdHIgKz0gXCJcXG48bGluayBocmVmPVxcXCJcIiArIHRoaXMuZ2V0Q0ROUGF0aCArICBcInN1cnZleS5jc3NcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiByZWw9XFxcInN0eWxlc2hlZXRcXFwiIC8+XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0ciArPSBcIlxcbjxzY3JpcHQgc3JjPVxcXCJcIiArIHRoaXMuZ2V0Q0ROUGF0aCArICAgXCJzdXJ2ZXkuXCIgKyB0aGlzLnBsYXRmb3JtU3VydmV5SlNQcmVmaXhbdGhpcy5rb0xpYnJhcnlWZXJzaW9uKCldICsgIFwiIC5taW4uanNcXFwiPjwvc2NyaXB0PlwiO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHRUb0VkaXRvcih0aGlzLnN1cnZleUVtYmVkaW5nSGVhZCwgdGhpcy5rb0hlYWRUZXh0LCBzdHIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRKYXZhVGVzdCgpIHtcclxuICAgICAgICB0aGlzLnNldFRleHRUb0VkaXRvcih0aGlzLnN1cnZleUVtYmVkaW5nSmF2YSwgdGhpcy5rb0phdmFUZXh0LCB0aGlzLmdldEphdmFUZXh0KCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjcmVhdGVFZGl0b3IoZWxlbWVudE5hbWU6IHN0cmluZyk6IEFjZUFqYXguRWRpdG9yIHtcclxuICAgICAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQoZWxlbWVudE5hbWUpO1xyXG4gICAgICAgIGVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIGVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9qc29uXCIpO1xyXG4gICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRTaG93R3V0dGVyKGZhbHNlKTtcclxuICAgICAgICBlZGl0b3Iuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0SmF2YVRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgaXNPblBhZ2UgPSB0aGlzLmtvU2hvd0FzV2luZG93KCkgPT0gXCJwYWdlXCI7XHJcbiAgICAgICAgdmFyIHN0ciA9IHRoaXMuZ2V0U2F2ZUZ1bmMoKSArIFwiXFxuXFxuXCI7XHJcbiAgICAgICAgc3RyICs9IGlzT25QYWdlID8gdGhpcy5wbGF0Zm9ybUpTb25QYWdlW3RoaXMua29MaWJyYXJ5VmVyc2lvbigpXSA6IHRoaXMucGxhdGZvcm1KU29uV2luZG93W3RoaXMua29MaWJyYXJ5VmVyc2lvbigpXTtcclxuICAgICAgICB2YXIganNvblRleHQgPSBcInZhciBzdXJ2ZXlKU09OID0gXCIgKyB0aGlzLmdldEpzb25UZXh0KCkgKyBcIlxcblxcblwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldENzcygpICsgXCJcXG5cIiArIGpzb25UZXh0ICsgc3RyO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRTZXRDc3MoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5rb1NjcmlwdFVzaW5nKCkgIT0gXCJib290c3RyYXBcIikgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIFwiU3VydmV5LlN1cnZleS5jc3NUeXBlID0gXFxcImJvb3RzdHJhcFxcXCI7XFxuXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFNhdmVGdW5jKCkge1xyXG4gICAgICAgIHJldHVybiBcImZ1bmN0aW9uIHNlbmREYXRhVG9TZXJ2ZXIoc3VydmV5KSB7XFxuXCIgKyB0aGlzLmdldFNhdmVGdW5jQ29kZSgpICsgXCJcXG59XCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFNhdmVGdW5jQ29kZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5rb0hhc0lkcygpKSByZXR1cm4gXCIgICAgc3VydmV5LnNlbmRSZXN1bHQoJ1wiICsgdGhpcy5zdXJ2ZXlQb3N0SWQgKyBcIicpO1wiO1xyXG4gICAgICAgIHJldHVybiBcIiAgICAvL3NlbmQgQWpheCByZXF1ZXN0IHRvIHlvdXIgd2ViIHNlcnZlci5cXG4gICAgYWxlcnQoXFxcIlRoZSByZXN1bHRzIGFyZTpcXFwiICsgSlNPTi5zdHJpbmdpZnkocy5kYXRhKSk7XCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEpzb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMua29IYXNJZHMoKSAmJiB0aGlzLmtvTG9hZFN1cnZleSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInsgc3VydmV5SWQ6ICdcIiArIHRoaXMuc3VydmV5SWQgKyBcIid9XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdlbmVyYXRlVmFsaWRKU09OKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5qc29uKTtcclxuICAgICAgICByZXR1cm4gbmV3IFN1cnZleUpTT041KCkuc3RyaW5naWZ5KHRoaXMuanNvbik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldFRleHRUb0VkaXRvcihlZGl0b3I6IEFjZUFqYXguRWRpdG9yLCBrb1RleHQ6IGFueSwgdGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGVkaXRvcikgZWRpdG9yLnNldFZhbHVlKHRleHQpO1xyXG4gICAgICAgIGlmIChrb1RleHQpIGtvVGV4dCh0ZXh0KTtcclxuICAgIH1cclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlFbWJlZGluZ1dpbmRvdy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQge1N1cnZleUhlbHBlciwgT2JqVHlwZX0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5T2JqZWN0SXRlbSB7XHJcbiAgICBwdWJsaWMgdmFsdWU6IFN1cnZleS5CYXNlO1xyXG4gICAgcHVibGljIHRleHQ6IGFueTtcclxuICAgIHB1YmxpYyBsZXZlbDogbnVtYmVyID0gMDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleU9iamVjdHMge1xyXG4gICAgcHVibGljIHN0YXRpYyBpbnRlbmQ6IHN0cmluZyA9IFwiLlwiO1xyXG4gICAgc3VydmV5VmFsdWU6IFN1cnZleS5TdXJ2ZXk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGtvT2JqZWN0czogYW55LCBwdWJsaWMga29TZWxlY3RlZDogYW55KSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHsgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7IH1cclxuICAgIHB1YmxpYyBzZXQgc3VydmV5KHZhbHVlOiBTdXJ2ZXkuU3VydmV5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ID09IHZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMucmVidWlsZCgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFBhZ2UocGFnZTogU3VydmV5LlBhZ2VNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChwYWdlLCBudWxsKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhZGRFbGVtZW50KGVsZW1lbnQ6IGFueSwgcGFyZW50OiBhbnkpIHtcclxuICAgICAgICB2YXIgcGFyZW50SW5kZXggPSBwYXJlbnQgIT0gbnVsbCA/IHRoaXMuZ2V0SXRlbUluZGV4KHBhcmVudCkgOiAwO1xyXG4gICAgICAgIGlmIChwYXJlbnRJbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICB2YXIgZWxlbWVudHMgPSBwYXJlbnQgIT0gbnVsbCA/IHBhcmVudC5lbGVtZW50cyA6IHRoaXMuc3VydmV5LnBhZ2VzO1xyXG4gICAgICAgIHZhciBlbGVtZW50SW5kZXggPSBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgICAgIHZhciBuZXdJbmRleCA9IGVsZW1lbnRJbmRleCArIDEgKyBwYXJlbnRJbmRleDtcclxuICAgICAgICBpZihlbGVtZW50SW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmV2RWxlbWVudCA9IGVsZW1lbnRzW2VsZW1lbnRJbmRleCAtIDFdO1xyXG4gICAgICAgICAgICBuZXdJbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KHByZXZFbGVtZW50KSArIHRoaXMuZ2V0QWxsRWxlbWVudENvdW50KHByZXZFbGVtZW50KSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVJdGVtKGVsZW1lbnQsIHRoaXMua29PYmplY3RzKClbcGFyZW50SW5kZXhdKTtcclxuICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgbmV3SW5kZXgpO1xyXG4gICAgICAgIGlmKGVsZW1lbnQuZWxlbWVudHMpIHtcclxuICAgICAgICAgICAgdmFyIG9ianMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5idWlsZEVsZW1lbnRzKG9ianMsIGVsZW1lbnQuZWxlbWVudHMsIGl0ZW0pO1xyXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkgKyspe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rb09iamVjdHMuc3BsaWNlKG5ld0luZGV4ICsgMSArIGksIDAsIG9ianNbaV0pOyAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZChpdGVtKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZWxlY3RPYmplY3Qob2JqOiBTdXJ2ZXkuQmFzZSkge1xyXG4gICAgICAgIHZhciBvYmpzID0gdGhpcy5rb09iamVjdHMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKG9ianNbaV0udmFsdWUgPT0gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtvU2VsZWN0ZWQob2Jqc1tpXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlT2JqZWN0KG9iajogU3VydmV5LkJhc2UpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChvYmopO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuICAgICAgICB2YXIgY291bnRUb1JlbW92ZSA9IDEgKyB0aGlzLmdldEFsbEVsZW1lbnRDb3VudChvYmopO1xyXG4gICAgICAgIHRoaXMua29PYmplY3RzLnNwbGljZShpbmRleCwgY291bnRUb1JlbW92ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbmFtZUNoYW5nZWQob2JqOiBTdXJ2ZXkuQmFzZSkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KG9iaik7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMua29PYmplY3RzKClbaW5kZXhdLnRleHQodGhpcy5nZXRUZXh0KHRoaXMua29PYmplY3RzKClbaW5kZXhdKSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2VsZWN0TmV4dFF1ZXN0aW9uKGlzVXA6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUXVlc3Rpb24oKTtcclxuICAgICAgICB2YXIgaXRlbUluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgocXVlc3Rpb24pO1xyXG4gICAgICAgIGlmIChpdGVtSW5kZXggPCAwKSByZXR1cm4gcXVlc3Rpb247XHJcbiAgICAgICAgdmFyIG9ianMgPSB0aGlzLmtvT2JqZWN0cygpO1xyXG4gICAgICAgIHZhciBuZXdJdGVtSW5kZXggPSBpdGVtSW5kZXggKyAoaXNVcCA/IC0xIDogMSk7XHJcbiAgICAgICAgaWYgKG5ld0l0ZW1JbmRleCA8IG9ianMubGVuZ3RoICYmIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9ianNbbmV3SXRlbUluZGV4XS52YWx1ZSkgPT0gT2JqVHlwZS5RdWVzdGlvbikge1xyXG4gICAgICAgICAgICBpdGVtSW5kZXggPSBuZXdJdGVtSW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3SXRlbUluZGV4ID0gaXRlbUluZGV4O1xyXG4gICAgICAgICAgICB3aGlsZSAobmV3SXRlbUluZGV4IDwgb2Jqcy5sZW5ndGggJiYgU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2Jqc1tuZXdJdGVtSW5kZXhdLnZhbHVlKSA9PSBPYmpUeXBlLlF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtSW5kZXggPSBuZXdJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtSW5kZXggKz0gKGlzVXAgPyAxIDogLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZChvYmpzW2l0ZW1JbmRleF0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRBbGxFbGVtZW50Q291bnQoZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgaWYoIWVsZW1lbnQuZWxlbWVudHMpIHJldHVybiAwO1xyXG4gICAgICAgIHZhciByZXMgPSAwO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICByZXMgKz0gMSArIHRoaXMuZ2V0QWxsRWxlbWVudENvdW50KGVsZW1lbnQuZWxlbWVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFF1ZXN0aW9uKCk6IFN1cnZleS5RdWVzdGlvbkJhc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5rb1NlbGVjdGVkKCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBvYmogPSB0aGlzLmtvU2VsZWN0ZWQoKS52YWx1ZTtcclxuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaikgPT0gT2JqVHlwZS5RdWVzdGlvbiA/IDxTdXJ2ZXkuUXVlc3Rpb25CYXNlPihvYmopIDogbnVsbDtcclxuXHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFkZEl0ZW0oaXRlbTogU3VydmV5T2JqZWN0SXRlbSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChpbmRleCA+IHRoaXMua29PYmplY3RzKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMua29PYmplY3RzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5rb09iamVjdHMuc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYnVpbGQoKSB7XHJcbiAgICAgICAgdmFyIG9ianMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmtvT2JqZWN0cyhvYmpzKTtcclxuICAgICAgICAgICAgdGhpcy5rb1NlbGVjdGVkKG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb290ID0gdGhpcy5jcmVhdGVJdGVtKHRoaXMuc3VydmV5LCBudWxsKTtcclxuICAgICAgICBvYmpzLnB1c2gocm9vdCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleS5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IDxTdXJ2ZXkuUGFnZT50aGlzLnN1cnZleS5wYWdlc1tpXTtcclxuICAgICAgICAgICAgdmFyIHBhZ2VJdGVtID0gdGhpcy5jcmVhdGVJdGVtKHBhZ2UsIHJvb3QpO1xyXG4gICAgICAgICAgICBvYmpzLnB1c2gocGFnZUl0ZW0pO1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRWxlbWVudHMob2JqcywgcGFnZS5lbGVtZW50cywgcGFnZUl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtvT2JqZWN0cyhvYmpzKTtcclxuICAgICAgICB0aGlzLmtvU2VsZWN0ZWQodGhpcy5zdXJ2ZXkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBidWlsZEVsZW1lbnRzKG9ianM6IEFycmF5PGFueT4sIGVsZW1lbnRzOiBBcnJheTxTdXJ2ZXkuSUVsZW1lbnQ+LCBwYXJlbnRJdGVtOiBTdXJ2ZXlPYmplY3RJdGVtKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgaWYoZWwuaXNQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhbmVsSXRlbSA9IHRoaXMuY3JlYXRlSXRlbSg8U3VydmV5LlBhbmVsPmVsLCBwYXJlbnRJdGVtKTtcclxuICAgICAgICAgICAgICAgIG9ianMucHVzaChwYW5lbEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVsZW1lbnRzKG9ianMsICg8U3VydmV5LlBhbmVsPmVsKS5lbGVtZW50cywgcGFuZWxJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ianMucHVzaCh0aGlzLmNyZWF0ZUl0ZW0oPFN1cnZleS5RdWVzdGlvbkJhc2U+ZWwsIHBhcmVudEl0ZW0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgY3JlYXRlSXRlbSh2YWx1ZTogU3VydmV5LkJhc2UsIHBhcmVudDogU3VydmV5T2JqZWN0SXRlbSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IFN1cnZleU9iamVjdEl0ZW0oKTtcclxuICAgICAgICBpdGVtLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaXRlbS5sZXZlbCA9IHBhcmVudCAhPSBudWxsID8gcGFyZW50LmxldmVsICsgMSA6IDA7XHJcbiAgICAgICAgaXRlbS50ZXh0ID0ga28ub2JzZXJ2YWJsZSh0aGlzLmdldFRleHQoaXRlbSkpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgodmFsdWU6IFN1cnZleS5CYXNlKTogbnVtYmVyIHtcclxuICAgICAgICB2YXIgb2JqcyA9IHRoaXMua29PYmplY3RzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmpzW2ldLnZhbHVlID09IHZhbHVlKSByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0KGl0ZW06IFN1cnZleU9iamVjdEl0ZW0pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmKGl0ZW0ubGV2ZWwgPT0gMCkgcmV0dXJuIFwiU3VydmV5XCI7XHJcbiAgICAgICAgdmFyIGludGVuZCA9IFN1cnZleU9iamVjdHMuaW50ZW5kO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDE7IGkgPCBpdGVtLmxldmVsOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGludGVuZCArPSBTdXJ2ZXlPYmplY3RzLmludGVuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGludGVuZCArIFN1cnZleUhlbHBlci5nZXRPYmplY3ROYW1lKGl0ZW0udmFsdWUpO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleU9iamVjdHMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvckRlc2lnbmVyIGV4dGVuZHMgU3VydmV5LlN1cnZleSB7XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkRWxlbWVudFZhbHVlOiBhbnk7XHJcbiAgICBlZGl0UXVlc3Rpb25DbGljazogYW55OyBjb3B5UXVlc3Rpb25DbGljazogYW55OyBmYXN0Q29weVF1ZXN0aW9uQ2xpY2s6IGFueTsgZGVsZXRlQ3VycmVudE9iamVjdENsaWNrOiBhbnk7XHJcbiAgICBwdWJsaWMgIG9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZDogU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uRWRpdFF1ZXN0aW9uOiBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25Db3B5UXVlc3Rpb246IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkZhc3RDb3B5UXVlc3Rpb246IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvbkRlbGV0ZUN1cnJlbnRPYmplY3Q6IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwsIHJlbmRlcmVkRWxlbWVudDogYW55ID0gbnVsbCwgY3NzOiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIoanNvbk9iaiwgcmVuZGVyZWRFbGVtZW50LCBjc3MpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLnNldERlc2lnbk1vZGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4geyBvcHRpb25zLnBhZ2VbXCJvbkFmdGVyUmVuZGVyUGFnZVwiXShvcHRpb25zLmh0bWxFbGVtZW50KTsgfSk7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24uYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHsgb3B0aW9ucy5xdWVzdGlvbltcIm9uQWZ0ZXJSZW5kZXJRdWVzdGlvblwiXShvcHRpb25zLmh0bWxFbGVtZW50KTsgfSk7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFuZWwuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHsgb3B0aW9ucy5wYW5lbFtcIm9uQWZ0ZXJSZW5kZXJQYW5lbFwiXShvcHRpb25zLmh0bWxFbGVtZW50KTsgfSk7XHJcbiAgICAgICAgdGhpcy5lZGl0UXVlc3Rpb25DbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkVkaXRRdWVzdGlvbi5maXJlKHNlbGYsIG51bGwpOyB9O1xyXG4gICAgICAgIHRoaXMuY29weVF1ZXN0aW9uQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYub25Db3B5UXVlc3Rpb24uZmlyZShzZWxmLCBudWxsKTsgfTtcclxuICAgICAgICB0aGlzLmZhc3RDb3B5UXVlc3Rpb25DbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkZhc3RDb3B5UXVlc3Rpb24uZmlyZShzZWxmLCBudWxsKTsgfTtcclxuICAgICAgICB0aGlzLmRlbGV0ZUN1cnJlbnRPYmplY3RDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5vbkRlbGV0ZUN1cnJlbnRPYmplY3QuZmlyZShzZWxmLCBudWxsKTsgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzZWxlY3RlZEVsZW1lbnQoKTogYW55IHtyZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRWYWx1ZTt9XHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkRWxlbWVudCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWUpIHJldHVybjtcclxuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvbGRWYWx1ZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWVbXCJvblNlbGVjdGVkRWxlbWVudENoYW5nZWRcIl0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGVkRWxlbWVudENoYW5nZWQuZmlyZSh0aGlzLCB7ICdvbGRFbGVtZW50Jzogb2xkVmFsdWUsICduZXdFbGVtZW50JzogdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0RWRpdG9yTG9jU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcGFuZWxCYXNlT25DcmVhdGluZyhzZWxmOiBhbnkpIHtcclxuICAgIHNlbGYuZHJhZ0VudGVyQ291bnRlciA9IDA7XHJcbiAgICBzZWxmLmVtcHR5RWxlbWVudCA9IG51bGw7XHJcbiAgICBzZWxmLmtvUm93cy5zdWJzY3JpYmUoZnVuY3Rpb24oY2hhbmdlcykge1xyXG4gICAgICAgIGlmKHNlbGYuZW1wdHlFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGYuZW1wdHlFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBzZWxmLmtvUm93cygpLmxlbmd0aCA+IDAgPyBcIm5vbmVcIiA6IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVsZW1lbnRPbkNyZWF0aW5nKHNlbGY6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHNlbGYuZHJhZ0Ryb3BIZWxwZXJWYWx1ZSA9IG51bGw7XHJcbiAgICBzZWxmLmRyYWdEcm9wSGVscGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChzZWxmLmRyYWdEcm9wSGVscGVyVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZWxmLmRyYWdEcm9wSGVscGVyVmFsdWUgPSBzZWxmLmRhdGFbXCJkcmFnRHJvcEhlbHBlclwiXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuZHJhZ0Ryb3BIZWxwZXJWYWx1ZTtcclxuICAgIH07XHJcbiAgICBzZWxmLnJlbmRlcmVkRWxlbWVudCA9IG51bGw7XHJcbiAgICBzZWxmLmFkZG9uc0VsZW1lbnQgPSBudWxsO1xyXG4gICAgc2VsZi5rb0lzRHJhZ2dpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcclxuICAgIHNlbGYua29Jc1NlbGVjdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XHJcbiAgICBzZWxmLmtvSXNEcmFnZ2luZy5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IFxyXG4gICAgICAgIGlmKHNlbGYucmVuZGVyZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGYucmVuZGVyZWRFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBuZXdWYWx1ZSA/IDAuNCA6IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBzZWxmLmtvSXNTZWxlY3RlZC5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IFxyXG4gICAgICAgIGlmKHNlbGYucmVuZGVyZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IGNsYXNzTmFtZTtcclxuICAgICAgICAgICAgaWYobmV3VmFsdWUpIG5ld0NsYXNzICs9IFwiIHN2ZF9xX3NlbGVjdGVkIFwiO1xyXG4gICAgICAgICAgICBzZWxmLnJlbmRlcmVkRWxlbWVudC5jbGFzc05hbWUgPSBuZXdDbGFzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoc2VsZi5hZGRvbnNFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNlbGYuYWRkb25zRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gbmV3VmFsdWUgPyBcIlwiOiBcIm5vbmVcIjsgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZEVtcHR5UGFuZWxFbGVtZW50KHJvb3Q6IEhUTUxFbGVtZW50LCBkcmFnRHJvcEhlbHBlcjogYW55LCBzZWxmOiBhbnkpOiBIVE1MRWxlbWVudCB7XHJcbiAgICB2YXIgZURpdjogSFRNTERpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgZURpdi5jbGFzc05hbWUgPSBcIndlbGxcIjtcclxuICAgIGVEaXYub25kcmFnb3ZlciA9IGZ1bmN0aW9uKGUpIHsgXHJcbiAgICAgICAgZHJhZ0Ryb3BIZWxwZXIuZG9EcmFnRHJvcE92ZXIoZSwgc2VsZik7XHJcbiAgICB9O1xyXG4gICAgdmFyIGVTcGFuOiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcclxuICAgIGVTcGFuLnRleHRDb250ZW50ID0gc2VsZi5kYXRhLmdldEVkaXRvckxvY1N0cmluZygnc3VydmV5LmRyb3BRdWVzdGlvbicpO1xyXG4gICAgZURpdi5hcHBlbmRDaGlsZChlU3Bhbik7XHJcbiAgICByb290LmFwcGVuZENoaWxkKGVEaXYpO1xyXG4gICAgcmV0dXJuIGVEaXY7XHJcbn1cclxuXHJcbmNvbnN0IHF1ZXN0aW9uX2Rlc2lnbl9jbGFzczogc3RyaW5nID0gXCJzdmRfcXVlc3Rpb24gd2VsbCB3ZWxsLXNtIHN2ZF9xX2Rlc2lnbl9ib3JkZXJcIjtcclxuY29uc3QgcGFuZWxfZGVzaWduX2NsYXNzOiBzdHJpbmcgPSBcInN2ZF9xdWVzdGlvbiB3ZWxsIHdlbGwtc20gc3ZkX3FfZGVzaWduX2JvcmRlclwiO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlUXVlc3Rpb25EZXNpZ25JdGVtKG9uQ2xpY2s6IGFueSwgdGV4dDogc3RyaW5nKTogSFRNTExJRWxlbWVudCB7XHJcbiAgICB2YXIgcmVzID0gPEhUTUxMSUVsZW1lbnQ+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xyXG4gICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XHJcbiAgICBidG4uaW5uZXJUZXh0ID0gdGV4dDtcclxuICAgIGJ0bi5vbmNsaWNrID0gb25DbGljaztcclxuICAgIGJ0bi5jbGFzc05hbWUgPSBcImJ0biBidG4tcHJpbWFyeSBidG4teHNcIjtcclxuICAgIHJlcy5hcHBlbmRDaGlsZChidG4pO1xyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudEFkZG9ucyhkYXRhOiBhbnksIGlzUGFuZWw6IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB7XHJcbiAgICB2YXIgbWFpbjogSFRNTERpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbWFpbi5jbGFzc05hbWUgPSBcInN2ZF9xdWVzdGlvbl9tZW51IGJ0bi1ncm91cFwiO1xyXG4gICAgbWFpbltcInJvbGVcIl0gPSBcImdyb3VwXCI7XHJcbiAgICB2YXIgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcclxuICAgIGJ0bi50eXBlID0gXCJidXR0b25cIjtcclxuICAgIGJ0bi5jbGFzc05hbWUgPSBcImJ0biBidG4tcHJpbWFyeSAgYnRuLXhzXCI7XHJcbiAgICBidG4ub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZGF0YS5lZGl0UXVlc3Rpb25DbGljaygpO307XHJcbiAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xyXG4gICAgc3Bhbi5pbm5lclRleHQgPSBcIkVkaXRcIjsgLy9UT0RPXHJcbiAgICBidG4uYXBwZW5kQ2hpbGQoc3Bhbik7XHJcbiAgICBtYWluLmFwcGVuZENoaWxkKGJ0bik7XHJcbiAgICBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xyXG4gICAgYnRuLnR5cGUgPSBcImJ1dHRvblwiO1xyXG4gICAgYnRuLmNsYXNzTmFtZSA9IFwiYnRuIGJ0bi1wcmltYXJ5ICBidG4teHMgZHJvcGRvd24tdG9nZ2xlXCI7XHJcbiAgICBidG4uc2V0QXR0cmlidXRlKFwiZGF0YS10b2dnbGVcIiwgXCJkcm9wZG93blwiKTtcclxuICAgIGJ0bi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhhc3BvcHVwXCIsIFwidHJ1ZVwiKTtcclxuICAgIGJ0bi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsIFwiZmFsc2VcIik7XHJcbiAgICBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICBzcGFuLmNsYXNzTmFtZSA9IFwiZ2x5cGhpY29uIGdseXBoaWNvbi1vcHRpb24taG9yaXpvbnRhbFwiO1xyXG4gICAgYnRuLmFwcGVuZENoaWxkKHNwYW4pO1xyXG4gICAgbWFpbi5hcHBlbmRDaGlsZChidG4pO1xyXG4gICAgdmFyIHVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO1xyXG4gICAgdWwuY2xhc3NOYW1lID0gXCJkcm9wZG93bi1tZW51XCI7XHJcbiAgICB1bC5hcHBlbmRDaGlsZChjcmVhdGVRdWVzdGlvbkRlc2lnbkl0ZW0oZGF0YS5jb3B5UXVlc3Rpb25DbGljaywgZGF0YS5nZXRFZGl0b3JMb2NTdHJpbmcoJ3N1cnZleS5hZGRUb1Rvb2xib3gnKSkpO1xyXG4gICAgdWwuYXBwZW5kQ2hpbGQoY3JlYXRlUXVlc3Rpb25EZXNpZ25JdGVtKGRhdGEuZmFzdENvcHlRdWVzdGlvbkNsaWNrLCBkYXRhLmdldEVkaXRvckxvY1N0cmluZygnc3VydmV5LmNvcHknKSkpO1xyXG4gICAgdmFyIGRlbGV0ZUxvY2FsZU5hbWUgPSBpc1BhbmVsID8gJ3N1cnZleS5kZWxldGVQYW5lbCcgOiAnc3VydmV5LmRlbGV0ZVF1ZXN0aW9uJztcclxuICAgIHVsLmFwcGVuZENoaWxkKGNyZWF0ZVF1ZXN0aW9uRGVzaWduSXRlbShkYXRhLmRlbGV0ZUN1cnJlbnRPYmplY3RDbGljaywgZGF0YS5nZXRFZGl0b3JMb2NTdHJpbmcoZGVsZXRlTG9jYWxlTmFtZSkpKTtcclxuICAgIG1haW4uYXBwZW5kQ2hpbGQodWwpO1xyXG4gICAgcmV0dXJuIG1haW47XHJcbn1cclxuXHJcbi8vdmFyIGxhc3RFbGVtZW50T25DbGljazogSFRNTEVsZW1lbnQgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gZWxlbWVudE9uQWZ0ZXJSZW5kZXJpbmcoZWw6IGFueSwgc2VsZjogYW55LCBjbGFzc05hbWU6IHN0cmluZywgaXNQYW5lbDogYm9vbGVhbiwgZGlzYWJsZTogYm9vbGVhbikge1xyXG4gICAgc2VsZi5yZW5kZXJlZEVsZW1lbnQgPSBlbDtcclxuICAgIHZhciBuZXdDbGFzcyA9IGNsYXNzTmFtZTtcclxuICAgIGlmKHNlbGYua29Jc1NlbGVjdGVkKCkpIG5ld0NsYXNzICs9IFwiIHN2ZF9xX3NlbGVjdGVkXCI7XHJcbiAgICBcclxuICAgIGVsLmNsYXNzTmFtZSA9IG5ld0NsYXNzO1xyXG4gICAgZWwuc3R5bGUub3BhY2l0eSA9IHNlbGYua29Jc0RyYWdnaW5nKCkgPyAwLjQgOiAxO1xyXG4gICAgZWwuZHJhZ2dhYmxlID0gdHJ1ZTtcclxuICAgIGVsLm9uZHJhZ292ZXIgPSBmdW5jdGlvbihlKXsgXHJcbiAgICAgICAgaWYoIWVbXCJtYXJrRXZlbnRcIl0pIHtcclxuICAgICAgICAgICAgZVtcIm1hcmtFdmVudFwiXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuZHJhZ0Ryb3BIZWxwZXIoKS5kb0RyYWdEcm9wT3ZlcihlLCBzZWxmLCB0cnVlKTsgXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGVsLm9uZHJvcCA9IGZ1bmN0aW9uKGUpeyBcclxuICAgICAgICBpZighZVtcIm1hcmtFdmVudFwiXSkge1xyXG4gICAgICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5kcmFnRHJvcEhlbHBlcigpLmRvRHJvcChlKTsgXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGVsLm9uZHJhZ3N0YXJ0ID0gZnVuY3Rpb24gKGUpIHsgXHJcbiAgICAgICAgaWYoIWVbXCJtYXJrRXZlbnRcIl0pIHtcclxuICAgICAgICAgICAgZVtcIm1hcmtFdmVudFwiXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuZHJhZ0Ryb3BIZWxwZXIoKS5zdGFydERyYWdRdWVzdGlvbihlLCBzZWxmKTsgXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGVsLm9uZHJhZ2VuZCA9IGZ1bmN0aW9uIChlKSB7IFxyXG4gICAgICAgIHNlbGYuZHJhZ0Ryb3BIZWxwZXIoKS5lbmQoKTsgXHJcbiAgICB9O1xyXG4gICAgZWwub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgXHJcbiAgICAgICAgaWYoIWVbXCJtYXJrRXZlbnRcIl0pIHtcclxuICAgICAgICAgICAgZVtcIm1hcmtFdmVudFwiXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuZGF0YVtcInNlbGVjdGVkRWxlbWVudFwiXSA9IHNlbGY7IFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBlbC5vbmtleWRvd24gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgaWYoZS53aXRjaCA9PSA0Nikgc2VsZi5kYXRhLmRlbGV0ZUN1cnJlbnRPYmplY3RDbGljaygpOyBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmKGRpc2FibGUpIHtcclxuICAgICAgICB2YXIgY2hpbGRzID0gZWwuY2hpbGROb2RlcztcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY2hpbGRzLmxlbmd0aDsgaSArKykge1xyXG4gICAgICAgICAgICBpZihjaGlsZHNbaV0uc3R5bGUpIGNoaWxkc1tpXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2VsZi5hZGRvbnNFbGVtZW50ID0gY3JlYXRlRWxlbWVudEFkZG9ucyhzZWxmLmRhdGEsIGlzUGFuZWwpO1xyXG4gICAgc2VsZi5hZGRvbnNFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBzZWxmLmtvSXNTZWxlY3RlZCgpID8gXCJcIjogXCJub25lXCI7ICAgIFxyXG4gICAgZWwuYXBwZW5kQ2hpbGQoc2VsZi5hZGRvbnNFbGVtZW50KTtcclxufVxyXG5cclxuU3VydmV5LlBhZ2UucHJvdG90eXBlW1wib25DcmVhdGluZ1wiXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHBhbmVsQmFzZU9uQ3JlYXRpbmcodGhpcyk7XHJcbn07XHJcblxyXG5TdXJ2ZXkuUGFnZS5wcm90b3R5cGVbXCJvbkFmdGVyUmVuZGVyUGFnZVwiXSA9IGZ1bmN0aW9uKGVsKSB7XHJcbiAgICBpZighdGhpcy5kYXRhLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRyYWdEcm9wSGVscGVyID0gdGhpcy5kYXRhW1wiZHJhZ0Ryb3BIZWxwZXJcIl07XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50ZXIgPSAwO1xyXG4gICAgZWwub25kcmFnZW50ZXIgPSBmdW5jdGlvbiAoZSkgeyBcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7IFxyXG4gICAgICAgIHNlbGYuZHJhZ0VudGVyQ291bnRlcisrOyBcclxuICAgIH07XHJcbiAgICBlbC5vbmRyYWdsZWF2ZSA9IGZ1bmN0aW9uIChlKSB7IFxyXG4gICAgICAgIHNlbGYuZHJhZ0VudGVyQ291bnRlci0tOyBcclxuICAgICAgICBpZiAoc2VsZi5kcmFnRW50ZXJDb3VudGVyID09PSAwKSBcclxuICAgICAgICAgICAgZHJhZ0Ryb3BIZWxwZXIuZG9MZWF2ZVBhZ2UoZSk7IFxyXG4gICAgfTtcclxuICAgIGVsLm9uZHJhZ292ZXIgPSBmdW5jdGlvbihlKXsgcmV0dXJuIGZhbHNlOyB9O1xyXG4gICAgZWwub25kcm9wID0gZnVuY3Rpb24oZSl7IGRyYWdEcm9wSGVscGVyLmRvRHJvcChlKTsgfTtcclxuICAgIGlmKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0aGlzLmVtcHR5RWxlbWVudCA9IGFkZEVtcHR5UGFuZWxFbGVtZW50KGVsLCBkcmFnRHJvcEhlbHBlciwgc2VsZik7XHJcbiAgICB9XHJcbn1cclxuXHJcblN1cnZleS5QYW5lbC5wcm90b3R5cGVbXCJvbkNyZWF0aW5nXCJdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcGFuZWxCYXNlT25DcmVhdGluZyh0aGlzKTtcclxuICAgIGVsZW1lbnRPbkNyZWF0aW5nKHRoaXMsIHBhbmVsX2Rlc2lnbl9jbGFzcyk7XHJcbn07XHJcblxyXG5TdXJ2ZXkuUGFuZWwucHJvdG90eXBlW1wib25BZnRlclJlbmRlclBhbmVsXCJdID0gZnVuY3Rpb24oZWwpIHtcclxuICAgIGlmKCF0aGlzLmRhdGEuaXNEZXNpZ25Nb2RlKSByZXR1cm47XHJcbiAgICB2YXIgcm93cyA9IHRoaXMua29Sb3dzKCk7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZih0aGlzLmVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVsZW1lbnQgPSBhZGRFbXB0eVBhbmVsRWxlbWVudChlbCwgc2VsZi5kcmFnRHJvcEhlbHBlcigpLCBzZWxmKTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRPbkFmdGVyUmVuZGVyaW5nKGVsLCB0aGlzLCBwYW5lbF9kZXNpZ25fY2xhc3MsIHRydWUsIHRoaXMua29Jc0RyYWdnaW5nKCkpO1xyXG59XHJcblxyXG5TdXJ2ZXkuUGFuZWwucHJvdG90eXBlW1wib25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHJldHVybjtcclxuICAgIHRoaXMua29Jc1NlbGVjdGVkKHRoaXMuZGF0YVtcInNlbGVjdGVkRWxlbWVudFZhbHVlXCJdID09IHRoaXMpO1xyXG59O1xyXG5cclxuU3VydmV5LlF1ZXN0aW9uQmFzZS5wcm90b3R5cGVbXCJvbkNyZWF0aW5nXCJdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZWxlbWVudE9uQ3JlYXRpbmcodGhpcywgcXVlc3Rpb25fZGVzaWduX2NsYXNzKTtcclxufTtcclxuXHJcblN1cnZleS5RdWVzdGlvbkJhc2UucHJvdG90eXBlW1wib25BZnRlclJlbmRlclF1ZXN0aW9uXCJdID0gZnVuY3Rpb24oZWwpIHtcclxuICAgIGlmKCF0aGlzLmRhdGEuaXNEZXNpZ25Nb2RlKSByZXR1cm47XHJcbiAgICBlbGVtZW50T25BZnRlclJlbmRlcmluZyhlbCwgdGhpcywgcXVlc3Rpb25fZGVzaWduX2NsYXNzLCBmYWxzZSwgdHJ1ZSk7XHJcbn07XHJcblxyXG5TdXJ2ZXkuUXVlc3Rpb25CYXNlLnByb3RvdHlwZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmtvSXNTZWxlY3RlZCh0aGlzLmRhdGFbXCJzZWxlY3RlZEVsZW1lbnRWYWx1ZVwiXSA9PSB0aGlzKTtcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5anNPYmplY3RzLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5VW5kb1JlZG8ge1xyXG4gICAgcHJpdmF0ZSBpdGVtczogQXJyYXk8VW5kb1JlZG9JdGVtPjtcclxuICAgIHByaXZhdGUgaW5kZXg6IG51bWJlciA9IC0xO1xyXG4gICAgcHVibGljIGtvQ2FuVW5kbzogYW55OyBrb0NhblJlZG86IGFueTtcclxuICAgIHB1YmxpYyBtYXhpbXVtQ291bnQ6IG51bWJlciA9IDEwO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMua29DYW5VbmRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5rb0NhblJlZG8gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5rb0NhblVuZG8oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMua29DYW5SZWRvKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRDdXJyZW50KHN1cnZleTogU3VydmV5LlN1cnZleSwgc2VsZWN0ZWRPYmpOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IG5ldyBVbmRvUmVkb0l0ZW0oKTtcclxuICAgICAgICBpdGVtLnN1cnZleUpTT04gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3Qoc3VydmV5KTtcclxuICAgICAgICBpdGVtLnNlbGVjdGVkT2JqTmFtZSA9IHNlbGVjdGVkT2JqTmFtZTtcclxuICAgICAgICBpZiAodGhpcy5pbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSh0aGlzLmluZGV4ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB0aGlzLnJlbW92ZU9sZERhdGEoKTtcclxuICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FuVW5kb1JlZG8oKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB1bmRvKCk6IFVuZG9SZWRvSXRlbSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhblVuZG8pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvVW5kb1JlZG8oLTEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlZG8oKTogVW5kb1JlZG9JdGVtICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlZG8pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvVW5kb1JlZG8oMSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHVwZGF0ZUNhblVuZG9SZWRvKCkge1xyXG4gICAgICAgIHRoaXMua29DYW5VbmRvKHRoaXMuY2FuVW5kbyk7XHJcbiAgICAgICAgdGhpcy5rb0NhblJlZG8odGhpcy5jYW5SZWRvKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9VbmRvUmVkbyhkSW5kZXg6IG51bWJlcik6IFVuZG9SZWRvSXRlbSB7XHJcbiAgICAgICAgdGhpcy5pbmRleCArPSBkSW5kZXg7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYW5VbmRvUmVkbygpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID49IDAgJiYgdGhpcy5pbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoID8gdGhpcy5pdGVtc1t0aGlzLmluZGV4XSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPj0gMSAmJiB0aGlzLmluZGV4IDwgdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gMSAmJiB0aGlzLmluZGV4IDwgdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZW1vdmVPbGREYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAtIDEgPCB0aGlzLm1heGltdW1Db3VudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5tYXhpbXVtQ291bnQgLSAxKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuZG9SZWRvSXRlbSB7XHJcbiAgICBzdXJ2ZXlKU09OOiBhbnk7XHJcbiAgICBzZWxlY3RlZE9iak5hbWU6IHN0cmluZztcclxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91bmRvcmVkby50cyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yNF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcImpRdWVyeVwiLFwiY29tbW9uanMyXCI6XCJqcXVlcnlcIixcImNvbW1vbmpzXCI6XCJqcXVlcnlcIixcImFtZFwiOlwianF1ZXJ5XCJ9XG4vLyBtb2R1bGUgaWQgPSAyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21haW4uc2Nzc1xuLy8gbW9kdWxlIGlkID0gMjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7ZWRpdG9yTG9jYWxpemF0aW9ufSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0IHtTdXJ2ZXlPYmplY3RFZGl0b3J9IGZyb20gXCIuL29iamVjdEVkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleVBhZ2VzRWRpdG9yfSBmcm9tIFwiLi9wYWdlc0VkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleUVtYmVkaW5nV2luZG93fSBmcm9tIFwiLi9zdXJ2ZXlFbWJlZGluZ1dpbmRvd1wiO1xyXG5pbXBvcnQge1N1cnZleU9iamVjdHN9IGZyb20gXCIuL3N1cnZleU9iamVjdHNcIjtcclxuaW1wb3J0IHtTdXJ2ZXlWZXJic30gZnJvbSBcIi4vb2JqZWN0VmVyYnNcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9wZXJ0eUVkaXRvclNob3dXaW5kb3d9IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleUpTT05FZGl0b3J9IGZyb20gXCIuL3N1cnZleUpTT05FZGl0b3JcIjtcclxuaW1wb3J0IHtTdXJ2ZXlUZXh0V29ya2VyfSBmcm9tIFwiLi90ZXh0V29ya2VyXCJcclxuaW1wb3J0IHtTdXJ2ZXlVbmRvUmVkbywgVW5kb1JlZG9JdGVtfSBmcm9tIFwiLi91bmRvcmVkb1wiO1xyXG5pbXBvcnQge1N1cnZleUhlbHBlciwgT2JqVHlwZX0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XHJcbmltcG9ydCB7RHJhZ0Ryb3BIZWxwZXJ9IGZyb20gXCIuL2RyYWdkcm9waGVscGVyXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25Ub29sYm94fSBmcm9tIFwiLi9xdWVzdGlvblRvb2xib3hcIjtcclxuaW1wb3J0IHtTdXJ2ZXlKU09ONX0gZnJvbSBcIi4vanNvbjVcIjtcclxudmFyIHRlbXBsYXRlRWRpdG9ySHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vdGVtcGxhdGVzL2VudHJ5Lmh0bWxcIik7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5Rm9yRGVzaWduZXJ9IGZyb20gXCIuL3N1cnZleWpzT2JqZWN0c1wiXHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5RWRpdG9yIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZGVmYXVsdE5ld1N1cnZleVRleHQ6IHN0cmluZyA9IFwieyBwYWdlczogWyB7IG5hbWU6ICdwYWdlMSd9XSB9XCI7XHJcbiAgICBwcml2YXRlIHJlbmRlcmVkRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIHN1cnZleWpzOiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgc3VydmV5anNFeGFtcGxlOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBwcml2YXRlIGpzb25FZGl0b3I6IFN1cnZleUpTT05FZGl0b3I7XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkT2JqZWN0RWRpdG9yOiBTdXJ2ZXlPYmplY3RFZGl0b3I7XHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uRWRpdG9yV2luZG93OiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvclNob3dXaW5kb3c7XHJcbiAgICBwcml2YXRlIHBhZ2VzRWRpdG9yOiBTdXJ2ZXlQYWdlc0VkaXRvcjtcclxuICAgIHByaXZhdGUgc3VydmV5RW1iZWRpbmc6IFN1cnZleUVtYmVkaW5nV2luZG93O1xyXG4gICAgcHJpdmF0ZSBzdXJ2ZXlPYmplY3RzOiBTdXJ2ZXlPYmplY3RzO1xyXG4gICAgcHJpdmF0ZSB0b29sYm94VmFsdWU6IFF1ZXN0aW9uVG9vbGJveDtcclxuICAgIHByaXZhdGUgc3VydmV5VmVyYnM6IFN1cnZleVZlcmJzO1xyXG4gICAgcHJpdmF0ZSB1bmRvUmVkbzogU3VydmV5VW5kb1JlZG87XHJcbiAgICBwcml2YXRlIHN1cnZleVZhbHVlOiBTdXJ2ZXlGb3JEZXNpZ25lcjtcclxuICAgIHByaXZhdGUgc2F2ZVN1cnZleUZ1bmNWYWx1ZTogKG5vOiBudW1iZXIsIG9uU2F2ZUNhbGxiYWNrOiAobm86IG51bWJlciwgaXNTdWNjZXNzOiBib29sZWFuKSA9PiB2b2lkKSA9PiB2b2lkO1xyXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBhbnk7XHJcbiAgICBwcml2YXRlIHN0YXRlVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGRyYWdEcm9wSGVscGVyOiBEcmFnRHJvcEhlbHBlciA9IG51bGw7XHJcbiAgICBwcml2YXRlIHNob3dKU09ORWRpdG9yVGFiVmFsdWU6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNob3dUZXN0U3VydmV5VGFiVmFsdWU6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWU6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIHN1cnZleVBvc3RJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBnZW5lcmF0ZVZhbGlkSlNPTkNoYW5nZWRDYWxsYmFjazogKGdlbmVyYXRlVmFsaWRKU09OOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG9uQ2FuU2hvd1Byb3BlcnR5OiBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xyXG4gICAgcHVibGljIG9uUXVlc3Rpb25BZGRlZDogU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuICAgIHB1YmxpYyBvblBhbmVsQWRkZWQ6IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XHJcbiAgICBwdWJsaWMgb25Nb2RpZmllZDogU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcclxuXHJcbiAgICBrb0lzU2hvd0Rlc2lnbmVyOiBhbnk7XHJcbiAgICBrb1ZpZXdUeXBlOiBhbnk7XHJcbiAgICBrb0NhbkRlbGV0ZU9iamVjdDogYW55O1xyXG4gICAga29PYmplY3RzOiBhbnk7IGtvU2VsZWN0ZWRPYmplY3Q6IGFueTtcclxuICAgIGtvU2hvd1NhdmVCdXR0b246IGFueTtcclxuICAgIGtvR2VuZXJhdGVWYWxpZEpTT046IGFueTsga29TaG93T3B0aW9uczogYW55OyBrb1Rlc3RTdXJ2ZXlXaWR0aDogYW55OyBrb0Rlc2lnbmVySGVpZ2h0OiBhbnk7XHJcbiAgICBzZWxlY3REZXNpZ25lckNsaWNrOiBhbnk7IHNlbGVjdEVkaXRvckNsaWNrOiBhbnk7IHNlbGVjdFRlc3RDbGljazogYW55OyBzZWxlY3RFbWJlZENsaWNrOiBhbnk7XHJcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTkNsaWNrOiBhbnk7IGdlbmVyYXRlUmVhZGFibGVKU09OQ2xpY2s6IGFueTtcclxuICAgIGRvVW5kb0NsaWNrOiBhbnk7IGRvUmVkb0NsaWNrOiBhbnk7XHJcbiAgICBkZWxldGVPYmplY3RDbGljazogYW55O1xyXG4gICAga29TdGF0ZTogYW55O1xyXG4gICAgcnVuU3VydmV5Q2xpY2s6IGFueTsgZW1iZWRpbmdTdXJ2ZXlDbGljazogYW55O1xyXG4gICAgc2F2ZUJ1dHRvbkNsaWNrOiBhbnk7XHJcbiAgICBkcmFnZ2luZ1Rvb2xib3hJdGVtOiBhbnk7IGNsaWNrVG9vbGJveEl0ZW06IGFueTtcclxuICAgIGRyYWdFbmQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlZEVsZW1lbnQ6IGFueSA9IG51bGwsIG9wdGlvbnM6IGFueSA9IG51bGwpIHtcclxuXHJcbiAgICAgICAgdGhpcy5rb1Nob3dPcHRpb25zID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMua29HZW5lcmF0ZVZhbGlkSlNPTiA9IGtvLm9ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmtvRGVzaWduZXJIZWlnaHQgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMua29DYW5EZWxldGVPYmplY3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmtvU3RhdGUgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5rb1Nob3dTYXZlQnV0dG9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aCA9IGtvLm9ic2VydmFibGUoXCIxMDAlXCIpO1xyXG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbkNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmRvU2F2ZSgpOyB9O1xyXG4gICAgICAgIHRoaXMua29PYmplY3RzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkT2JqZWN0ID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMua29TZWxlY3RlZE9iamVjdC5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IHNlbGYuc2VsZWN0ZWRPYmplY3RDaGFuZ2VkKG5ld1ZhbHVlICE9IG51bGwgPyBuZXdWYWx1ZS52YWx1ZSA6IG51bGwpOyB9KTtcclxuICAgICAgICB0aGlzLmtvR2VuZXJhdGVWYWxpZEpTT04uc3Vic2NyaWJlKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXNlbGYub3B0aW9ucykgc2VsZi5vcHRpb25zID0ge307XHJcbiAgICAgICAgICAgIHNlbGYub3B0aW9ucy5nZW5lcmF0ZVZhbGlkSlNPTiA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5nZW5lcmF0ZVZhbGlkSlNPTkNoYW5nZWRDYWxsYmFjaykgc2VsZi5nZW5lcmF0ZVZhbGlkSlNPTkNoYW5nZWRDYWxsYmFjayhuZXdWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzID0gbmV3IFN1cnZleU9iamVjdHModGhpcy5rb09iamVjdHMsIHRoaXMua29TZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgICAgdGhpcy51bmRvUmVkbyA9IG5ldyBTdXJ2ZXlVbmRvUmVkbygpO1xyXG5cclxuICAgICAgICB0aGlzLnN1cnZleVZlcmJzID0gbmV3IFN1cnZleVZlcmJzKGZ1bmN0aW9uICgpIHsgc2VsZi5zZXRNb2RpZmllZCgpOyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvciA9IG5ldyBTdXJ2ZXlPYmplY3RFZGl0b3IodGhpcy5vcHRpb25zKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2sgPSBmdW5jdGlvbiAob2JqZWN0OiBhbnksIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLm9uQ2FuU2hvd09iamVjdFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgc2VsZi5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKG9wdGlvbnMucHJvcGVydHksIG9wdGlvbnMub2JqZWN0LCBvcHRpb25zLm5ld1ZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uRWRpdG9yV2luZG93ID0gbmV3IFN1cnZleVByb3BlcnR5RWRpdG9yU2hvd1dpbmRvdygpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25FZGl0b3JXaW5kb3cub25DYW5TaG93UHJvcGVydHlDYWxsYmFjayA9IGZ1bmN0aW9uIChvYmplY3Q6IGFueSwgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYub25DYW5TaG93T2JqZWN0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGFnZXNFZGl0b3IgPSBuZXcgU3VydmV5UGFnZXNFZGl0b3IoKCkgPT4geyBzZWxmLmFkZFBhZ2UoKTsgfSwgKHBhZ2U6IFN1cnZleS5QYWdlKSA9PiB7IHNlbGYuc3VydmV5T2JqZWN0cy5zZWxlY3RPYmplY3QocGFnZSk7IH0sXHJcbiAgICAgICAgICAgIChpbmRleEZyb206IG51bWJlciwgaW5kZXhUbzogbnVtYmVyKSA9PiB7IHNlbGYubW92ZVBhZ2UoaW5kZXhGcm9tLCBpbmRleFRvKTsgfSwgKHBhZ2U6IFN1cnZleS5QYWdlKSA9PiB7IHNlbGYuZGVsZXRlQ3VycmVudE9iamVjdCgpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleUVtYmVkaW5nID0gbmV3IFN1cnZleUVtYmVkaW5nV2luZG93KCk7XHJcbiAgICAgICAgdGhpcy50b29sYm94VmFsdWUgPSBuZXcgUXVlc3Rpb25Ub29sYm94KHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucXVlc3Rpb25UeXBlcyA/IHRoaXMub3B0aW9ucy5xdWVzdGlvblR5cGVzIDogbnVsbCk7XHJcblxyXG4gICAgICAgIHRoaXMua29WaWV3VHlwZSA9IGtvLm9ic2VydmFibGUoXCJkZXNpZ25lclwiKTtcclxuICAgICAgICB0aGlzLmtvSXNTaG93RGVzaWduZXIgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmtvVmlld1R5cGUoKSA9PSBcImRlc2lnbmVyXCI7IH0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RGVzaWduZXJDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5zaG93RGVzaWduZXIoKTsgfTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVkaXRvckNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLnNob3dKc29uRWRpdG9yKCk7IH07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUZXN0Q2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYuc2hvd1Rlc3RTdXJ2ZXkoKTsgfTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVtYmVkQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYuc2hvd0VtYmVkRWRpdG9yKCk7IH07XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZhbGlkSlNPTkNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmtvR2VuZXJhdGVWYWxpZEpTT04odHJ1ZSk7IH07XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJlYWRhYmxlSlNPTkNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmtvR2VuZXJhdGVWYWxpZEpTT04oZmFsc2UpOyB9O1xyXG4gICAgICAgIHRoaXMucnVuU3VydmV5Q2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYuc2hvd0xpdmVTdXJ2ZXkoKTsgfTtcclxuICAgICAgICB0aGlzLmVtYmVkaW5nU3VydmV5Q2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYuc2hvd1N1cnZleUVtYmVkaW5nKCk7IH07XHJcbiAgICAgICAgdGhpcy5kZWxldGVPYmplY3RDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5kZWxldGVDdXJyZW50T2JqZWN0KCk7IH07XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1Rvb2xib3hJdGVtID0gZnVuY3Rpb24gKGl0ZW0sIGUpIHsgc2VsZi5kb0RyYWdnaW5nVG9vbGJveEl0ZW0oaXRlbS5qc29uLCBlKTsgfTtcclxuICAgICAgICB0aGlzLmNsaWNrVG9vbGJveEl0ZW0gPSBmdW5jdGlvbiAoaXRlbSkgeyBzZWxmLmRvQ2xpY2tUb29sYm94SXRlbShpdGVtLmpzb24pOyB9O1xyXG4gICAgICAgIHRoaXMuZHJhZ0VuZCA9IGZ1bmN0aW9uIChpdGVtLCBlKSB7IHNlbGYuZHJhZ0Ryb3BIZWxwZXIuZW5kKCk7IH07XHJcblxyXG4gICAgICAgIHRoaXMuZG9VbmRvQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYuZG9VbmRvUmVkbyhzZWxmLnVuZG9SZWRvLnVuZG8oKSk7IH07XHJcbiAgICAgICAgdGhpcy5kb1JlZG9DbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5kb1VuZG9SZWRvKHNlbGYudW5kb1JlZG8ucmVkbygpKTsgfTtcclxuXHJcbiAgICAgICAgdGhpcy5qc29uRWRpdG9yID0gbmV3IFN1cnZleUpTT05FZGl0b3IoKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnRleHQgPSBcIlwiO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKHJlbmRlcmVkRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLnNob3dKU09ORWRpdG9yVGFiVmFsdWUgPSBvcHRpb25zICYmIHR5cGVvZiAob3B0aW9ucy5zaG93SlNPTkVkaXRvclRhYikgIT09ICd1bmRlZmluZWQnID8gb3B0aW9ucy5zaG93SlNPTkVkaXRvclRhYiA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93VGVzdFN1cnZleVRhYlZhbHVlID0gb3B0aW9ucyAmJiB0eXBlb2YgKG9wdGlvbnMuc2hvd1Rlc3RTdXJ2ZXlUYWIpICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnMuc2hvd1Rlc3RTdXJ2ZXlUYWIgOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0VtYmVkZWRTdXJ2ZXlUYWJWYWx1ZSA9IG9wdGlvbnMgJiYgdHlwZW9mIChvcHRpb25zLnNob3dFbWJlZGVkU3VydmV5VGFiKSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zLnNob3dFbWJlZGVkU3VydmV5VGFiIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5rb1Nob3dPcHRpb25zKG9wdGlvbnMgJiYgdHlwZW9mIChvcHRpb25zLnNob3dPcHRpb25zKSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zLnNob3dPcHRpb25zIDogZmFsc2UpO1xyXG4gICAgICAgIHRoaXMua29HZW5lcmF0ZVZhbGlkSlNPTih0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmdlbmVyYXRlVmFsaWRKU09OKTtcclxuICAgICAgICBpZihvcHRpb25zICYmIG9wdGlvbnMuZGVzaWduZXJIZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5rb0Rlc2lnbmVySGVpZ2h0KG9wdGlvbnMuZGVzaWduZXJIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihvcHRpb25zICYmIG9wdGlvbnMub2JqZWN0c0ludGVuZCkge1xyXG4gICAgICAgICAgICBTdXJ2ZXlPYmplY3RzLmludGVuZCA9IG9wdGlvbnMub2JqZWN0c0ludGVuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rb0Rlc2lnbmVySGVpZ2h0KClcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvcikgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvci5zZXRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5Rm9yRGVzaWduZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlbmRlcihlbGVtZW50OiBhbnkgPSBudWxsLCBvcHRpb25zOiBhbnkgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudCA9IHRoaXMucmVuZGVyZWRFbGVtZW50O1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGVtcGxhdGVFZGl0b3JIdG1sO1xyXG4gICAgICAgIHNlbGYuYXBwbHlCaW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbG9hZFN1cnZleShzdXJ2ZXlJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIG5ldyBTdXJ2ZXkuZHhTdXJ2ZXlTZXJ2aWNlKCkubG9hZFN1cnZleShzdXJ2ZXlJZCwgZnVuY3Rpb24gKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50ZXh0ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0ZXh0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmtvSXNTaG93RGVzaWduZXIoKSkgcmV0dXJuIHRoaXMuZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmpzb25FZGl0b3IudGV4dDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHRleHRXb3JrZXIgPSBuZXcgU3VydmV5VGV4dFdvcmtlcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRleHRXb3JrZXIuaXNKc29uQ29ycmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRTdXJ2ZXkobmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRleHRXb3JrZXIuc3VydmV5KSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Rlc2lnbmVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5kb1JlZG9DdXJyZW50U3RhdGUodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmtvVmlld1R5cGUoXCJlZGl0b3JcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB0b29sYm94KCk6IFF1ZXN0aW9uVG9vbGJveCB7IHJldHVybiB0aGlzLnRvb2xib3hWYWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBjdXN0b21Ub29sYm94UXVlc3Rpb25NYXhDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50b29sYm94LmNvcGllZEl0ZW1NYXhDb3VudDsgfVxyXG4gICAgcHVibGljIHNldCBjdXN0b21Ub29sYm94UXVlc3Rpb25NYXhDb3VudCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMudG9vbGJveC5jb3BpZWRJdGVtTWF4Q291bnQgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBzdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZVZhbHVlOyB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0U3RhdGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc3RhdGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMua29TdGF0ZSh0aGlzLnN0YXRlKTtcclxuICAgIH1cclxuICAgIHNhdmVObzogbnVtYmVyID0gMDtcclxuICAgIHByb3RlY3RlZCBkb1NhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcInNhdmluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5zYXZlU3VydmV5RnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVObysrO1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVN1cnZleUZ1bmModGhpcy5zYXZlTm8sXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb1NhdmVDYWxsYmFjayhubzogbnVtYmVyLCBpc1N1Y2Nlc3M6IGJvb2xlYW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKFwic2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc2F2ZU5vID09IG5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N1Y2Nlc3MpIHNlbGYuc2V0U3RhdGUoXCJzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9lbHNlIFRPRE9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgc2V0TW9kaWZpZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcIm1vZGlmaWVkXCIpO1xyXG4gICAgICAgIHRoaXMuc2V0VW5kb1JlZG9DdXJyZW50U3RhdGUoKTtcclxuICAgICAgICB0aGlzLm9uTW9kaWZpZWQuZmlyZSh0aGlzLCBudWxsKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0VW5kb1JlZG9DdXJyZW50U3RhdGUoY2xlYXJTdGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGNsZWFyU3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy51bmRvUmVkby5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsT2JqID0gdGhpcy5rb1NlbGVjdGVkT2JqZWN0KCkgPyB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy51bmRvUmVkby5zZXRDdXJyZW50KHRoaXMuc3VydmV5VmFsdWUsIHNlbE9iaiA/IHNlbE9iai5uYW1lIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNhdmVTdXJ2ZXlGdW5jKCkgeyByZXR1cm4gdGhpcy5zYXZlU3VydmV5RnVuY1ZhbHVlOyB9XHJcbiAgICBwdWJsaWMgc2V0IHNhdmVTdXJ2ZXlGdW5jKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNhdmVTdXJ2ZXlGdW5jVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmtvU2hvd1NhdmVCdXR0b24odmFsdWUgIT0gbnVsbCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNob3dPcHRpb25zKCkgeyByZXR1cm4gdGhpcy5rb1Nob3dPcHRpb25zKCk7IH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd09wdGlvbnModmFsdWU6IGJvb2xlYW4pIHsgdGhpcy5rb1Nob3dPcHRpb25zKHZhbHVlKTsgfVxyXG4gICAgcHVibGljIGdldCBzaG93SlNPTkVkaXRvclRhYigpIHsgcmV0dXJuIHRoaXMuc2hvd0pTT05FZGl0b3JUYWJWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93SlNPTkVkaXRvclRhYih2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnNob3dKU09ORWRpdG9yVGFiVmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBzaG93VGVzdFN1cnZleVRhYigpIHsgcmV0dXJuIHRoaXMuc2hvd1Rlc3RTdXJ2ZXlUYWJWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93VGVzdFN1cnZleVRhYih2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnNob3dUZXN0U3VydmV5VGFiVmFsdWUgPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIGdldCBzaG93RW1iZWRlZFN1cnZleVRhYigpIHsgcmV0dXJuIHRoaXMuc2hvd0VtYmVkZWRTdXJ2ZXlUYWJWYWx1ZTsgfVxyXG4gICAgcHVibGljIHNldCBzaG93RW1iZWRlZFN1cnZleVRhYih2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWUgPSB2YWx1ZTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvbkNhblNob3dPYmplY3RQcm9wZXJ0eShvYmplY3Q6IGFueSwgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgb2JqOiBvYmplY3QsIHByb3BlcnR5OiBwcm9wZXJ0eSwgY2FuU2hvdzogdHJ1ZSB9O1xyXG4gICAgICAgIHRoaXMub25DYW5TaG93UHJvcGVydHkuZmlyZSh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5jYW5TaG93O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VGV4dFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmpzb25FZGl0b3IudGV4dCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZFBhZ2UoKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBTdXJ2ZXlIZWxwZXIuZ2V0TmV3UGFnZU5hbWUodGhpcy5zdXJ2ZXkucGFnZXMpO1xyXG4gICAgICAgIHZhciBwYWdlID0gPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5VmFsdWUuYWRkTmV3UGFnZShuYW1lKTtcclxuICAgICAgICB0aGlzLmFkZFBhZ2VUb1VJKHBhZ2UpO1xyXG4gICAgICAgIHRoaXMuc2V0TW9kaWZpZWQoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NTdHJpbmcoc3RyOiBzdHJpbmcpIHsgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoc3RyKTsgfVxyXG4gICAgcHJpdmF0ZSBtb3ZlUGFnZShpbmRleEZyb206IG51bWJlciwgaW5kZXhUbzogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSA8U3VydmV5LlBhZ2U+dGhpcy5zdXJ2ZXkucGFnZXNbaW5kZXhGcm9tXTtcclxuICAgICAgICB0aGlzLnN1cnZleS5wYWdlcy5zcGxpY2UoaW5kZXhGcm9tLCAxKTtcclxuICAgICAgICB0aGlzLnN1cnZleS5wYWdlcy5zcGxpY2UoaW5kZXhUbywgMCwgcGFnZSk7XHJcbiAgICAgICAgdGhpcy5wYWdlc0VkaXRvci5zdXJ2ZXkgPSB0aGlzLnN1cnZleTtcclxuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHBhZ2UpXHJcbiAgICAgICAgdGhpcy5zZXRNb2RpZmllZCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRQYWdlVG9VSShwYWdlOiBTdXJ2ZXkuUGFnZSkge1xyXG4gICAgICAgIHRoaXMucGFnZXNFZGl0b3Iuc3VydmV5ID0gdGhpcy5zdXJ2ZXlWYWx1ZTtcclxuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuYWRkUGFnZShwYWdlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9PblF1ZXN0aW9uQWRkZWQocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UsIHBhcmVudFBhbmVsOiBhbnkpIHtcclxuICAgICAgICB2YXIgcGFnZSA9IDxTdXJ2ZXkuUGFnZT50aGlzLnN1cnZleS5nZXRQYWdlQnlFbGVtZW50KHF1ZXN0aW9uKTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBwYWdlOiBwYWdlIH07XHJcbiAgICAgICAgdGhpcy5vblF1ZXN0aW9uQWRkZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuYWRkRWxlbWVudChxdWVzdGlvbiwgcGFyZW50UGFuZWwpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5LnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBkb09uRWxlbWVudFJlbW92ZWQocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMucmVtb3ZlT2JqZWN0KHF1ZXN0aW9uKTtcclxuICAgICAgICB0aGlzLnN1cnZleS5yZW5kZXIoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9PblBhbmVsQWRkZWQocGFuZWw6IFN1cnZleS5QYW5lbCwgcGFyZW50UGFuZWw6IGFueSkge1xyXG4gICAgICAgIHZhciBwYWdlID0gPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LmdldFBhZ2VCeUVsZW1lbnQocGFuZWwpO1xyXG4gICAgICAgIHZhciBvcHRpb25zID0geyBwYW5lbDogcGFuZWwsIHBhZ2U6IHBhZ2UgfTtcclxuICAgICAgICB0aGlzLm9uUGFuZWxBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5hZGRFbGVtZW50KHBhbmVsLCBwYXJlbnRQYW5lbCk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXkucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksIG9iajogYW55LCBuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdmFyIGlzRGVmYXVsdCA9IHByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICBvYmpbcHJvcGVydHkubmFtZV0gPSBuZXdWYWx1ZTtcclxuICAgICAgICBpZiAocHJvcGVydHkubmFtZSA9PSBcIm5hbWVcIikge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMubmFtZUNoYW5nZWQob2JqKTtcclxuICAgICAgICAgICAgaWYgKFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaikgPT0gT2JqVHlwZS5QYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzRWRpdG9yLmNoYW5nZU5hbWUoPFN1cnZleS5QYWdlPm9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRNb2RpZmllZCgpO1xyXG4gICAgICAgIGlmKG9iaiA9PT0gdGhpcy5zdXJ2ZXkgJiYgcHJvcGVydHkubmFtZSA9PSBcImxvY2FsZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3IuT2JqZWN0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleS5yZW5kZXIoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9VbmRvUmVkbyhpdGVtOiBVbmRvUmVkb0l0ZW0pIHtcclxuICAgICAgICB0aGlzLmluaXRTdXJ2ZXkoaXRlbS5zdXJ2ZXlKU09OKTtcclxuICAgICAgICBpZiAoaXRlbS5zZWxlY3RlZE9iak5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHNlbE9iaiA9IHRoaXMuZmluZE9iakJ5TmFtZShpdGVtLnNlbGVjdGVkT2JqTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChzZWxPYmopIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zZWxlY3RPYmplY3Qoc2VsT2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHRoaXMudW5kb1JlZG8ua29DYW5VbmRvKCkgPyBcIm1vZGlmaWVkXCIgOiBcInNhdmVkXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kT2JqQnlOYW1lKG5hbWU6IHN0cmluZyk6IFN1cnZleS5CYXNlIHtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeU5hbWUobmFtZSk7XHJcbiAgICAgICAgaWYgKHBhZ2UpIHJldHVybiBwYWdlO1xyXG4gICAgICAgIHZhciBxdWVzdGlvbiA9IDxTdXJ2ZXkuUXVlc3Rpb25CYXNlPnRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbikgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjYW5Td2l0Y2hWaWV3VHlwZShuZXdUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAobmV3VHlwZSAmJiB0aGlzLmtvVmlld1R5cGUoKSA9PSBuZXdUeXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMua29WaWV3VHlwZSgpID09IFwiZGVzaWduZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25FZGl0b3IudGV4dCA9IHRoaXMuZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5rb1ZpZXdUeXBlKCkgIT0gXCJlZGl0b3JcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmpzb25FZGl0b3IuaXNKc29uQ29ycmVjdCkge1xyXG4gICAgICAgICAgICBhbGVydCh0aGlzLmdldExvY1N0cmluZyhcImVkLmNvcnJlY3RKU09OXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRTdXJ2ZXkobmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMuanNvbkVkaXRvci5zdXJ2ZXkpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzaG93RGVzaWduZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhblN3aXRjaFZpZXdUeXBlKFwiZGVzaWduZXJcIikpIHJldHVybjtcclxuICAgICAgICB0aGlzLmtvVmlld1R5cGUoXCJkZXNpZ25lclwiKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzaG93SnNvbkVkaXRvcigpIHtcclxuICAgICAgICBpZiAodGhpcy5rb1ZpZXdUeXBlKCkgPT0gXCJlZGl0b3JcIikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuanNvbkVkaXRvci5zaG93KHRoaXMuZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpKTtcclxuICAgICAgICB0aGlzLmtvVmlld1R5cGUoXCJlZGl0b3JcIik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2hvd1Rlc3RTdXJ2ZXkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhblN3aXRjaFZpZXdUeXBlKG51bGwpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zaG93TGl2ZVN1cnZleSgpO1xyXG4gICAgICAgIHRoaXMua29WaWV3VHlwZShcInRlc3RcIik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2hvd0VtYmVkRWRpdG9yKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5Td2l0Y2hWaWV3VHlwZShcImVtYmVkXCIpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zaG93U3VydmV5RW1iZWRpbmcoKTtcclxuICAgICAgICB0aGlzLmtvVmlld1R5cGUoXCJlbWJlZFwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpIHtcclxuICAgICAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzLnN1cnZleSk7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZ2VuZXJhdGVWYWxpZEpTT04pIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAxKTtcclxuICAgICAgICByZXR1cm4gbmV3IFN1cnZleUpTT041KCkuc3RyaW5naWZ5KGpzb24sIG51bGwsIDEpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZE9iamVjdENoYW5nZWQob2JqOiBTdXJ2ZXkuQmFzZSkge1xyXG4gICAgICAgIHZhciBjYW5EZWxldGVPYmplY3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yLnNlbGVjdGVkT2JqZWN0ID0gb2JqO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmVyYnMub2JqID0gb2JqO1xyXG4gICAgICAgIHZhciBvYmpUeXBlID0gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2JqKTtcclxuICAgICAgICBpZiAob2JqVHlwZSA9PSBPYmpUeXBlLlBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPSA8U3VydmV5LlBhZ2U+b2JqO1xyXG4gICAgICAgICAgICBjYW5EZWxldGVPYmplY3QgPSB0aGlzLnN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqVHlwZSA9PSBPYmpUeXBlLlF1ZXN0aW9uIHx8IG9ialR5cGUgPT0gT2JqVHlwZS5QYW5lbCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgPSBvYmo7XHJcbiAgICAgICAgICAgIGNhbkRlbGV0ZU9iamVjdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlID0gdGhpcy5zdXJ2ZXkuZ2V0UGFnZUJ5UXVlc3Rpb24odGhpcy5zdXJ2ZXkuc2VsZWN0ZWRFbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtvQ2FuRGVsZXRlT2JqZWN0KGNhbkRlbGV0ZU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFwcGx5QmluZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZEVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGtvLmNsZWFuTm9kZSh0aGlzLnJlbmRlcmVkRWxlbWVudCk7XHJcbiAgICAgICAga28uYXBwbHlCaW5kaW5ncyh0aGlzLCB0aGlzLnJlbmRlcmVkRWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlqcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VydmV5anNcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5anMpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleWpzLm9ua2V5ZG93biA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gNDYpIHNlbGYuZGVsZXRlUXVlc3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMzggfHwgZS5rZXlDb2RlID09IDQwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RRdWVzdGlvbihlLmtleUNvZGUgPT0gMzgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleWpzRXhhbXBsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VydmV5anNFeGFtcGxlXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRTdXJ2ZXkobmV3IFN1cnZleUpTT041KCkucGFyc2UoU3VydmV5RWRpdG9yLmRlZmF1bHROZXdTdXJ2ZXlUZXh0KSk7XHJcbiAgICAgICAgdGhpcy5zZXRVbmRvUmVkb0N1cnJlbnRTdGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5qc29uRWRpdG9yLmluaXQoKTtcclxuICAgICAgICBpZihqUXVlcnkgJiYgalF1ZXJ5KClbXCJzZWxlY3QyXCJdKSB7XHJcbiAgICAgICAgICAgIGpRdWVyeShcIiNvYmplY3RTZWxlY3RvclwiKVtcInNlbGVjdDJcIl0oKTtcclxuICAgICAgICAgICAgalF1ZXJ5KFwiI29iamVjdFNlbGVjdG9yXCIpLndpZHRoKFwiMTAwJVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGluaXRTdXJ2ZXkoanNvbjogYW55KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSBuZXcgU3VydmV5Rm9yRGVzaWduZXIoKTtcclxuICAgICAgICB0aGlzLmRyYWdEcm9wSGVscGVyID0gbmV3IERyYWdEcm9wSGVscGVyKDxTdXJ2ZXkuSVN1cnZleT50aGlzLnN1cnZleSwgZnVuY3Rpb24gKCkgeyBzZWxmLnNldE1vZGlmaWVkKCkgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZVtcInNldEpzb25PYmplY3RcIl0oanNvbik7IC8vVE9ET1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleVZhbHVlLmlzRW1wdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZVtcInNldEpzb25PYmplY3RcIl0obmV3IFN1cnZleUpTT041KCkucGFyc2UoU3VydmV5RWRpdG9yLmRlZmF1bHROZXdTdXJ2ZXlUZXh0KSk7IC8vVE9ET1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlW1wiZHJhZ0Ryb3BIZWxwZXJcIl0gPSB0aGlzLmRyYWdEcm9wSGVscGVyO1xyXG4gICAgICAgIHRoaXMuc3VydmV5LnJlbmRlcih0aGlzLnN1cnZleWpzKTtcclxuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5wYWdlc0VkaXRvci5zdXJ2ZXkgPSB0aGlzLnN1cnZleTtcclxuICAgICAgICB0aGlzLnBhZ2VzRWRpdG9yLnNldFNlbGVjdGVkUGFnZSg8U3VydmV5LlBhZ2U+dGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmVyYnMuc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZS5vblNlbGVjdGVkRWxlbWVudENoYW5nZWQuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHsgc2VsZi5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChzZW5kZXJbXCJzZWxlY3RlZEVsZW1lbnRcIl0pOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uRWRpdFF1ZXN0aW9uLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7IHNlbGYuc2hvd1F1ZXN0aW9uRWRpdG9yKHNlbGYua29TZWxlY3RlZE9iamVjdCgpLnZhbHVlKTsgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZS5vbkNvcHlRdWVzdGlvbi5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4geyBzZWxmLmFkZEN1c3RvbVRvb2xib3hRdWVzdGlvbihzZWxmLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSk7IH0pO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUub25GYXN0Q29weVF1ZXN0aW9uLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7IHNlbGYuZmFzdENvcHlRdWVzdGlvbihzZWxmLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSk7IH0pO1xyXG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUub25EZWxldGVDdXJyZW50T2JqZWN0LmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7IHNlbGYuZGVsZXRlQ3VycmVudE9iamVjdCgpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uUHJvY2Vzc0h0bWwuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHsgb3B0aW9ucy5odG1sID0gc2VsZi5wcm9jZXNzSHRtbChvcHRpb25zLmh0bWwpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7IHNlbGYucGFnZXNFZGl0b3Iuc2V0U2VsZWN0ZWRQYWdlKDxTdXJ2ZXkuUGFnZT5zZW5kZXIuY3VycmVudFBhZ2UpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uUXVlc3Rpb25BZGRlZC5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4geyBzZWxmLmRvT25RdWVzdGlvbkFkZGVkKG9wdGlvbnMucXVlc3Rpb24sIG9wdGlvbnMucGFyZW50UGFuZWwpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uUXVlc3Rpb25SZW1vdmVkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7IHNlbGYuZG9PbkVsZW1lbnRSZW1vdmVkKG9wdGlvbnMucXVlc3Rpb24pOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uUGFuZWxBZGRlZC5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4geyBzZWxmLmRvT25QYW5lbEFkZGVkKG9wdGlvbnMucGFuZWwsIG9wdGlvbnMucGFyZW50UGFuZWwpOyB9KTtcclxuICAgICAgICB0aGlzLnN1cnZleVZhbHVlLm9uUGFuZWxSZW1vdmVkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7IHNlbGYuZG9PbkVsZW1lbnRSZW1vdmVkKG9wdGlvbnMucGFuZWwpOyB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcHJvY2Vzc0h0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWh0bWwpIHJldHVybiBodG1sO1xyXG4gICAgICAgIHZhciBzY3JpcHRSZWdFeCA9IC88c2NyaXB0XFxiW148XSooPzooPyE8XFwvc2NyaXB0Pik8W148XSopKjxcXC9zY3JpcHQ+L2dpO1xyXG4gICAgICAgIHdoaWxlIChzY3JpcHRSZWdFeC50ZXN0KGh0bWwpKSB7XHJcbiAgICAgICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2Uoc2NyaXB0UmVnRXgsIFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaHRtbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZG9EcmFnZ2luZ1Rvb2xib3hJdGVtKGpzb246IGFueSwgZSkge1xyXG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BIZWxwZXIuc3RhcnREcmFnVG9vbGJveEl0ZW0oZSwgdGhpcy5nZXROZXdOYW1lKGpzb25bXCJ0eXBlXCJdKSwganNvbik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvQ2xpY2tUb29sYm94SXRlbShqc29uOiBhbnkpIHtcclxuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmV3TmFtZShqc29uW1widHlwZVwiXSk7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoanNvbltcInR5cGVcIl0pO1xyXG4gICAgICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHF1ZXN0aW9uKTtcclxuICAgICAgICBxdWVzdGlvbi5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmRvQ2xpY2tRdWVzdGlvbkNvcmUocXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROZXdOYW1lKHR5cGU6IHN0cmluZykgOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0eXBlID09IFwicGFuZWxcIiA/IHRoaXMuZ2V0TmV3UGFuZWxOYW1lKCkgOiB0aGlzLmdldE5ld1F1ZXN0aW9uTmFtZSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROZXdRdWVzdGlvbk5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE5ld1F1ZXN0aW9uTmFtZSh0aGlzLnN1cnZleS5nZXRBbGxRdWVzdGlvbnMoKSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldE5ld1BhbmVsTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3UGFuZWxOYW1lKHRoaXMuZ2V0QWxsUGFuZWxzKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRBbGxQYW5lbHMoKTogQXJyYXk8YW55PiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleS5wYWdlcy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQYW5lbHModGhpcy5zdXJ2ZXkucGFnZXNbaV0sIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFkZFBhbmVscyhwYW5lbDogYW55LCByZXN1bHQ6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcGFuZWwuZWxlbWVudHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgICAgIGlmKCFwYW5lbC5lbGVtZW50c1tpXS5pc1BhbmVsKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFuZWwuZWxlbWVudHNbaV0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZFBhbmVscyhwYW5lbC5lbGVtZW50c1tpXSwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRvQ2xpY2tRdWVzdGlvbkNvcmUocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlO1xyXG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHBhZ2UucXVlc3Rpb25zLmluZGV4T2YodGhpcy5zdXJ2ZXkuc2VsZWN0ZWRFbGVtZW50KSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2UuYWRkUXVlc3Rpb24ocXVlc3Rpb24sIGluZGV4KTtcclxuICAgICAgICB0aGlzLmRyYWdEcm9wSGVscGVyLnNjcm9sbFRvRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChxdWVzdGlvbi5pZCkpO1xyXG4gICAgICAgIHRoaXMuc2V0TW9kaWZpZWQoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZGVsZXRlUXVlc3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE9iakFzUXVlc3Rpb24oKTtcclxuICAgICAgICBpZiAocXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDdXJyZW50T2JqZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZWxlY3RRdWVzdGlvbihpc1VwOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE9iakFzUXVlc3Rpb24oKTtcclxuICAgICAgICBpZiAocXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE5leHRRdWVzdGlvbihpc1VwKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRPYmpBc1F1ZXN0aW9uKCk6IFN1cnZleS5RdWVzdGlvbkJhc2Uge1xyXG4gICAgICAgIHZhciBvYmogPSB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZTtcclxuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaikgPT0gT2JqVHlwZS5RdWVzdGlvbiA/IDxTdXJ2ZXkuUXVlc3Rpb25CYXNlPihvYmopOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBkZWxldGVDdXJyZW50T2JqZWN0KCkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlT2JqZWN0KHRoaXMua29TZWxlY3RlZE9iamVjdCgpLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzaG93UXVlc3Rpb25FZGl0b3IocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkVkaXRvcldpbmRvdy5zaG93KHF1ZXN0aW9uLCBmdW5jdGlvbiAocXVlc3Rpb24pIHsgc2VsZi5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7IH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5uYW1lQ2hhbmdlZChxdWVzdGlvbik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvci5PYmplY3RDaGFuZ2VkKCk7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RpZmllZCgpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5LnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFkZEN1c3RvbVRvb2xib3hRdWVzdGlvbihxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHRoaXMudG9vbGJveC5hZGRDb3BpZWRJdGVtKHF1ZXN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmFzdENvcHlRdWVzdGlvbihxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSkge1xyXG4gICAgICAgIHZhciBqc29uID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHF1ZXN0aW9uKTtcclxuICAgICAgICBqc29uLnR5cGUgPSBxdWVzdGlvbi5nZXRUeXBlKCk7XHJcbiAgICAgICAgdGhpcy5kb0NsaWNrVG9vbGJveEl0ZW0oIGpzb24gKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlbGV0ZU9iamVjdChvYmo6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5yZW1vdmVPYmplY3Qob2JqKTtcclxuICAgICAgICB2YXIgb2JqVHlwZSA9IFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaik7XHJcbiAgICAgICAgaWYgKG9ialR5cGUgPT0gT2JqVHlwZS5QYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnJlbW92ZVBhZ2Uob2JqKTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlc0VkaXRvci5yZW1vdmVQYWdlKG9iaik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UucmVtb3ZlRWxlbWVudChvYmopO1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRNb2RpZmllZCgpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5LnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzaG93TGl2ZVN1cnZleSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3VydmV5anNFeGFtcGxlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIGpzb24gPSB0aGlzLmdldFN1cnZleUpTT04oKTtcclxuICAgICAgICBpZiAoanNvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChqc29uLmNvb2tpZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvb2tpZU5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuU3VydmV5KGpzb24pO1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBzdXJ2ZXlqc0V4YW1wbGVSZXN1bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdXJ2ZXlqc0V4YW1wbGVSZXN1bHRzXCIpO1xyXG4gICAgICAgICAgICB2YXIgc3VydmV5anNFeGFtcGxlcmVSdW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1cnZleWpzRXhhbXBsZXJlUnVuXCIpO1xyXG4gICAgICAgICAgICBpZiAoc3VydmV5anNFeGFtcGxlUmVzdWx0cykgc3VydmV5anNFeGFtcGxlUmVzdWx0cy5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoc3VydmV5anNFeGFtcGxlcmVSdW4pIHN1cnZleWpzRXhhbXBsZXJlUnVuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgc3VydmV5Lm9uQ29tcGxldGUuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXkpID0+IHsgaWYgKHN1cnZleWpzRXhhbXBsZVJlc3VsdHMpIHN1cnZleWpzRXhhbXBsZVJlc3VsdHMuaW5uZXJIVE1MID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5zdXJ2ZXlSZXN1bHRzXCIpICsgSlNPTi5zdHJpbmdpZnkoc3VydmV5LmRhdGEpOyBpZiAoc3VydmV5anNFeGFtcGxlcmVSdW4pIHN1cnZleWpzRXhhbXBsZXJlUnVuLnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9KTtcclxuICAgICAgICAgICAgc3VydmV5LnJlbmRlcih0aGlzLnN1cnZleWpzRXhhbXBsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlqc0V4YW1wbGUuaW5uZXJIVE1MID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5jb3JyZWN0SlNPTlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNob3dTdXJ2ZXlFbWJlZGluZygpIHtcclxuICAgICAgICB2YXIganNvbiA9IHRoaXMuZ2V0U3VydmV5SlNPTigpO1xyXG4gICAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmcuanNvbiA9IGpzb247XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlFbWJlZGluZy5zdXJ2ZXlJZCA9IHRoaXMuc3VydmV5SWQ7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlFbWJlZGluZy5zdXJ2ZXlQb3N0SWQgPSB0aGlzLnN1cnZleVBvc3RJZDtcclxuICAgICAgICB0aGlzLnN1cnZleUVtYmVkaW5nLmdlbmVyYXRlVmFsaWRKU09OID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5nZW5lcmF0ZVZhbGlkSlNPTjtcclxuICAgICAgICB0aGlzLnN1cnZleUVtYmVkaW5nLnNob3coKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0U3VydmV5SlNPTigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmtvSXNTaG93RGVzaWduZXIoKSkgcmV0dXJuIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzLnN1cnZleSk7XHJcbiAgICAgICAgaWYgKHRoaXMuanNvbkVkaXRvci5pc0pzb25Db3JyZWN0KSByZXR1cm4gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMuanNvbkVkaXRvci5zdXJ2ZXkpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjcmVhdGVBbm5vdGF0aW9ucyh0ZXh0OiBzdHJpbmcsIGVycm9yczogYW55W10pOiBBY2VBamF4LkFubm90YXRpb25bXSB7XHJcbiAgICAgICAgdmFyIGFubm90YXRpb25zID0gbmV3IEFycmF5PEFjZUFqYXguQW5ub3RhdGlvbj4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSBlcnJvcnNbaV07XHJcbiAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uOiBBY2VBamF4LkFubm90YXRpb24gPSB7IHJvdzogZXJyb3IucG9zaXRpb24uc3RhcnQucm93LCBjb2x1bW46IGVycm9yLnBvc2l0aW9uLnN0YXJ0LmNvbHVtbiwgdGV4dDogZXJyb3IudGV4dCwgdHlwZTogXCJlcnJvclwiIH07XHJcbiAgICAgICAgICAgIGFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9ucztcclxuICAgIH1cclxufVxyXG5cclxuU3VydmV5LlN1cnZleS5jc3NUeXBlID0gXCJib290c3RyYXBcIjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZWRpdG9yLnRzIiwiaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIlxyXG5cclxudmFyIGZyZW5jaFRyYW5zbGF0aW9uID0ge1xyXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcclxuICBlZDoge1xyXG4gICAgYWRkTmV3UGFnZTogJ0Fqb3V0ZXIgdW5lIHBhZ2UnLFxyXG4gICAgY29ycmVjdEpTT046ICdTVlAgY29ycmlnZXIgbGUganNvbicsXHJcbiAgICBkZWxTZWxPYmplY3Q6ICdTdXBwcmltZXIgbFxcJ29iamV0IHPDqWxlY3Rpb25uw6knLFxyXG4gICAgZGVzaWduZXI6ICdEZXNpZ25lciBkZSBxdWVzdGlvbm5haXJlJyxcclxuICAgIGVtYmVkU3VydmV5OiAnSW50w6lncmVyIGxlIHF1ZXN0aW9ubmFpcmUnLFxyXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046ICdHw6luw6lyZXIgdW4gSlNPTiBsaXNpYmxlJyxcclxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiAnR8OpbsOpcmVyIHVuIEpTT04gdmFsaWRlJyxcclxuICAgIGpzb25FZGl0b3I6ICdFZGl0ZXIgSlNPTicsXHJcbiAgICBuZXdQYWdlTmFtZTogJ3BhZ2UnLFxyXG4gICAgbmV3UXVlc3Rpb25OYW1lOiAncXVlc3Rpb24nLFxyXG4gICAgb3B0aW9uczogJ09wdGlvbnMnLFxyXG4gICAgcmVkbzogJ1LDqXRhYmxpcicsXHJcbiAgICBzYXZlU3VydmV5OiAnU2F1dmVnYXJkZXIgbGUgcXVlc3Rpb25uYWlyZScsXHJcbiAgICBzdXJ2ZXlSZXN1bHRzOiAnUsOpc3VsdGF0IGR1IHF1ZXN0aW9ubmFpcmU6ICcsXHJcbiAgICB0ZXN0U3VydmV5OiAnVGVzdGVyIGxlIHF1ZXN0aW9ubmFpcmUnLFxyXG4gICAgdGVzdFN1cnZleUFnYWluOiAnVGVzdGVyIMOgIG5vdXZlYXUgbGUgcXVlc3Rpb25uYWlyZScsXHJcbiAgICB0ZXN0U3VydmV5V2lkdGg6ICdMYXJnZXVyIGR1IHF1ZXN0aW9ubmFpcmU6ICcsXHJcbiAgICB0b29sYm94OiAnQm9pdGUgw6Agb3V0aWxzJyxcclxuICAgIHVuZG86ICdBbm51bGVyJ1xyXG4gIH0sXHJcbiAgLy9FbWJlZCB3aW5kb3dcclxuICBldzoge1xyXG4gICAgYW5ndWxhcjogJ1V0aWxpc2VyIGxhIHZlcnNpb24gQW5ndWxhcicsXHJcbiAgICBib290c3RyYXA6ICdQb3VyIEJvb3RzdHJhcCBmcmFtZXdvcmsnLFxyXG4gICAganF1ZXJ5OiAnVXRpbGlzZXIgbGEgdmVyc2lvbiBqUXVlcnknLFxyXG4gICAga25vY2tvdXQ6ICdVdGlsaXNlciBsYSB2ZXJzaW9uIEtub2Nrb3V0JyxcclxuICAgIGxvYWRGcm9tU2VydmVyOiAnQ2hhcmdlciBsZSBKU09OIGR1IHF1ZXN0aW9ubmFpcmUgZGVwdWlzIHVuIHNlcnZldXInLFxyXG4gICAgcmVhY3Q6ICdVdGlsaXNlciBsYSB2ZXJzaW9uIFJlYWN0JyxcclxuICAgIHNob3dJbldpbmRvdzogJ0FmZmljaGVyIGxlIHF1ZXN0aW9ubmFpcmUgZGFucyB1bmUgZmVuw6p0cmUnLFxyXG4gICAgc2hvd09uUGFnZTogJ0FmZmljaGVyIGxlIHF1ZXN0aW9ubmFpcmUgZGFucyB1bmUgcGFnZScsXHJcbiAgICBzdGFuZGFyZDogJ1BhcyBkZSBib290c3RyYXAnLFxyXG4gICAgdGl0bGVIdG1sOiAnSFRNTCcsXHJcbiAgICB0aXRsZUphdmFTY3JpcHQ6ICdKYXZhU2NyaXB0JyxcclxuICAgIHRpdGxlU2NyaXB0OiAnU2NyaXB0cyBldCBzdHlsZXMnLFxyXG4gICAgdnVlOiAnVXRpbGlzZXIgbGEgdmVyc2lvbiBWdWUnXHJcbiAgfSxcclxuICAvL09wZXJhdG9yc1xyXG4gIG9wOiB7XHJcbiAgICBjb250YWluczogJ2NvbnRpZW50JyxcclxuICAgIGVtcHR5OiAnZXN0IHZpZGUnLFxyXG4gICAgZXF1YWw6ICfDqWdhbCcsXHJcbiAgICBncmVhdGVyOiAnc3Vww6lyaWV1cicsXHJcbiAgICBncmVhdGVyb3JlcXVhbDogJ3N1cMOpcmlldXIgb3Ugw6lnYWwnLFxyXG4gICAgbGVzczogJ3BsdXMgcGV0aXQnLFxyXG4gICAgbGVzc29yZXF1YWw6ICdwbHVzIHBldGl0IG91IMOpZ2FsJyxcclxuICAgIG5vdGNvbnRhaW5zOiAnbmUgY29udGllbnQgcGFzJyxcclxuICAgIG5vdGVtcHR5OiAnblxcJ2VzdCBwYXMgdmlkZScsXHJcbiAgICBub3RlcXVhbDogJ25cXCdlc3QgcGFzIMOpZ2FsJ1xyXG4gIH0sXHJcbiAgLy9Qcm9wZXJ0aWVzXHJcbiAgcDoge1xyXG4gICAgYWRkUm93VGV4dDonQm91dG9uIGFqb3V0ZXIgdW5lIGxpZ25lJyxcclxuICAgIGNlbGxUeXBlOiAnVHlwZSBkZSBjZWxsdWxlJyxcclxuICAgIGNob2ljZXM6ICdDaG9peCcsXHJcbiAgICBjaG9pY2VzQnlVcmw6ICdDaG9peCBwYXIgQVBJJyxcclxuICAgIGNob2ljZXNPcmRlcjogJ09yZHJlIGRlcyBjaG9peCcsXHJcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogJ0NhY2hlciBsZXMgdmFsZXVyIGludmlzaWJsZXMnLFxyXG4gICAgY29sQ291bnQ6ICdOb21icmUgZGUgY29sb25uZXMnLFxyXG4gICAgY29sczogJ05vbWJyZSBkZSBjb2xzJyxcclxuICAgIGNvbHVtbkNvbENvdW50OiAnTm9tYnJlIGRlIGNvbG9ubmVzJyxcclxuICAgIGNvbHVtbk1pbldpZHRoOiAnTGFyZ2V1ciBtaW5pbWFsZSBkZXMgY29sb25uZXMnLFxyXG4gICAgY29sdW1uczogJ0NvbG9ubmVzJyxcclxuICAgIGNvbW1lbnRUZXh0OiAnRGVzY3JpcHRpb24gY2hhbXAgY29tbWVudGFpcmUnLFxyXG4gICAgY29tcGxldGVUZXh0OiAnVGV4dGUgcXVlc3Rpb25uYWlyZSBmaW5hbGlzw6knLFxyXG4gICAgY29tcGxldGVkSHRtbDogJ0h0bWwgcXVlc3Rpb25uYWlyZSBmaW5hbGlzw6knLFxyXG4gICAgY29va2llTmFtZTogJ05vbSBkdSBjb29raWUnLFxyXG4gICAgZWRpdDogJ0VkaXRlcicsXHJcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6ICdGb2N1cyBzdXIgbGEgcHJlbWnDqHJlIHF1ZXN0aW9uIGF1dG9tYXRpcXVlbWVudCcsXHJcbiAgICBnb05leHRQYWdlQXV0b21hdGljOiAnQWxsZXIgw6AgbGEgcGFnZSBzdWl2YW50ZSBhdXRvbWF0aXF1ZW1lbnQnLFxyXG4gICAgaGFzQ29tbWVudDogJ0NoYW1wcyBjb21tZW50YWlyZSA/JyxcclxuICAgIGhhc090aGVyOiAnQ2hvaXggYXV0cmUgPycsXHJcbiAgICBob3Jpem9udGFsU2Nyb2xsOiAnU2Nyb2xsIGhvcml6b250YWwnLFxyXG4gICAgaW1hZ2VIZWlnaHQ6ICdIYXV0ZXVyIGRlIGwgXFwnaW1hZ2UnLFxyXG4gICAgaW1hZ2VXaWR0aDogJ0xhcmdldXIgZGUgbFxcJ2ltYWdlJyxcclxuICAgIGluZGVudDogJ0luZGVudGF0aW9uJyxcclxuICAgIGlucHV0VHlwZTogJ1R5cGUgZGUgY2hhbXBzJyxcclxuICAgIGlzQWxsUm93UmVxdWlyZWQ6ICdUb3V0ZXMgbGVzIGxpZ25lcyBzb250LWVsbGUgb2JsaWdhdG9pcmVzID8nLFxyXG4gICAgaXNSZXF1aXJlZDogJ1JlcXVpcyA/JyxcclxuICAgIGl0ZW1TaXplOiAnTm9tYnJlIG1heGltdW0gZGUgY2FyYWN0w6hyZXMnLFxyXG4gICAgaXRlbXM6ICdJdGVtcycsXHJcbiAgICBsb2NhbGU6ICdMYW5ndWUnLFxyXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gbm90ZSBtYXhpbXVtJyxcclxuICAgIG1heFNpemU6ICdUYWlsbGUgbWF4aW11bScsXHJcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiBub3RlIG1pbmltdW0nLFxyXG4gICAgbWluUm93Q291bnQ6ICdOb21icmUgZGUgbGlnbmUgbWluaW1hbCcsXHJcbiAgICBtb2RlOiAnTW9kZSBkXFwnYWZmaWNoYWdlJyxcclxuICAgIG5hbWU6ICdOb20nLFxyXG4gICAgb3B0aW9uc0NhcHRpb246ICdUZXh0ZSBwYXIgZMOpZmF1dCcsXHJcbiAgICBvdGhlckVycm9yVGV4dDogJ1RleHRlIEVycmV1ciBjaGFtcHMgYXV0cmUnLFxyXG4gICAgb3RoZXJUZXh0OiB7IG5hbWU6ICdUZXh0IGF1dHJlJywgdGl0bGU6ICdDaGFtcCBjb21tZW50YWlyZSBvdSBjaG9peCBhdXRyZScgfSxcclxuICAgIHBhZ2VOZXh0VGV4dDogJ0JvdXRvbiBwYWdlIHN1aXZhbnRlJyxcclxuICAgIHBhZ2VQcmV2VGV4dDogJ0JvdXRvbiBwYWdlIHByw6ljw6lkZW50ZScsXHJcbiAgICBwYWdlX3RpdGxlOiB7IG5hbWU6ICd0aXRyZScsIHRpdGxlOiAnVGl0cmUgZGUgbGEgcGFnZScgfSxcclxuICAgIHBsYWNlSG9sZGVyOiAnUGxhY2VIb2xkZXIgKGluZGljZSBkYW5zIGxlIGNoYW1wcyknLFxyXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiAnSW5kZXggZGUgbnVtw6lyb3RhdGlvbiBkZXMgcXVlc3Rpb24nLFxyXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiAnRW1wbGFjZW1lbnQgdGl0cmUgcXVlc3Rpb24nLFxyXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOiB7IG5hbWU6ICdUZW1wbGF0ZSBkXFwnYWZmaWNoYWdlIGRlcyBxdWVzdGlvbicsIHRpdGxlOiAnRXhlbXBsZToge25vfSkge3RpdGxlfSB7cmVxdWlyZX06JyB9LFxyXG4gICAgcmF0ZVZhbHVlczogJ0JhcsOobWUnLFxyXG4gICAgcmVtb3ZlUm93VGV4dDogJ0JvdXRvbiBzdXBwcmltZXIgdW5lIGxpZ25lJyxcclxuICAgIHJlcXVpcmVkVGV4dDogJ1RleHRlIHBvdXIgbGVzIGNoYW1wcyByZXF1aXMnLFxyXG4gICAgcm93Q291bnQ6J05vbWJyZSBkZSBsaWduZXMnLFxyXG4gICAgcm93czonTm9tYnJlIGRlIGxpZ25lJyxcclxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiAnJyxcclxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiAnVm9pciBsYSBwYWdlIGZvcm11bGFpcmUgY29tcGzDqXTDqSA/JyxcclxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogJ0JvdXRvbnMgZGUgbmF2aWdhdGlvbicsXHJcbiAgICBzaG93UGFnZU51bWJlcnM6ICdOdW3DqXJvdGF0aW9uIGRlcyBwYWdlcycsXHJcbiAgICBzaG93UGFnZVRpdGxlczogJ1RpdHJlIGRlcyBwYWdlcycsXHJcbiAgICBzaG93UHJldmlldzogJ1ZvaXIgbGEgcHLDqXZpc3VhbGlzYXRpb24nLFxyXG4gICAgc2hvd1Byb2dyZXNzQmFyOiAnQmFycmUgZGUgcHJvZ3Jlc3Npb24nLFxyXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogJ051bcOpcm90YXRpb24gZGVzIHF1ZXN0aW9ucycsXHJcbiAgICBzaG93VGl0bGU6ICdBZmZpY2hlciBsZSB0aXRyZScsXHJcbiAgICBzaXplOiAnTm9tYnJlIG1heGltdW0gZGUgY2FyYWN0w6hyZXMnLFxyXG4gICAgc3RhcnRXaXRoTmV3TGluZTogJ0NvbW1lbmNlciBhdmVjIHVuZSBub3V2ZWxsZSBsaWduZScsXHJcbiAgICBzdG9yZURhdGFBc1RleHQ6ICdTdG9ja2VyIGxlcyBkb25uw6llcyBjb21tZSBkdSB0ZXh0JyxcclxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiAnU2F1dmVnYXJkZXIgY2hvaXggYXV0cmUgY29tbWUgY29tbWVudGFpcmUnLFxyXG4gICAgc3VydmV5SWQ6ICdJZCBkdSBxdWVzdGlvbm5haXJlJyxcclxuICAgIHN1cnZleVBvc3RJZDogJ0lkIFBPU1QgcXVlc3Rpb25uYWlyZScsXHJcbiAgICBzdXJ2ZXlfdGl0bGU6IHsgbmFtZTogJ3RpdHJlJywgdGl0bGU6ICdJbCBzZXJhIGFmZmljaMOpIHN1ciBjaGFxdWUgcGFnZS4nIH0sXHJcbiAgICB0aXRsZTogeyBuYW1lOiAnVGl0cmUnLCB0aXRsZTogJ0xhaXNzZXogdmlkZSwgc2kgbWVtZSB0ZXh0ZSBxdWUgbGUgXCJOb21cIicgfSxcclxuICAgIHRyaWdnZXJzOiAnRMOpY2xlbmNoZXVycycsXHJcbiAgICB2YWxpZGF0b3JzOiAnVmFsaWRhdGV1cnMnLFxyXG4gICAgdmlzaWJsZUlmOiAnVmlzaWJsZSBzaSAnLFxyXG4gICAgd2lkdGg6ICdMYXJnZXVyJ1xyXG4gIH0sXHJcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXHJcbiAgcGU6IHtcclxuICAgIGFkZE5ldzogJ0Fqb3V0ZXIgdW4gbm91dmVhdScsXHJcbiAgICBhZGRSb3dUZXh0OiAnVGV4dGUgYm91dG9uIGFqb3V0ZXIgdW5lIGxpZ25lJyxcclxuICAgIGFwcGx5OiAnQXBwbGlxdWVyJyxcclxuICAgIGNhbmNlbDogJ0FubnVsZXInLFxyXG4gICAgY2VsbFR5cGU6ICdUeXBlIGRlIGNlbGx1bGUnLFxyXG4gICAgY2hvaWNlc09yZGVyOiAnU8OpbGVjdGlvbm5lciBsXFwnb3JkcmUgZGVzIGNob2l4JyxcclxuICAgIGNsb3NlOiAnRmVybWVyJyxcclxuICAgIGNvbENvdW50OiAnTm9tYnJlIGRlIGNvbG9ubmVzJyxcclxuICAgIGNvbHVtbkVkaXQ6ICdFZGl0ZXIgbGEgY29sb25uZTogezB9JyxcclxuICAgIGNyZWF0ZXRyaWdnZXI6ICdWZXVpbGxleiBjcsOpZXIgdW4gZMOpY2xlbmNoZXVyJyxcclxuICAgIGRlbGV0ZTogJ1N1cHByaW1lcicsXHJcbiAgICBlZGl0OiAnRWRpdGVyJyxcclxuICAgIGVkaXRQcm9wZXJ0eTogJ0VkaXRlciBsYSBwcm9wcmnDqXTDqSBcInswfVwiJyxcclxuICAgIGVtcHR5OiAnPHZpZGU+JyxcclxuICAgIGVudGVyTmV3VmFsdWU6ICdWZXVpbGxleiBzYWlzaXIgbGEgdmFsZXVyLicsXHJcbiAgICBleHByZXNzaW9uSGVscDogJ1ZldWlsbGV6IGVudHJlciB1bmUgZXhwcmVzc2lvbiBib29sw6llbm5lLiBFbGxlIGRvaXQgcmV0b3VybmVyIFZyYWkodHJ1ZSkgcG91ciBnYXJkZXIgbGEgcXVlc3Rpb24vcGFnZSB2aXNpYmxlLiBQYXIgZXhlbXBsZToge3F1ZXN0aW9uMX0gPSBcInZhbGV1cjFcIiBvciAoe3F1ZXN0aW9uMn0gPSAzIGFuZCB7cXVlc3Rpb24zfSA8IDUpJyxcclxuICAgIGZhc3RFbnRyeTogJ0Fqb3V0IHJhcGlkZScsXHJcbiAgICBmb3JtRW50cnk6ICdBam91dCB2aWEgZm9ybXVsYWlyZScsXHJcbiAgICBoYXNPdGhlcjogJ0hhcyBvdGhlciBpdGVtJyxcclxuICAgIGltYWdlSGVpZ2h0OiAnSGF1dGV1ciBkZSBsXFwnaW1hZ2UnLFxyXG4gICAgaW1hZ2VXaWR0aDogJ0xhcmdldXIgZGUgbFxcJ2ltYWdlJyxcclxuICAgIGlucHV0VHlwZTogJ1R5cGUgZGUgY2hhbXAnLFxyXG4gICAgaXNSZXF1aXJlZDogJ0VzdCByZXF1aXMgPycsXHJcbiAgICBpdGVtczogJ1sgRWxlbWVudHM6IHswfSBdJyxcclxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG5vdGUgbWF4aW11bScsXHJcbiAgICBtYXhTaXplOiAnVGFpbGxlIG1heGltdW0gZHUgZmljaGllciBlbiBvY3RldHMnLFxyXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gbm90ZSBtaW5pbXVtJyxcclxuICAgIG5hbWU6ICdOb20nLFxyXG4gICAgbm9xdWVzdGlvbnM6ICdJbCBuXFwneSBhIGF1Y3VuZSBxdWVzdGlvbiBkYW5zIGxlIHF1ZXN0aW9ubmFpcmUuJyxcclxuICAgIG9rOiAnT0snLFxyXG4gICAgb3B0aW9uc0NhcHRpb246ICdUZXh0ZSBwYXIgZMOpZmF1dCcsXHJcbiAgICBwbGFjZUhvbGRlcjogJ1BsYWNlSG9sZGVyIChpbmRpY2UgZGFucyBsZSBjaGFtcHMpJyxcclxuICAgIHByb3BlcnR5SXNFbXB0eTogJ1ZldWlsbGV6IGVudHJlciB1bmUgdmFsZXVyIHBvdXIgbGEgcHJvcHJpw6l0w6knLFxyXG4gICAgcUVkaXRvclRpdGxlOiAnRWRpdGVyIGxhIHF1ZXN0aW9uOiB7MH0nLFxyXG4gICAgcmVtb3ZlQWxsOiAnVG91dCBzdXBwcmltZXInLFxyXG4gICAgcmVtb3ZlUm93VGV4dDogJ1RleHRlIGJvdXRvbiBzdXBwcmltZXIgdW5lIGxpZ25lJyxcclxuICAgIHJlcXVpcmVkOiAnUmVxdWlzID8nLFxyXG4gICAgcmVzZXQ6ICdSw6lpbml0aWFsaXNlcicsXHJcbiAgICByb3dDb3VudDogJ05vbWJyZSBkZSBsaWduZXMnLFxyXG4gICAgcm93czogJ05vbWJyZSBkZSBsaWduZXMnLFxyXG4gICAgc2hvd1ByZXZpZXc6ICdMXFwnYXBlcsOndSBkXFwnaW1hZ2UgZXN0LWlsIGFmZmljaMOpID8nLFxyXG4gICAgc3RhcnRXaXRoTmV3TGluZTogJ0NvbW1lbmNlciBhdmVjIHVuZSBub3V2ZWxsZSBsaWduZSA/JyxcclxuICAgIHN0b3JlRGF0YUFzVGV4dDogJ1N0b2NrZXIgbGUgY29udGVudSBkdSBmaWNoaWVyIGRhbnMgbGUgcsOpc3VsdGF0IEpTT04gc291cyBmb3JtZSBkZSB0ZXh0ZScsXHJcbiAgICB0YWJzOiB7XHJcbiAgICAgIGNob2ljZXM6ICdDaG9peCcsXHJcbiAgICAgIGNob2ljZXNCeVVybDogJ0Nob2l4IGRlcHVpcyBhcGkgd2ViJyxcclxuICAgICAgY29sdW1uczogJ0NvbG9ubmVzJyxcclxuICAgICAgZmlsZU9wdGlvbnM6ICdPcHRpb25zJyxcclxuICAgICAgZ2VuZXJhbDogJ0fDqW7DqXJhbCcsXHJcbiAgICAgIGh0bWw6ICdFZGl0ZXVyIEh0bWwnLFxyXG4gICAgICBtYXRyaXhDaG9pY2VzOiAnQ2hvaXggcGFyIGRlZmF1dCcsXHJcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiAnVGV4dCBJbnB1dHMnLFxyXG4gICAgICByYXRlVmFsdWVzOiAnQmFyw6htZScsXHJcbiAgICAgIHJvd3M6ICdMaWduZXMnLFxyXG4gICAgICB2aXNpYmxlSWY6ICdWaXNpYmxlIFNpJ1xyXG4gICAgfSxcclxuICAgIHRlc3RTZXJ2aWNlOiAnVGVzdGVyIGxlIHNlcnZpY2UnLFxyXG4gICAgdGV4dDogJ1RleHRlJyxcclxuICAgIHRpdGxlOiAnVGl0cmUnLFxyXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogJ0NvbXBsZXRlIHRoZSBzdXJ2ZXkgaWYgc3VjY2VlZC4nLFxyXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6ICdOZSBwbGFjZXogcGFzIGxhIHZhcmlhYmxlIGRhbnMgbGUgcsOpc3VsdGF0IGR1IHF1ZXN0aW9ubmFpcmUuJyxcclxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiAnUmVuZHJlIGxlcyBwYWdlcyB2aXNpYmxlczonLFxyXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiAnUmVuZHJlIGxlcyBxdWVzdGlvbnMgdmlzaWJsZXM6JyxcclxuICAgIHRyaWdnZXJOb3RTZXQ6ICdMZSBkw6ljbGVuY2hldXIgblxcJ2VzdCBwYXMgZMOpZmluaScsXHJcbiAgICB0cmlnZ2VyT246ICdPbiAnLFxyXG4gICAgdHJpZ2dlclJ1bklmOiAnRXjDqWN1c3RlciBzaScsXHJcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiAnQ2hhbmdlciBsYSB2YWxldXIgZGU6ICcsXHJcbiAgICB0cmlnZ2VyU2V0VmFsdWU6ICfDoDogJyxcclxuICAgIHZhbHVlOiAnVmFsZXVyJyxcclxuICAgIHZlcmJDaGFuZ2VQYWdlOiAnQ2hhbmdlciBkZSBwYWdlICcsXHJcbiAgICB2ZXJiQ2hhbmdlVHlwZTogJ0NoYW5nZXIgbGUgdHlwZSAnLFxyXG4gICAgdmlzaWJsZTogJ0VzdCB2aXNpYmxlID8nXHJcbiAgfSxcclxuICAvL3F1ZXN0aW9uVHlwZXNcclxuICBxdDoge1xyXG4gICAgY2hlY2tib3g6ICdDYXNlcyDDoCBjb2NoZXInLFxyXG4gICAgY29tbWVudDogJ0NvbW1lbnRhaXJlJyxcclxuICAgIGRyb3Bkb3duOiAnTGlzdGUgZMOpcm91bGFudGUnLFxyXG4gICAgZmlsZTogJ0ZpY2hpZXInLFxyXG4gICAgaHRtbDogJ0h0bWwnLFxyXG4gICAgbWF0cml4OiAnTWF0aWNlIChjaG9peCB1bmlxdWUpJyxcclxuICAgIG1hdHJpeGRyb3Bkb3duOiAnTWF0cmljZSAoY2hvaXggbXVsdGlwbGVzKScsXHJcbiAgICBtYXRyaXhkeW5hbWljOiAnTWF0cmljZSAoTGlnbmVzIGR5bmFtaXF1ZXMpJyxcclxuICAgIG11bHRpcGxldGV4dDogJ2NoYW1wIG11bHRpbGlnbmVzJyxcclxuICAgIHJhZGlvZ3JvdXA6ICdCb3V0b25zIHJhZGlvJyxcclxuICAgIHJhdGluZzogJ0V2YWx1YXRpb24nLFxyXG4gICAgdGV4dDogJ0NoYW1wIHNpbXBsZSdcclxuICB9LFxyXG4gIHN1cnZleToge1xyXG4gICAgYWRkVG9Ub29sYm94OiAnQWpvdXRlciDDoCBsYSBib8OudGUgw6Agb3V0aWxzJyxcclxuICAgIGNvcHk6ICdDb3BpZXInLFxyXG4gICAgZGVsZXRlUXVlc3Rpb246ICdTdXBwcmltZXIgbGEgcXVlc3Rpb24nLFxyXG4gICAgZHJvcFF1ZXN0aW9uOiAnRMOpcG9zZXIgdm90cmUgcXVlc3Rpb24gaWNpLidcclxuICB9XHJcbn07XHJcblxyXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZyXCJdID0gZnJlbmNoVHJhbnNsYXRpb247XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5UHJvcGVydHlJdGVtc0VkaXRvcn0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5RWRpdG9yQmFzZX0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlJdGVtc0VkaXRvciB7XHJcbiAgICBrb0FjdGl2ZVZpZXc6IGFueTtcclxuICAgIGtvSXRlbXNUZXh0OiBhbnk7XHJcbiAgICBjaGFuZ2VUb1RleHRWaWV3Q2xpY2s6IGFueTtcclxuICAgIGNoYW5nZVRvRm9ybVZpZXdDbGljazogYW55O1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb0FjdGl2ZVZpZXcgPSBrby5vYnNlcnZhYmxlKFwiZm9ybVwiKTtcclxuICAgICAgICB0aGlzLmtvSXRlbXNUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcclxuICAgICAgICB0aGlzLmtvQWN0aXZlVmlldy5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PSBcImZvcm1cIikgc2VsZi51cGRhdGVJdGVtcyhzZWxmLmtvSXRlbXNUZXh0KCkpO1xyXG4gICAgICAgICAgICBlbHNlIHNlbGYua29JdGVtc1RleHQoc2VsZi5nZXRJdGVtc1RleHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUb1RleHRWaWV3Q2xpY2sgPSBmdW5jdGlvbiAoKSB7IHNlbGYua29BY3RpdmVWaWV3KFwidGV4dFwiKTsgfTtcclxuICAgICAgICB0aGlzLmNoYW5nZVRvRm9ybVZpZXdDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5rb0FjdGl2ZVZpZXcoXCJmb3JtXCIpOyB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcIml0ZW12YWx1ZXNcIjsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMua29JdGVtcygpLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5rb0l0ZW1zKClbaV07XHJcbiAgICAgICAgICAgIGl0ZW0ua29IYXNFcnJvcih0aGlzLmlzVmFsdWVFbXB0eShpdGVtLmtvVmFsdWUoKSkpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwgaXRlbS5rb0hhc0Vycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkgeyByZXR1cm4geyBrb1ZhbHVlOiBrby5vYnNlcnZhYmxlKCksIGtvVGV4dDoga28ub2JzZXJ2YWJsZSgpLCBrb0hhc0Vycm9yOiBrby5vYnNlcnZhYmxlKGZhbHNlKSB9OyB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHtcclxuICAgICAgICB2YXIgaXRlbVZhbHVlID0gbmV3IFN1cnZleS5JdGVtVmFsdWUobnVsbCk7XHJcbiAgICAgICAgaWYoIGl0ZW1WYWx1ZVtcInNldERhdGFcIl0pIHtcclxuICAgICAgICAgICAgaXRlbVZhbHVlW1wic2V0RGF0YVwiXShpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbVZhbHVlLnZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmKGl0ZW0udGV4dCkgaXRlbVZhbHVlLnRleHQgPSBpdGVtLnRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVmFsdWUudmFsdWUgPSBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtVGV4dCA9IFwiXCI7XHJcbiAgICAgICAgaWYoaXRlbVZhbHVlW1wibG9jVGV4dFwiXSkgeyBcclxuICAgICAgICAgICAgaXRlbVRleHQgPSBpdGVtVmFsdWVbXCJsb2NUZXh0XCJdW1wiZ2V0TG9jYWxlVGV4dFwiXSh0aGlzLmxvY2FsZSk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighaXRlbVRleHQgJiYgaXRlbVZhbHVlLmhhc1RleHQpIHtcclxuICAgICAgICAgICAgaXRlbVRleHQgPSBpdGVtVmFsdWUudGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaXRlbTogaXRlbSwga29WYWx1ZToga28ub2JzZXJ2YWJsZShpdGVtVmFsdWUudmFsdWUpLCBrb1RleHQ6IGtvLm9ic2VydmFibGUoaXRlbVRleHQpLCBrb0hhc0Vycm9yOiBrby5vYnNlcnZhYmxlKGZhbHNlKSB9O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcclxuICAgICAgICB2YXIgYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnM7XHJcbiAgICAgICAgdmFyIHRleHQgPSBlZGl0b3JJdGVtLmtvVGV4dCgpO1xyXG4gICAgICAgIGlmICghYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzICYmIGVkaXRvckl0ZW0ua29UZXh0KCkgPT0gZWRpdG9ySXRlbS5rb1ZhbHVlKCkpIHtcclxuICAgICAgICAgICAgdGV4dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtVmFsdWUgPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZShudWxsKTtcclxuICAgICAgICAvL1RPRE8gdXNlIHZhbHVlcyBkaXJlY3RseVxyXG4gICAgICAgIGlmKGVkaXRvckl0ZW0uaXRlbSAmJiBpdGVtVmFsdWVbXCJzZXREYXRhXCJdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1WYWx1ZVtcInNldERhdGFcIl0oZWRpdG9ySXRlbS5pdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlbVZhbHVlLnZhbHVlID0gZWRpdG9ySXRlbS5rb1ZhbHVlKCk7XHJcbiAgICAgICAgaWYoaXRlbVZhbHVlW1wibG9jVGV4dFwiXSkge1xyXG4gICAgICAgICAgICBpdGVtVmFsdWVbXCJsb2NUZXh0XCJdW1wic2V0TG9jYWxlVGV4dFwiXSh0aGlzLmxvY2FsZSwgdGV4dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYodGV4dCkgaXRlbVZhbHVlLnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMua29BY3RpdmVWaWV3KCkgIT0gXCJmb3JtXCIpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtcyh0aGlzLmtvSXRlbXNUZXh0KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5vbkJlZm9yZUFwcGx5KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlSXRlbXModGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgaWYgKHRleHQpIHtcclxuICAgICAgICAgICAgdmFyIHRleHRzID0gdGV4dC5zcGxpdChcIlxcblwiKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0ZXh0c1tpXSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVJdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUodGV4dHNbaV0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7IHZhbHVlOiB2YWx1ZUl0ZW0udmFsdWUsIHRleHQ6ICh2YWx1ZUl0ZW0uaGFzVGV4dCA/IHZhbHVlSXRlbS50ZXh0IDogXCJcIikgfTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rb0l0ZW1zKHRoaXMuZ2V0SXRlbXNGcm9tVmFsdWUoaXRlbXMpKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRJdGVtc1RleHQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgdGV4dCA9IFtdO1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMua29JdGVtcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KGl0ZW0ua29WYWx1ZSgpKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciBpdGVtVGV4dCA9IGl0ZW0ua29WYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5rb1RleHQoKSkgaXRlbVRleHQgKz0gU3VydmV5Lkl0ZW1WYWx1ZS5TZXBhcmF0b3IgKyBpdGVtLmtvVGV4dCgpO1xyXG4gICAgICAgICAgICB0ZXh0LnB1c2goaXRlbVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dC5qb2luKFwiXFxuXCIpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGlzVmFsdWVFbXB0eSh2YWw6IGFueSkge1xyXG4gICAgICAgIHJldHVybiAhdmFsO1xyXG4gICAgfVxyXG59XHJcblxyXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UucmVnaXN0ZXJFZGl0b3IoXCJpdGVtdmFsdWVzXCIsIGZ1bmN0aW9uICgpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgeyByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5SXRlbVZhbHVlc0VkaXRvcigpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5SXRlbVZhbHVlc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5SXRlbXNFZGl0b3J9IGZyb20gXCIuL3Byb3BlcnR5SXRlbXNFZGl0b3JcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2V9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xyXG5pbXBvcnQge1N1cnZleVF1ZXN0aW9uRWRpdG9yfSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XHJcbmltcG9ydCB7U3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yfSBmcm9tIFwiLi9wcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3JcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eURyb3Bkb3duQ29sdW1uc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3Ige1xyXG4gICAga29FZGl0SXRlbTogYW55OyBrb0lzTGlzdDogYW55O1xyXG4gICAgb25FZGl0SXRlbUNsaWNrOiBhbnk7IG9uQ2FuY2VsRWRpdEl0ZW1DbGljazogYW55O1xyXG4gICAgY29sdW1uRWRpdG9yOiBTdXJ2ZXlRdWVzdGlvbkVkaXRvcjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMua29FZGl0SXRlbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5rb0lzTGlzdCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5rb0VkaXRJdGVtLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHsgXHJcbiAgICAgICAgICAgIGlmKHNlbGYua29FZGl0SXRlbSgpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uRWRpdG9yID0gbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yKHNlbGYua29FZGl0SXRlbSgpLmVkaXRDb2x1bW4sIG51bGwsIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AXCIgKyBzZWxmLmtvRWRpdEl0ZW0oKS5rb0NlbGxUeXBlKCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5jb2x1bW5FZGl0b3IpIHNlbGYuY29sdW1uRWRpdG9yLmFwcGx5KCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbkVkaXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5rb0lzTGlzdChzZWxmLmtvRWRpdEl0ZW0oKSA9PSBudWxsKTsgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vbkVkaXRJdGVtQ2xpY2sgPSBmdW5jdGlvbiAoaXRlbSkgeyBzZWxmLmtvRWRpdEl0ZW0oaXRlbSk7IH07XHJcbiAgICAgICAgdGhpcy5vbkNhbmNlbEVkaXRJdGVtQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IFxyXG4gICAgICAgICAgICBpZihzZWxmLmNvbHVtbkVkaXRvciAmJiBzZWxmLmNvbHVtbkVkaXRvci5oYXNFcnJvcigpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHNlbGYua29FZGl0SXRlbShudWxsKTsgXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtbnNcIjsgfVxyXG4gICAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmNvbHVtbkVkaXRvciAhPSBudWxsID8gdGhpcy5jb2x1bW5FZGl0b3IuaGFzRXJyb3IoKSA6IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rb0l0ZW1zKCkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMua29JdGVtcygpW2ldLmhhc0Vycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcclxuICAgICAgICBpZih0aGlzLmNvbHVtbkVkaXRvcikgdGhpcy5jb2x1bW5FZGl0b3IuYXBwbHkoKTtcclxuICAgICAgICBzdXBlci5vbkJlZm9yZUFwcGx5KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkgeyByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbShuZXcgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uKFwiXCIsIHRoaXMub3B0aW9ucykpOyB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHsgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0l0ZW0oaXRlbSwgdGhpcy5vcHRpb25zKTsgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcclxuICAgICAgICB2YXIgY29sdW1JdGVtID0gPFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbT5lZGl0b3JJdGVtO1xyXG4gICAgICAgIGNvbHVtSXRlbS5hcHBseSgpO1xyXG4gICAgICAgIHJldHVybiBjb2x1bUl0ZW0uY29sdW1uO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlNYXRyaXhEcm9wZG93bkNvbHVtbnNJdGVtIHtcclxuICAgIHB1YmxpYyBlZGl0Q29sdW1uOiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW47XHJcbiAgICBrb05hbWU6IGFueTsga29UaXRsZTogYW55OyBrb0NlbGxUeXBlOiBhbnk7ICBrb0lzUmVxdWlyZWQ6IGFueTtcclxuICAgIGtvRWRpdG9yTmFtZTogYW55OyBrb0hhc0Vycm9yOiBhbnk7IGtvQ2FuRWRpdDogYW55OyBcclxuICAgIHB1YmxpYyBvblNob3dDaG9pY2VzQ2xpY2s6IGFueTtcclxuICAgIHB1YmxpYyBjZWxsVHlwZUNob2ljZXM6IEFycmF5PGFueT47XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY29sdW1uOiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4sIHB1YmxpYyBvcHRpb25zID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZWRpdENvbHVtbiA9IG5ldyBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4oY29sdW1uLm5hbWUsIGNvbHVtbi50aXRsZSk7XHJcbiAgICAgICAgLy9UT0RPIHNldCBkaXJlY3RseVxyXG4gICAgICAgIGlmKGNvbHVtbltcImxvY093bmVyXCJdKSB0aGlzLmVkaXRDb2x1bW5bXCJsb2NPd25lclwiXSA9IGNvbHVtbltcImxvY093bmVyXCJdO1xyXG4gICAgICAgIHRoaXMuY29weUNvbHVtbih0aGlzLmNvbHVtbiwgdGhpcy5lZGl0Q29sdW1uKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNlbGxUeXBlQ2hvaWNlcyA9IHRoaXMuZ2V0UHJvcGVydHlDaG9pY2VzKFwiY2VsbFR5cGVcIik7XHJcbiAgICAgICAgdGhpcy5rb05hbWUgPSBrby5vYnNlcnZhYmxlKGNvbHVtbi5uYW1lKTtcclxuICAgICAgICB0aGlzLmtvQ2VsbFR5cGUgPSBrby5vYnNlcnZhYmxlKGNvbHVtbi5jZWxsVHlwZSk7XHJcbiAgICAgICAgdGhpcy5rb1RpdGxlID0ga28ub2JzZXJ2YWJsZShjb2x1bW4ubmFtZSA9PT0gY29sdW1uLnRpdGxlID8gXCJcIiA6IGNvbHVtbi50aXRsZSk7XHJcbiAgICAgICAgdGhpcy5rb0lzUmVxdWlyZWQgPSBrby5vYnNlcnZhYmxlKHRoaXMuY29sdW1uLmlzUmVxdWlyZWQpO1xyXG4gICAgICAgIHRoaXMua29IYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb0NhbkVkaXQgPSBrby5jb21wdXRlZChmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmtvQ2VsbFR5cGUoKSAhPSBcImRlZmF1bHRcIjsgfSk7XHJcbiAgICAgICAgdGhpcy5rb0VkaXRvck5hbWUgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHsgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5jb2x1bW5FZGl0XCIpW1wiZm9ybWF0XCJdKHNlbGYua29OYW1lKCkpO30pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRoaXMua29IYXNFcnJvcighdGhpcy5rb05hbWUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua29IYXNFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFwcGx5KCkge1xyXG4gICAgICAgIHRoaXMuY29weUNvbHVtbih0aGlzLmVkaXRDb2x1bW4sIHRoaXMuY29sdW1uKTtcclxuICAgICAgICB0aGlzLmNvbHVtbi5uYW1lID0gdGhpcy5rb05hbWUoKTtcclxuICAgICAgICB0aGlzLmNvbHVtbi50aXRsZSA9IHRoaXMua29UaXRsZSgpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uLmNlbGxUeXBlID0gdGhpcy5rb0NlbGxUeXBlKCk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW4uaXNSZXF1aXJlZCA9IHRoaXMua29Jc1JlcXVpcmVkKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNvcHlDb2x1bW4oc3JjOiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4sIGRlc3Q6IFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbikge1xyXG4gICAgICAgIGRlc3QuaGFzT3RoZXIgPSBzcmMuaGFzT3RoZXI7XHJcbiAgICAgICAgZGVzdC5jaG9pY2VzID0gc3JjLmNob2ljZXM7XHJcbiAgICAgICAgZGVzdC5jb2xDb3VudCA9IHNyYy5jb2xDb3VudDtcclxuICAgICAgICBkZXN0Lm9wdGlvbnNDYXB0aW9uID0gc3JjLm9wdGlvbnNDYXB0aW9uO1xyXG4gICAgICAgIGRlc3QuY2hvaWNlc09yZGVyID0gc3JjLmNob2ljZXNPcmRlcjtcclxuICAgICAgICBkZXN0LmlucHV0VHlwZSA9IHNyYy5pbnB1dFR5cGU7XHJcbiAgICAgICAgZGVzdC5wbGFjZUhvbGRlciA9IHNyYy5wbGFjZUhvbGRlcjtcclxuICAgICAgICBkZXN0LmNob2ljZXNCeVVybCA9IHNyYy5jaG9pY2VzQnlVcmw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFByb3BlcnR5Q2hvaWNlcyhwcm9wZXR5TmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIik7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGV0eU5hbWUpIHJldHVybiBwcm9wZXJ0aWVzW2ldLmNob2ljZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxufVxyXG5cclxuU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLnJlZ2lzdGVyRWRpdG9yKFwibWF0cml4ZHJvcGRvd25jb2x1bW5zXCIsIGZ1bmN0aW9uICgpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgeyByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5RHJvcGRvd25Db2x1bW5zRWRpdG9yKCk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNYXRyaXhEcm9wZG93bkNvbHVtbnNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcclxuaW1wb3J0IHtTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XHJcbmltcG9ydCB7U3VydmV5UHJvcGVydHlFZGl0b3JCYXNlfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcclxuaW1wb3J0IHtlZGl0b3JMb2NhbGl6YXRpb259IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIHtcclxuICAgIGtvVXJsOiBhbnk7IGtvUGF0aDogYW55OyBrb1ZhbHVlTmFtZTogYW55OyBrb1RpdGxlTmFtZTogYW55OyBcclxuICAgIHB1YmxpYyBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXk7XHJcbiAgICBwdWJsaWMgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkRyb3Bkb3duO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5rb1VybCA9IGtvLm9ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmtvUGF0aCA9IGtvLm9ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmtvVmFsdWVOYW1lID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMua29UaXRsZU5hbWUgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXkoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb1VybC5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IHNlbGYucXVlc3Rpb24uY2hvaWNlc0J5VXJsLnVybCA9IG5ld1ZhbHVlOyBzZWxmLnJ1bigpOyB9KTtcclxuICAgICAgICB0aGlzLmtvUGF0aC5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IHNlbGYucXVlc3Rpb24uY2hvaWNlc0J5VXJsLnBhdGggPSBuZXdWYWx1ZTsgc2VsZi5ydW4oKTsgfSk7XHJcbiAgICAgICAgdGhpcy5rb1ZhbHVlTmFtZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IHNlbGYucXVlc3Rpb24uY2hvaWNlc0J5VXJsLnZhbHVlTmFtZSA9IG5ld1ZhbHVlOyBzZWxmLnJ1bigpOyB9KTtcclxuICAgICAgICB0aGlzLmtvVGl0bGVOYW1lLnN1YnNjcmliZShmdW5jdGlvbiAobmV3VmFsdWUpIHsgc2VsZi5xdWVzdGlvbi5jaG9pY2VzQnlVcmwudGl0bGVOYW1lID0gbmV3VmFsdWU7IHNlbGYucnVuKCk7IH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInJlc3RmdWxsXCI7IH1cclxuICAgIHB1YmxpYyBnZXQgcmVzdGZ1bGxWYWx1ZSgpIHsgcmV0dXJuIDxTdXJ2ZXkuQ2hvaWNlc1Jlc3RmdWxsPnRoaXMudmFsdWU7IH1cclxuICAgIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudXJsKSByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmVtcHR5XCIpO1xyXG4gICAgICAgIHZhciBzdHIgPSB2YWx1ZS51cmw7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPiAyMCkge1xyXG4gICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDIwKSArIFwiLi4uXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMucmVzdGZ1bGxWYWx1ZTtcclxuICAgICAgICB0aGlzLmtvVXJsKHZhbCA/IHZhbC51cmwgOiBcIlwiKTtcclxuICAgICAgICB0aGlzLmtvUGF0aCh2YWwgPyB2YWwucGF0aCA6IFwiXCIpO1xyXG4gICAgICAgIHRoaXMua29WYWx1ZU5hbWUodmFsID8gdmFsLnZhbHVlTmFtZSA6IFwiXCIpO1xyXG4gICAgICAgIHRoaXMua29UaXRsZU5hbWUodmFsID8gdmFsLnRpdGxlTmFtZSA6IFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IG5ldyBTdXJ2ZXkuQ2hvaWNlc1Jlc3RmdWxsKCk7XHJcbiAgICAgICAgdmFsLnVybCA9IHRoaXMua29VcmwoKTtcclxuICAgICAgICB2YWwucGF0aCA9IHRoaXMua29QYXRoKCk7XHJcbiAgICAgICAgdmFsLnZhbHVlTmFtZSA9IHRoaXMua29WYWx1ZU5hbWUoKTtcclxuICAgICAgICB2YWwudGl0bGVOYW1lID0gdGhpcy5rb1RpdGxlTmFtZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKHZhbCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJ1bigpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3JlYXRlU3VydmV5KCkge1xyXG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleS5TdXJ2ZXkoKTtcclxuICAgICAgICB0aGlzLnN1cnZleS5zaG93TmF2aWdhdGlvbkJ1dHRvbnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzID0gXCJvZmZcIjtcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LmFkZE5ld1BhZ2UoXCJwYWdlMVwiKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gPFN1cnZleS5RdWVzdGlvbkRyb3Bkb3duPnBhZ2UuYWRkTmV3UXVlc3Rpb24oXCJkcm9wZG93blwiLCBcInExXCIpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudGVzdFNlcnZpY2VcIilcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNob2ljZXMgPSBbXTtcclxuICAgIH1cclxufVxyXG5cclxuU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLnJlZ2lzdGVyRWRpdG9yKFwicmVzdGZ1bGxcIiwgZnVuY3Rpb24gKCk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7IHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9yKCk7IH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlSZXN0ZnVsbEVkaXRvci50cyIsImltcG9ydCB7U3VydmV5UHJvcGVydHlJdGVtc0VkaXRvcn0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5RWRpdG9yQmFzZX0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XHJcbmltcG9ydCB7U3VydmV5SGVscGVyfSBmcm9tIFwiLi4vc3VydmV5SGVscGVyXCI7XHJcbmltcG9ydCB7ZWRpdG9yTG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XHJcbmltcG9ydCB7U3VydmV5UHJvcGVydHlWYWxpZGF0b3JzRWRpdG9yfSBmcm9tIFwiLi9wcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3JcIjtcclxuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcclxuaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUZXh0SXRlbXNFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIFwidGV4dGl0ZW1zXCI7IH1cclxuICAgIHByb3RlY3RlZCBjcmVhdGVOZXdFZGl0b3JJdGVtKCk6IGFueSB7XHJcbiAgICAgICAgdmFyIG9ianMgPSBbXTtcclxuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmtvSXRlbXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9ianMucHVzaCh7IG5hbWU6IGl0ZW1zW2ldLmtvTmFtZSgpIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZWRpdEl0ZW0gPSB7IGtvTmFtZToga28ub2JzZXJ2YWJsZShTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShvYmpzLCBcInRleHRcIikpLCBrb1RpdGxlOiBrby5vYnNlcnZhYmxlKCksIGtvSXNSZXF1aXJlZDoga28ub2JzZXJ2YWJsZShmYWxzZSkgfTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvcnNFZGl0b3IoZWRpdEl0ZW0sIFtdKTtcclxuICAgICAgICByZXR1cm4gZWRpdEl0ZW07XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHtcclxuICAgICAgICB2YXIgZWRpdEl0ZW0gPSB7IGtvTmFtZToga28ub2JzZXJ2YWJsZShpdGVtLm5hbWUpLCBrb1RpdGxlOiBrby5vYnNlcnZhYmxlKGl0ZW0udGl0bGUpLCBrb0lzUmVxdWlyZWQ6IGtvLm9ic2VydmFibGUoaXRlbS5pc1JlcXVpcmVkKSB9O1xyXG4gICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yc0VkaXRvcihlZGl0SXRlbSwgaXRlbS52YWxpZGF0b3JzKTtcclxuICAgICAgICByZXR1cm4gZWRpdEl0ZW07XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSXRlbUZyb21FZGl0b3JJdGVtKGVkaXRvckl0ZW06IGFueSkge1xyXG4gICAgICAgIHZhciBpdGVtVGV4dCA9IG5ldyBTdXJ2ZXkuTXVsdGlwbGVUZXh0SXRlbShlZGl0b3JJdGVtLmtvTmFtZSgpLCBlZGl0b3JJdGVtLmtvVGl0bGUoKSk7XHJcbiAgICAgICAgaXRlbVRleHQuaXNSZXF1aXJlZCA9IGVkaXRvckl0ZW0ua29Jc1JlcXVpcmVkKCk7XHJcbiAgICAgICAgaXRlbVRleHQudmFsaWRhdG9ycyA9IGVkaXRvckl0ZW0udmFsaWRhdG9ycztcclxuICAgICAgICByZXR1cm4gaXRlbVRleHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNyZWF0ZVZhbGlkYXRvcnNFZGl0b3IoaXRlbTogYW55LCB2YWxpZGF0b3JzOiBBcnJheTxhbnk+KSB7XHJcbiAgICAgICAgaXRlbS52YWxpZGF0b3JzID0gdmFsaWRhdG9ycy5zbGljZSgpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgb25JdGVtQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWYWx1ZTogYW55KSB7IGl0ZW0udmFsaWRhdG9ycyA9IG5ld1ZhbHVlOyBpdGVtLmtvVGV4dChzZWxmLmdldFRleHQobmV3VmFsdWUubGVuZ3RoKSk7IH07XHJcbiAgICAgICAgdmFyIHByb3BlcnR5RWRpdG9yID0gbmV3IFN1cnZleVByb3BlcnR5VmFsaWRhdG9yc0VkaXRvcigpO1xyXG4gICAgICAgIGl0ZW0uZWRpdG9yID0gcHJvcGVydHlFZGl0b3I7XHJcbiAgICAgICAgcHJvcGVydHlFZGl0b3Iub25DaGFuZ2VkID0gKG5ld1ZhbHVlOiBhbnkpID0+IHsgb25JdGVtQ2hhbmdlZChuZXdWYWx1ZSk7IH07XHJcbiAgICAgICAgcHJvcGVydHlFZGl0b3Iub2JqZWN0ID0gaXRlbTtcclxuICAgICAgICBwcm9wZXJ0eUVkaXRvci50aXRsZShlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuZWRpdFByb3BlcnR5XCIpW1wiZm9ybWF0XCJdKFwiVmFsaWRhdG9yc1wiKSk7XHJcbiAgICAgICAgcHJvcGVydHlFZGl0b3IudmFsdWUgPSBpdGVtLnZhbGlkYXRvcnM7XHJcbiAgICAgICAgaXRlbS5rb1RleHQgPSBrby5vYnNlcnZhYmxlKHRoaXMuZ2V0VGV4dCh2YWxpZGF0b3JzLmxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0KGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLml0ZW1zXCIpW1wiZm9ybWF0XCJdKGxlbmd0aCk7XHJcbiAgICB9XHJcbn1cclxuXHJcblN1cnZleVByb3BlcnR5RWRpdG9yQmFzZS5yZWdpc3RlckVkaXRvcihcInRleHRpdGVtc1wiLCBmdW5jdGlvbiAoKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHsgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eVRleHRJdGVtc0VkaXRvcigpOyB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VGV4dEl0ZW1zRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5UHJvcGVydHlJdGVtc0VkaXRvcn0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xyXG5pbXBvcnQge1N1cnZleVByb3BlcnR5RWRpdG9yQmFzZX0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XHJcbmltcG9ydCB7ZWRpdG9yTG9jYWxpemF0aW9ufSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUcmlnZ2Vyc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3Ige1xyXG4gICAga29RdWVzdGlvbnM6IGFueTsga29QYWdlczogYW55O1xyXG4gICAgcHVibGljIGtvU2VsZWN0ZWQ6IGFueTtcclxuICAgIHB1YmxpYyBhdmFpbGFibGVUcmlnZ2VyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSB0cmlnZ2VyQ2xhc3NlczogQXJyYXk8U3VydmV5Lkpzb25NZXRhZGF0YUNsYXNzPiA9IFtdO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5vbkRlbGV0ZUNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmtvSXRlbXMucmVtb3ZlKHNlbGYua29TZWxlY3RlZCgpKTsgfTtcclxuICAgICAgICB0aGlzLm9uQWRkQ2xpY2sgPSBmdW5jdGlvbiAodHJpZ2dlclR5cGUpIHsgc2VsZi5hZGRJdGVtKHRyaWdnZXJUeXBlKTsgfTtcclxuICAgICAgICB0aGlzLmtvU2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xyXG4gICAgICAgIHRoaXMua29QYWdlcyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xyXG4gICAgICAgIHRoaXMua29RdWVzdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJDbGFzc2VzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0Q2hpbGRyZW5DbGFzc2VzKFwic3VydmV5dHJpZ2dlclwiLCB0cnVlKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZVRyaWdnZXJzID0gdGhpcy5nZXRBdmFpbGFibGVUcmlnZ2VycygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiBcInRyaWdnZXJzXCI7IH1cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5vYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5rb1BhZ2VzKHRoaXMuZ2V0TmFtZXMoKDxTdXJ2ZXkuU3VydmV5PnRoaXMub2JqZWN0KS5wYWdlcykpO1xyXG4gICAgICAgICAgICB0aGlzLmtvUXVlc3Rpb25zKHRoaXMuZ2V0TmFtZXMoKDxTdXJ2ZXkuU3VydmV5PnRoaXMub2JqZWN0KS5nZXRBbGxRdWVzdGlvbnMoKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmtvU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5rb1NlbGVjdGVkKHRoaXMua29JdGVtcygpLmxlbmd0aCA+IDAgPyB0aGlzLmtvSXRlbXMoKVswXSA6IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEl0ZW0odHJpZ2dlclR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciB0cmlnZ2VyID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3ModHJpZ2dlclR5cGUpO1xyXG4gICAgICAgIHZhciB0cmlnZ2VySXRlbSA9IHRoaXMuY3JlYXRlUHJvcGVydHlUcmlnZ2VyKHRyaWdnZXIpO1xyXG4gICAgICAgIHRoaXMua29JdGVtcy5wdXNoKHRyaWdnZXJJdGVtKTtcclxuICAgICAgICB0aGlzLmtvU2VsZWN0ZWQodHJpZ2dlckl0ZW0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvckl0ZW0oaXRlbTogYW55KSB7XHJcbiAgICAgICAgdmFyIGpzb25PYmogPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKTtcclxuICAgICAgICB2YXIgdHJpZ2dlciA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGl0ZW0uZ2V0VHlwZSgpKTtcclxuICAgICAgICBqc29uT2JqLnRvT2JqZWN0KGl0ZW0sIHRyaWdnZXIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVByb3BlcnR5VHJpZ2dlcig8U3VydmV5LlN1cnZleVRyaWdnZXI+dHJpZ2dlcik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSXRlbUZyb21FZGl0b3JJdGVtKGVkaXRvckl0ZW06IGFueSkge1xyXG4gICAgICAgIHZhciBlZGl0b3JUcmlnZ2VyID0gPFN1cnZleVByb3BlcnR5VHJpZ2dlcj5lZGl0b3JJdGVtO1xyXG4gICAgICAgIHJldHVybiBlZGl0b3JUcmlnZ2VyLmNyZWF0ZVRyaWdnZXIoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmxlVHJpZ2dlcnMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmlnZ2VyQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnRyaWdnZXJDbGFzc2VzW2ldLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROYW1lcyhpdGVtczogQXJyYXk8YW55Pik6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBuYW1lcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bXCJuYW1lXCJdKSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKGl0ZW1bXCJuYW1lXCJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmFtZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNyZWF0ZVByb3BlcnR5VHJpZ2dlcih0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlcik6IFN1cnZleVByb3BlcnR5VHJpZ2dlciB7XHJcbiAgICAgICAgdmFyIHRyaWdnZXJJdGVtID0gbnVsbDtcclxuICAgICAgICBpZiAodHJpZ2dlci5nZXRUeXBlKCkgPT0gXCJ2aXNpYmxldHJpZ2dlclwiKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJJdGVtID0gbmV3IFN1cnZleVByb3BlcnR5VmlzaWJsZVRyaWdnZXIoPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyVmlzaWJsZT50cmlnZ2VyLCB0aGlzLmtvUGFnZXMsIHRoaXMua29RdWVzdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHJpZ2dlci5nZXRUeXBlKCkgPT0gXCJzZXR2YWx1ZXRyaWdnZXJcIikge1xyXG4gICAgICAgICAgICB0cmlnZ2VySXRlbSA9IG5ldyBTdXJ2ZXlQcm9wZXJ0eVNldFZhbHVlVHJpZ2dlcig8U3VydmV5LlN1cnZleVRyaWdnZXJTZXRWYWx1ZT50cmlnZ2VyLCB0aGlzLmtvUXVlc3Rpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0cmlnZ2VySXRlbSkge1xyXG4gICAgICAgICAgICB0cmlnZ2VySXRlbSA9IG5ldyBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXIodHJpZ2dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmlnZ2VySXRlbTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcclxuICAgIHByaXZhdGUgb3BlcmF0b3JzID0gW1wiZW1wdHlcIiwgXCJub3RlbXB0eVwiLCBcImVxdWFsXCIsIFwibm90ZXF1YWxcIiwgXCJjb250YWluc1wiLCBcIm5vdGNvbnRhaW5zXCIsIFwiZ3JlYXRlclwiLCBcImxlc3NcIiwgXCJncmVhdGVyb3JlcXVhbFwiLCBcImxlc3NvcmVxdWFsXCJdO1xyXG4gICAgcHJpdmF0ZSB0cmlnZ2VyVHlwZTogc3RyaW5nO1xyXG4gICAgYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XHJcbiAgICBrb05hbWU6IGFueTsga29PcGVyYXRvcjogYW55OyBrb1ZhbHVlOiBhbnk7IGtvVHlwZTogYW55O1xyXG4gICAga29UZXh0OiBhbnk7IGtvSXNWYWxpZDogYW55OyBrb1JlcXVpcmVWYWx1ZTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlcikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlT3BlcmF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyVHlwZSA9IHRyaWdnZXIuZ2V0VHlwZSgpO1xyXG4gICAgICAgIHRoaXMua29UeXBlID0ga28ub2JzZXJ2YWJsZSh0aGlzLnRyaWdnZXJUeXBlKTtcclxuICAgICAgICB0aGlzLmtvTmFtZSA9IGtvLm9ic2VydmFibGUodHJpZ2dlci5uYW1lKTtcclxuICAgICAgICB0aGlzLmtvT3BlcmF0b3IgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXIub3BlcmF0b3IpO1xyXG4gICAgICAgIHRoaXMua29WYWx1ZSA9IGtvLm9ic2VydmFibGUodHJpZ2dlci52YWx1ZSk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMua29SZXF1aXJlVmFsdWUgPSBrby5jb21wdXRlZCgoKSA9PiB7IHJldHVybiBzZWxmLmtvT3BlcmF0b3IoKSAhPSBcImVtcHR5XCIgJiYgc2VsZi5rb09wZXJhdG9yKCkgIT0gXCJub3RlbXB0eVwiOyB9KTtcclxuICAgICAgICB0aGlzLmtvSXNWYWxpZCA9IGtvLmNvbXB1dGVkKCgpID0+IHsgaWYgKHNlbGYua29OYW1lKCkgJiYgKCFzZWxmLmtvUmVxdWlyZVZhbHVlKCkgfHwgc2VsZi5rb1ZhbHVlKCkpKSByZXR1cm4gdHJ1ZTsgcmV0dXJuIGZhbHNlOyB9KTtcclxuICAgICAgICB0aGlzLmtvVGV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IHsgc2VsZi5rb05hbWUoKTsgc2VsZi5rb09wZXJhdG9yKCk7IHNlbGYua29WYWx1ZSgpOyByZXR1cm4gc2VsZi5nZXRUZXh0KCk7IH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZVRyaWdnZXIoKTogU3VydmV5LlN1cnZleVRyaWdnZXIge1xyXG4gICAgICAgIHZhciB0cmlnZ2VyID0gPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyPlN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKHRoaXMudHJpZ2dlclR5cGUpO1xyXG4gICAgICAgIHRyaWdnZXIubmFtZSA9IHRoaXMua29OYW1lKCk7XHJcbiAgICAgICAgdHJpZ2dlci5vcGVyYXRvciA9IHRoaXMua29PcGVyYXRvcigpO1xyXG4gICAgICAgIHRyaWdnZXIudmFsdWUgPSB0aGlzLmtvVmFsdWUoKTtcclxuICAgICAgICByZXR1cm4gdHJpZ2dlcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3JlYXRlT3BlcmF0b3JzKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcGVyYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLm9wZXJhdG9yc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMucHVzaCh7IG5hbWU6IG5hbWUsIHRleHQ6IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvcC5cIiArIG5hbWUpIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5rb0lzVmFsaWQoKSkgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50cmlnZ2VyTm90U2V0XCIpO1xyXG4gICAgICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudHJpZ2dlclJ1bklmXCIpICsgXCIgJ1wiICsgdGhpcy5rb05hbWUoKSArIFwiJyBcIiArIHRoaXMuZ2V0T3BlcmF0b3JUZXh0KCkgKyB0aGlzLmdldFZhbHVlVGV4dCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRPcGVyYXRvclRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgb3AgPSB0aGlzLmtvT3BlcmF0b3IoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZU9wZXJhdG9yc1tpXS5uYW1lID09IG9wKSByZXR1cm4gdGhpcy5hdmFpbGFibGVPcGVyYXRvcnNbaV0udGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZVRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRoaXMua29SZXF1aXJlVmFsdWUoKSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIFwiIFwiICsgdGhpcy5rb1ZhbHVlKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVZpc2libGVUcmlnZ2VyIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcclxuICAgIHB1YmxpYyBwYWdlczogU3VydmV5UHJvcGVydHlUcmlnZ2VyT2JqZWN0cztcclxuICAgIHB1YmxpYyBxdWVzdGlvbnM6IFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHM7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXJWaXNpYmxlLCBrb1BhZ2VzOiBhbnksIGtvUXVlc3Rpb25zOiBhbnkpIHtcclxuICAgICAgICBzdXBlcih0cmlnZ2VyKTtcclxuICAgICAgICB0aGlzLnBhZ2VzID0gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHMoZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlXCIpLCBrb1BhZ2VzKCksIHRyaWdnZXIucGFnZXMpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHMoZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZVwiKSwga29RdWVzdGlvbnMoKSwgdHJpZ2dlci5xdWVzdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNyZWF0ZVRyaWdnZXIoKTogU3VydmV5LlN1cnZleVRyaWdnZXIge1xyXG4gICAgICAgIHZhciB0cmlnZ2VyID0gPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyVmlzaWJsZT5zdXBlci5jcmVhdGVUcmlnZ2VyKCk7XHJcbiAgICAgICAgdHJpZ2dlci5wYWdlcyA9IHRoaXMucGFnZXMua29DaG9vc2VuKCk7XHJcbiAgICAgICAgdHJpZ2dlci5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucy5rb0Nob29zZW4oKTtcclxuICAgICAgICByZXR1cm4gdHJpZ2dlcjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5U2V0VmFsdWVUcmlnZ2VyIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcclxuICAgIGtvUXVlc3Rpb25zOiBhbnk7IGtvc2V0VG9OYW1lOiBhbnk7IGtvc2V0VmFsdWU6IGFueTsga29pc1ZhcmlhYmxlOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXJTZXRWYWx1ZSwga29RdWVzdGlvbnM6IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHRyaWdnZXIpO1xyXG4gICAgICAgIHRoaXMua29RdWVzdGlvbnMgPSBrb1F1ZXN0aW9ucztcclxuICAgICAgICB0aGlzLmtvc2V0VG9OYW1lID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyLnNldFRvTmFtZSk7XHJcbiAgICAgICAgdGhpcy5rb3NldFZhbHVlID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyLnNldFZhbHVlKTtcclxuICAgICAgICB0aGlzLmtvaXNWYXJpYWJsZSA9IGtvLm9ic2VydmFibGUodHJpZ2dlci5pc1ZhcmlhYmxlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjcmVhdGVUcmlnZ2VyKCk6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyIHtcclxuICAgICAgICB2YXIgdHJpZ2dlciA9IDxTdXJ2ZXkuU3VydmV5VHJpZ2dlclNldFZhbHVlPnN1cGVyLmNyZWF0ZVRyaWdnZXIoKTtcclxuICAgICAgICB0cmlnZ2VyLnNldFRvTmFtZSA9IHRoaXMua29zZXRUb05hbWUoKTtcclxuICAgICAgICB0cmlnZ2VyLnNldFZhbHVlID0gdGhpcy5rb3NldFZhbHVlKCk7XHJcbiAgICAgICAgdHJpZ2dlci5pc1ZhcmlhYmxlID0gdGhpcy5rb2lzVmFyaWFibGUoKTtcclxuICAgICAgICByZXR1cm4gdHJpZ2dlcjtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUcmlnZ2VyT2JqZWN0cyB7XHJcbiAgICBrb09iamVjdHM6IGFueTtcclxuICAgIGtvQ2hvb3NlbjogYW55O1xyXG4gICAga29TZWxlY3RlZDogYW55O1xyXG4gICAga29DaG9vc2VuU2VsZWN0ZWQ6IGFueTtcclxuICAgIHB1YmxpYyBvbkRlbGV0ZUNsaWNrOiBhbnk7XHJcbiAgICBwdWJsaWMgb25BZGRDbGljazogYW55O1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHRpdGxlOiBzdHJpbmcsIGFsbE9iamVjdHM6IEFycmF5PHN0cmluZz4sIGNob29zZW5PYmplY3RzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy5rb0Nob29zZW4gPSBrby5vYnNlcnZhYmxlQXJyYXkoY2hvb3Nlbk9iamVjdHMpO1xyXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGFsbE9iamVjdHNbaV07XHJcbiAgICAgICAgICAgIGlmIChjaG9vc2VuT2JqZWN0cy5pbmRleE9mKGl0ZW0pIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtvT2JqZWN0cyA9IGtvLm9ic2VydmFibGVBcnJheShhcnJheSk7XHJcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkID0ga28ub2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMua29DaG9vc2VuU2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMub25EZWxldGVDbGljayA9IGZ1bmN0aW9uICgpIHsgc2VsZi5kZWxldGVJdGVtKCk7IH07XHJcbiAgICAgICAgdGhpcy5vbkFkZENsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxmLmFkZEl0ZW0oKTsgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBkZWxldGVJdGVtKCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbXModGhpcy5rb0Nob29zZW5TZWxlY3RlZCgpLCB0aGlzLmtvQ2hvb3NlbiwgdGhpcy5rb09iamVjdHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhZGRJdGVtKCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbXModGhpcy5rb1NlbGVjdGVkKCksIHRoaXMua29PYmplY3RzLCB0aGlzLmtvQ2hvb3Nlbik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoYW5nZUl0ZW1zKGl0ZW06IHN0cmluZywgcmVtb3ZlZEZyb206IGFueSwgYWRkVG86IGFueSkge1xyXG4gICAgICAgIHJlbW92ZWRGcm9tLnJlbW92ZShpdGVtKTtcclxuICAgICAgICBhZGRUby5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJlbW92ZWRGcm9tLnNvcnQoKTtcclxuICAgICAgICBhZGRUby5zb3J0KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcblN1cnZleVByb3BlcnR5RWRpdG9yQmFzZS5yZWdpc3RlckVkaXRvcihcInRyaWdnZXJzXCIsIGZ1bmN0aW9uICgpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgeyByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlcnNFZGl0b3IoKTsgfSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVRyaWdnZXJzRWRpdG9yLnRzIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMzRfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJyb290XCI6XCJib290c3RyYXBcIixcImNvbW1vbmpzMlwiOlwiYm9vdHN0cmFwXCIsXCJjb21tb25qc1wiOlwiYm9vdHN0cmFwXCIsXCJhbWRcIjpcImJvb3RzdHJhcFwifVxuLy8gbW9kdWxlIGlkID0gMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXYgY2xhc3M9XFxcInN2ZF9jb250YWluZXJcXFwiPlxcclxcbiAgICA8dWwgY2xhc3M9XFxcIm5hdmJhci1kZWZhdWx0IGNvbnRhaW5lci1mbHVpZCBuYXYgbmF2LXRhYnMgc3ZkX21lbnVcXFwiPlxcclxcbiAgICAgICAgPGxpIGRhdGEtYmluZD1cXFwiY3NzOiB7YWN0aXZlOiBrb1ZpZXdUeXBlKCkgPT0gJ2Rlc2lnbmVyJ31cXFwiPjxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6c2VsZWN0RGVzaWduZXJDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5kZXNpZ25lcicpXFxcIj48L2E+PC9saT5cXHJcXG4gICAgICAgIDxsaSBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHNob3dKU09ORWRpdG9yVGFiLCBjc3M6IHthY3RpdmU6IGtvVmlld1R5cGUoKSA9PSAnZWRpdG9yJ31cXFwiPjxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6c2VsZWN0RWRpdG9yQ2xpY2ssIHRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQuanNvbkVkaXRvcicpXFxcIj48L2E+PC9saT5cXHJcXG4gICAgICAgIDxsaSBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHNob3dUZXN0U3VydmV5VGFiLCBjc3M6IHthY3RpdmU6IGtvVmlld1R5cGUoKSA9PSAndGVzdCd9XFxcIj48YSBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOnNlbGVjdFRlc3RDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC50ZXN0U3VydmV5JylcXFwiPjwvYT48L2xpPlxcclxcbiAgICAgICAgPGxpIGRhdGEtYmluZD1cXFwidmlzaWJsZTogc2hvd0VtYmVkZWRTdXJ2ZXlUYWIsIGNzczoge2FjdGl2ZToga29WaWV3VHlwZSgpID09ICdlbWJlZCd9XFxcIj48YSBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOnNlbGVjdEVtYmVkQ2xpY2ssIHRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQuZW1iZWRTdXJ2ZXknKVxcXCI+PC9hPjwvbGk+XFxyXFxuXFxyXFxuICAgICAgICA8bGkgY2xhc3M9XFxcInN2ZF9hY3Rpb25zXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvSXNTaG93RGVzaWduZXJcXFwiPlxcclxcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImVuYWJsZTp1bmRvUmVkby5rb0NhblVuZG8sIGNsaWNrOiBkb1VuZG9DbGlja1xcXCI+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2VkLnVuZG8nKVxcXCI+PC9zcGFuPjwvYnV0dG9uPlxcclxcbiAgICAgICAgPC9saT5cXHJcXG4gICAgICAgIDxsaSBjbGFzcz1cXFwic3ZkX2FjdGlvbnNcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29Jc1Nob3dEZXNpZ25lclxcXCI+XFxyXFxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiZW5hYmxlOnVuZG9SZWRvLmtvQ2FuUmVkbywgY2xpY2s6IGRvUmVkb0NsaWNrXFxcIj48c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQucmVkbycpXFxcIj48L3NwYW4+PC9idXR0b24+XFxyXFxuICAgICAgICA8L2xpPlxcclxcbiAgICAgICAgPGxpIGNsYXNzPVxcXCJzdmRfYWN0aW9uc1xcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAoa29Jc1Nob3dEZXNpZ25lcigpICYmIGtvU2hvd09wdGlvbnMoKSlcXFwiPlxcclxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJ0bi1ncm91cCBpbmxpbmVcXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGVcXFwiIGRhdGEtdG9nZ2xlPVxcXCJkcm9wZG93blxcXCIgYXJpYS1oYXNwb3B1cD1cXFwidHJ1ZVxcXCIgYXJpYS1leHBhbmRlZD1cXFwiZmFsc2VcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5vcHRpb25zJylcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyBcXHJcXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJjYXJldFxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVxcXCJkcm9wZG93bi1tZW51XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWJpbmQ9XFxcImNzczoge2FjdGl2ZToga29HZW5lcmF0ZVZhbGlkSlNPTn1cXFwiPjxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6Z2VuZXJhdGVWYWxpZEpTT05DbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5nZW5lcmF0ZVZhbGlkSlNPTicpXFxcIj48L2E+PC9saT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWJpbmQ9XFxcImNzczoge2FjdGl2ZTogIWtvR2VuZXJhdGVWYWxpZEpTT04oKX1cXFwiPjxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6Z2VuZXJhdGVSZWFkYWJsZUpTT05DbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5nZW5lcmF0ZVJlYWRhYmxlSlNPTicpXFxcIj48L2E+PC9saT5cXHJcXG4gICAgICAgICAgICAgICAgPC91bD5cXHJcXG4gICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgIDwvbGk+XFxyXFxuICAgICAgICA8bGkgY2xhc3M9XFxcInN2ZF9hY3Rpb25zXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvVmlld1R5cGUoKSA9PSAndGVzdCdcXFwiPlxcclxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJ0bi1ncm91cCBpbmxpbmVcXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgaWQ9XFxcInN1cnZleVRlc3RXaWR0aFxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGVcXFwiIGRhdGEtdG9nZ2xlPVxcXCJkcm9wZG93blxcXCIgYXJpYS1oYXNwb3B1cD1cXFwidHJ1ZVxcXCIgYXJpYS1leHBhbmRlZD1cXFwidHJ1ZVxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQudGVzdFN1cnZleVdpZHRoJykgKyAnICcgKyAkcm9vdC5rb1Rlc3RTdXJ2ZXlXaWR0aCgpXFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiY2FyZXRcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XFxyXFxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwiZHJvcGRvd24tbWVudVxcXCIgYXJpYS1sYWJlbGxlZGJ5PVxcXCJzdXJ2ZXlUZXN0V2lkdGhcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGtvVGVzdFN1cnZleVdpZHRoLmJpbmQoJGRhdGEsICcxMDAlJylcXFwiPjEwMCU8L2E+PC9saT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBrb1Rlc3RTdXJ2ZXlXaWR0aC5iaW5kKCRkYXRhLCAnMTIwMHB4JylcXFwiPjEyMDBweDwvYT48L2xpPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGtvVGVzdFN1cnZleVdpZHRoLmJpbmQoJGRhdGEsICcxMDAwcHgnKVxcXCI+MTAwMHB4PC9hPjwvbGk+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cXFwiI1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazoga29UZXN0U3VydmV5V2lkdGguYmluZCgkZGF0YSwgJzgwMHB4JylcXFwiPjgwMHB4PC9hPjwvbGk+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cXFwiI1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazoga29UZXN0U3VydmV5V2lkdGguYmluZCgkZGF0YSwgJzYwMHB4JylcXFwiPjYwMHB4PC9hPjwvbGk+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cXFwiI1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazoga29UZXN0U3VydmV5V2lkdGguYmluZCgkZGF0YSwgJzQwMHB4JylcXFwiPjQwMHB4PC9hPjwvbGk+XFxyXFxuICAgICAgICAgICAgICAgIDwvdWw+XFxyXFxuICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8L2xpPlxcclxcbiAgICAgICAgPGxpIGNsYXNzPVxcXCJzdmRfYWN0aW9uc1xcXCI+XFxyXFxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnkgc3ZkX3NhdmVfYnRuXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBzYXZlQnV0dG9uQ2xpY2ssIHZpc2libGU6IGtvU2hvd1NhdmVCdXR0b25cXFwiPjxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5zYXZlU3VydmV5JylcXFwiPjwvc3Bhbj48L2J1dHRvbj5cXHJcXG4gICAgICAgIDwvbGk+XFxyXFxuICAgIDwvdWw+XFxyXFxuXFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIHN2ZF9jb250ZW50XFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInJvdyBzdmRfc3VydmV5X2Rlc2lnbmVyXFxcIiAgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1ZpZXdUeXBlKCkgPT0gJ2Rlc2lnbmVyJ1xcXCI+XFxyXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTIgY29sLW1kLTIgY29sLXNtLTEgY29sLXhzLTEgcGFuZWwgcGFuZWwtZGVmYXVsdCBzdmRfdG9vbGJveFxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJ0bi1ncm91cC12ZXJ0aWNhbFxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoycHhcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB0b29sYm94LmtvSXRlbXMgLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHRcXFwiIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOmxlZnQ7IG1hcmdpbjoxcHg7bWluLWhlaWdodDozN3B4OyB3aWR0aDoxMDAlXFxcIiBkcmFnZ2FibGU9XFxcInRydWVcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRyb290LmNsaWNrVG9vbGJveEl0ZW0sIGV2ZW50OntkcmFnc3RhcnQ6IGZ1bmN0aW9uKGVsLCBlKSB7ICRyb290LmRyYWdnaW5nVG9vbGJveEl0ZW0oJGRhdGEsIGUpOyByZXR1cm4gdHJ1ZTt9LCBkcmFnZW5kOiBmdW5jdGlvbihlbCwgZSkgeyAkcm9vdC5kcmFnRW5kKCk7IH19XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcImNzczogaWNvbk5hbWUsIGF0dHI6IHt0aXRsZTogdGl0bGV9XFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZF90b29sYm94X2l0ZW1fdGV4dCBoaWRkZW4tc20gaGlkZGVuLXhzXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6dGl0bGVcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbGctNyBjb2wtbWQtNyBjb2wtc20tOCBjb2wteHMtMTEgc3ZkX2VkaXRvcnNcXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmRfcGFnZXNfZWRpdG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRlbXBsYXRlOiB7IG5hbWU6ICdwYWdlZWRpdG9yJywgZGF0YTogcGFnZXNFZGl0b3IgfVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9xdWVzdGlvbnNfZWRpdG9yXFxcIiBpZD1cXFwic2Nyb2xsYWJsZURpdlxcXCIgZGF0YS1iaW5kPVxcXCJzdHlsZToge2hlaWdodDoga29EZXNpZ25lckhlaWdodH1cXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cXFwic3VydmV5anNcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbGctMyBjb2wtbWQtMyBjb2wtc20tMyBoaWRkZW4teHMgcGFuZWwgcGFuZWwtZGVmYXVsdCBzdmRfcHJvcGVydGllc1xcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmcgaW5wdXQtZ3JvdXBcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY3VzdG9tLXNlbGVjdFxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cXFwib2JqZWN0U2VsZWN0b3JcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29PYmplY3RzLCBvcHRpb25zVGV4dDogJ3RleHQnLCB2YWx1ZToga29TZWxlY3RlZE9iamVjdFxcXCI+PC9zZWxlY3Q+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0blxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtYmluZD1cXFwiZW5hYmxlOiBrb0NhbkRlbGV0ZU9iamVjdCwgY2xpY2s6IGRlbGV0ZUN1cnJlbnRPYmplY3QsIGF0dHI6IHsgdGl0bGU6ICRyb290LmdldExvY1N0cmluZygnZWQuZGVsU2VsT2JqZWN0Jyl9XFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmVcXFwiPjwvc3Bhbj48L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX29iamVjdF9lZGl0b3JcXFwiIGRhdGEtYmluZD1cXFwic3R5bGU6IHtoZWlnaHQ6IGtvRGVzaWduZXJIZWlnaHR9XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnb2JqZWN0ZWRpdG9yJywgZGF0YTogc2VsZWN0ZWRPYmplY3RFZGl0b3IgfVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1mb290ZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTpzdXJ2ZXlWZXJicy5rb0hhc1ZlcmJzXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnb2JqZWN0dmVyYnMnLCBkYXRhOiBzdXJ2ZXlWZXJicyB9XFxcIj48L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1ZpZXdUeXBlKCkgPT0gJ2VkaXRvcidcXFwiPlxcclxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnanNvbmVkaXRvcicsIGRhdGE6IGpzb25FZGl0b3IgfVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG5cXHJcXG4gICAgICAgIDxkaXYgaWQ9XFxcInN1cnZleWpzVGVzdFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1ZpZXdUeXBlKCkgPT0gJ3Rlc3QnLCBzdHlsZToge3dpZHRoOiBrb1Rlc3RTdXJ2ZXlXaWR0aH1cXFwiPlxcclxcbiAgICAgICAgICAgIDxkaXYgaWQ9XFxcInN1cnZleWpzRXhhbXBsZVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwic3VydmV5anNFeGFtcGxlUmVzdWx0c1xcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cXFwic3VydmV5anNFeGFtcGxlcmVSdW5cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6c2VsZWN0VGVzdENsaWNrLCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2VkLnRlc3RTdXJ2ZXlBZ2FpbicpXFxcIiBzdHlsZT1cXFwiZGlzcGxheTpub25lXFxcIj5UZXN0IEFnYWluPC9idXR0b24+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG5cXHJcXG4gICAgICAgIDxkaXYgaWQ9XFxcInN1cnZleWpzRW1iZWRcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29WaWV3VHlwZSgpID09ICdlbWJlZCdcXFwiPlxcclxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5ZW1iZWRpbmcnLCBkYXRhOiBzdXJ2ZXlFbWJlZGluZyB9XFxcIj48L2Rpdj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRlbXBsYXRlOiB7IG5hbWU6ICdxdWVzdGlvbmVkaXRvcicsIGRhdGE6IHF1ZXN0aW9uRWRpdG9yV2luZG93IH1cXFwiPjwvZGl2PlxcclxcbjwvZGl2PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9pbmRleC5odG1sXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJqc29uZWRpdG9yXFxcIj5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICFoYXNBY2VFZGl0b3JcXFwiPlxcclxcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVxcXCJzdmRfanNvbl9lZGl0b3JfYXJlYVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6a29UZXh0XFxcIj48L3RleHRhcmVhPlxcclxcbiAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb0Vycm9ycyAtLT5cXHJcXG4gICAgICAgIDxkaXY+XFxyXFxuICAgICAgICAgICAgPHNwYW4+RXJyb3I6IDwvc3Bhbj48c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRleHRcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPCEtLSAva28gIC0tPlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBpZD1cXFwic3VydmV5anNKU09ORWRpdG9yXFxcIiBjbGFzcz1cXFwic3ZkX2pzb25fZWRpdG9yXFxcIj48L2Rpdj5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvanNvbmVkaXRvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAzNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJvYmplY3RlZGl0b3JcXFwiPlxcclxcbiAgICA8dGFibGUgY2xhc3M9XFxcInRhYmxlIHN2ZF90YWJsZS1ub3dyYXBcXFwiPlxcclxcbiAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cXFwiZm9yZWFjaDoga29Qcm9wZXJ0aWVzXFxcIj5cXHJcXG4gICAgICAgICAgICA8dHIgZGF0YS1iaW5kPVxcXCJjbGljazogJHBhcmVudC5jaGFuZ2VBY3RpdmVQcm9wZXJ0eSgkZGF0YSksIGNzczogeydhY3RpdmUnOiAkcGFyZW50LmtvQWN0aXZlUHJvcGVydHkoKSA9PSAkZGF0YX1cXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBkaXNwbGF5TmFtZSwgYXR0cjoge3RpdGxlOiB0aXRsZX1cXFwiIHdpZHRoPVxcXCI1MCVcXFwiPjwvdGQ+XFxyXFxuICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD1cXFwiNTAlXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDoga29UZXh0LCB2aXNpYmxlOiAkcGFyZW50LmtvQWN0aXZlUHJvcGVydHkoKSAhPSAkZGF0YSB8fCBkaXNhYmxlZCwgYXR0cjoge3RpdGxlOiBrb1RleHR9XFxcIiBzdHlsZT1cXFwidGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuXFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTogJHBhcmVudC5rb0FjdGl2ZVByb3BlcnR5KCkgPT0gJGRhdGEgJiYgIWRpc2FibGVkXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci0nICsgZWRpdG9yVHlwZSwgZGF0YTogJGRhdGEgfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgIDwvdHI+XFxyXFxuICAgICAgICA8L3Rib2R5PlxcclxcbiAgICA8L3RhYmxlPlxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9vYmplY3RlZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwib2JqZWN0dmVyYnNcXFwiPlxcclxcbiAgICA8IS0tIGtvIGZvcmVhY2g6IGtvVmVyYnMgLS0+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcclxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvblxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OnRleHRcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IGtvSXRlbXMsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTondmFsdWUnLCB2YWx1ZToga29TZWxlY3RlZEl0ZW1cXFwiPjwvc2VsZWN0PlxcclxcbiAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgIDwhLS0gL2tvICAtLT5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvb2JqZWN0dmVyYnMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicGFnZWVkaXRvclxcXCI+XFxyXFxuICAgIDx1bCBjbGFzcz1cXFwibmF2IG5hdi10YWJzXFxcIiBkYXRhLWJpbmQ9XFxcInRhYnM6dHJ1ZVxcXCI+XFxyXFxuICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGtvUGFnZXMgLS0+XFxyXFxuICAgICAgICA8bGkgZGF0YS1iaW5kPVxcXCJjc3M6IHthY3RpdmU6IGtvU2VsZWN0ZWQoKX0sZXZlbnQ6e1xcclxcbiAgICAgICAgICAga2V5ZG93bjpmdW5jdGlvbihlbCwgZSl7ICRwYXJlbnQua2V5RG93bihlbCwgZSk7IH0sXFxyXFxuICAgICAgICAgICBkcmFnc3RhcnQ6ZnVuY3Rpb24oZWwsIGUpeyAkcGFyZW50LmRyYWdTdGFydChlbCk7IHJldHVybiB0cnVlOyB9LFxcclxcbiAgICAgICAgICAgZHJhZ292ZXI6ZnVuY3Rpb24oZWwsIGUpeyAkcGFyZW50LmRyYWdPdmVyKGVsKTt9LFxcclxcbiAgICAgICAgICAgZHJhZ2VuZDpmdW5jdGlvbihlbCwgZSl7ICRwYXJlbnQuZHJhZ0VuZCgpO30sXFxyXFxuICAgICAgICAgICBkcm9wOmZ1bmN0aW9uKGVsLCBlKXsgJHBhcmVudC5kcmFnRHJvcChlbCk7fVxcclxcbiAgICAgICAgIH1cXFwiPiBcXHJcXG4gICAgICAgICAgICA8YSBjbGFzcz1cXFwic3ZkX3BhZ2VfbmF2XFxcIiBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiRwYXJlbnQuc2VsZWN0UGFnZUNsaWNrXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0aXRsZVxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgIDwvYT5cXHJcXG4gICAgICAgIDwvbGk+XFxyXFxuICAgICAgICA8IS0tIC9rbyAgLS0+XFxyXFxuICAgICAgICA8bGk+PGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0IHN2ZF9hZGRfbmV3X3BhZ2VfYnRuXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOmFkZE5ld1BhZ2VDbGljaywgYXR0cjoge3RpdGxlOiAgJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5hZGROZXdQYWdlJyl9XFxcIiA+PHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcGx1c1xcXCI+PC9zcGFuPjwvYnV0dG9uPjwvbGk+XFxyXFxuICAgIDwvdWw+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3BhZ2VlZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItYm9vbGVhblxcXCI+XFxyXFxuICAgIDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOiBrb1ZhbHVlXFxcIiAvPlxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItYm9vbGVhbi5odG1sXG4vLyBtb2R1bGUgaWQgPSA0MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1kcm9wZG93blxcXCI+XFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcImN1c3RvbS1zZWxlY3RcXFwiPlxcclxcbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOiBrb1ZhbHVlLCBvcHRpb25zOiBjaG9pY2VzXFxcIiAgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiPjwvc2VsZWN0PlxcclxcbiAgICA8L2Rpdj5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRyb3Bkb3duLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDQxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb25cXFwiPlxcclxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuXFxyXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtZXhwcmVzc2lvblxcXCI+XFxyXFxuICAgIDxkaXY+XFxyXFxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlXFxcIiBzdHlsZT1cXFwid2lkdGg6MTAwJVxcXCIgcm93cz1cXFwiOFxcXCIgYXV0b2ZvY3VzPVxcXCJhdXRvZm9jdXNcXFwiPjwvdGV4dGFyZWE+XFxyXFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5leHByZXNzaW9uSGVscCcpXFxcIiBzdHlsZT1cXFwid2hpdGUtc3BhY2U6bm9ybWFsXFxcIj48L3NwYW4+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZXhwcmVzc2lvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSA0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1odG1sXFxcIj5cXHJcXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPjwhLS0gL2tvIC0tPlxcclxcbjwvc2NyaXB0PlxcclxcblxcclxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWh0bWxcXFwiPlxcclxcbiAgICA8dGV4dGFyZWEgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlXFxcIiBzdHlsZT1cXFwid2lkdGg6MTAwJVxcXCIgcm93cz1cXFwiMTBcXFwiIGF1dG9mb2N1cz1cXFwiYXV0b2ZvY3VzXFxcIj48L3RleHRhcmVhPlxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItaHRtbC5odG1sXG4vLyBtb2R1bGUgaWQgPSA0M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzXFxcIj5cXHJcXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPjwhLS0gL2tvIC0tPlxcclxcbjwvc2NyaXB0PlxcclxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBjbGFzcz1cXFwiYnRuLXhzXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWl0ZW12YWx1ZXNcXFwiPlxcclxcbiAgICA8ZGl2IHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOjNweFxcXCI+XFxyXFxuICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4teHNcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7J2J0biBidG4tcHJpbWFyeSc6a29BY3RpdmVWaWV3KCkgPT0gJ2Zvcm0nLCAnYnRuLWxpbmsnOmtvQWN0aXZlVmlldygpICE9ICdmb3JtJ30sIGNsaWNrOmNoYW5nZVRvRm9ybVZpZXdDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5mb3JtRW50cnknKVxcXCI+PC9idXR0b24+XFxyXFxuICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4teHNcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7J2J0biBidG4tcHJpbWFyeSc6a29BY3RpdmVWaWV3KCkgIT0gJ2Zvcm0nLCAnYnRuLWxpbmsnOmtvQWN0aXZlVmlldygpID09ICdmb3JtJ30sIGNsaWNrOmNoYW5nZVRvVGV4dFZpZXdDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5mYXN0RW50cnknKVxcXCI+PC9idXR0b24+XFxyXFxuICAgIDwvZGl2PlxcclxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTprb0FjdGl2ZVZpZXcoKSA9PSAnZm9ybSdcXFwiIHN0eWxlPVxcXCJvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OmhpZGRlbjsgbWF4LWhlaWdodDo0MDBweDttaW4taGVpZ2h0OjIwMHB4XFxcIj5cXHJcXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cXFwidGFibGVcXFwiID5cXHJcXG4gICAgICAgICAgICA8dGhlYWQ+XFxyXFxuICAgICAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS52YWx1ZScpXFxcIj48L3RoPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50ZXh0JylcXFwiPjwvdGg+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgICAgICA8L3RoZWFkPlxcclxcbiAgICAgICAgICAgIDx0Ym9keT5cXHJcXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb0l0ZW1zIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8dHI+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8dGQ+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYnRuLWdyb3VwXFxcIiByb2xlPVxcXCJncm91cFxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi14c1xcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkaW5kZXgoKSA+IDAsIGNsaWNrOiAkcGFyZW50Lm9uTW92ZVVwQ2xpY2tcXFwiPjxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWFycm93LXVwXFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+PC9zcGFuPjwvYnV0dG9uPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4teHNcXFwiIHN0eWxlPVxcXCJmbG9hdDpub25lXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICRpbmRleCgpIDwgJHBhcmVudC5rb0l0ZW1zKCkubGVuZ3RoIC0gMSwgY2xpY2s6ICRwYXJlbnQub25Nb3ZlRG93bkNsaWNrXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1hcnJvdy1kb3duXFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+PC9zcGFuPjwvYnV0dG9uPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlXFxcIiBzdHlsZT1cXFwid2lkdGg6MjAwcHhcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWxlcnQgYWxlcnQtZGFuZ2VyIG5vLXBhZGRpbmdcXFwiIHJvbGU9XFxcImFsZXJ0XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29IYXNFcnJvciwgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5lbnRlck5ld1ZhbHVlJylcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1RleHRcXFwiIHN0eWxlPVxcXCJ3aWR0aDoyMDBweFxcXCIgLz48L3RkPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPHRkPjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi14c1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogJHBhcmVudC5vbkRlbGV0ZUNsaWNrXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaFxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiPjwvc3Bhbj48L2J1dHRvbj48L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICA8L3Rib2R5PlxcclxcbiAgICAgICAgPC90YWJsZT5cXHJcXG4gICAgPC9kaXY+XFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyBidG4tdG9vbGJhclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmtvQWN0aXZlVmlldygpID09ICdmb3JtJ1xcXCI+XFxyXFxuICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zdWNjZXNzXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBvbkFkZENsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hZGROZXcnKVxcXCIgLz5cXHJcXG4gICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRhbmdlclxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25DbGVhckNsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5yZW1vdmVBbGwnKVxcXCIgLz5cXHJcXG4gICAgPC9kaXY+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmtvQWN0aXZlVmlldygpICE9ICdmb3JtJ1xcXCI+XFxyXFxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6IGtvSXRlbXNUZXh0XFxcIiBzdHlsZT1cXFwib3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDpoaWRkZW47IG1heC1oZWlnaHQ6NDAwcHg7IG1pbi1oZWlnaHQ6MjUwcHg7IHdpZHRoOjEwMCVcXFwiPjwvdGV4dGFyZWE+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItaXRlbXZhbHVlcy5odG1sXG4vLyBtb2R1bGUgaWQgPSA0NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1tYXRyaXhkcm9wZG93bmNvbHVtbnNcXFwiPlxcclxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtbWF0cml4ZHJvcGRvd25jb2x1bW5zXFxcIj5cXHJcXG4gICAgPHRhYmxlIGNsYXNzPVxcXCJ0YWJsZVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0lzTGlzdFxcXCI+XFxyXFxuICAgICAgICA8dGhlYWQ+XFxyXFxuICAgICAgICAgICAgPHRyPlxcclxcbiAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnJlcXVpcmVkJylcXFwiPjwvdGg+XFxyXFxuICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuY2VsbFR5cGUnKVxcXCI+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5uYW1lJylcXFwiPjwvdGg+XFxyXFxuICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudGl0bGUnKVxcXCI+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgPHRoPjwvdGg+XFxyXFxuICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgIDwvdGhlYWQ+XFxyXFxuICAgICAgICA8dGJvZHk+XFxyXFxuICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb0l0ZW1zIC0tPlxcclxcbiAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgPHRkPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIiBkYXRhLWJpbmQ9XFxcImNoZWNrZWQ6IGtvSXNSZXF1aXJlZFxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvQ2FuRWRpdCwgY2xpY2s6ICRwYXJlbnQub25FZGl0SXRlbUNsaWNrXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0XFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgPHRkPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IGNlbGxUeXBlQ2hvaWNlcywgdmFsdWU6IGtvQ2VsbFR5cGVcXFwiICBzdHlsZT1cXFwid2lkdGg6MTEwcHhcXFwiPjwvc2VsZWN0PlxcclxcbiAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8dGQ+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb05hbWVcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFsZXJ0IGFsZXJ0LWRhbmdlciBuby1wYWRkaW5nXFxcIiByb2xlPVxcXCJhbGVydFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmtvSGFzRXJyb3IsIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuZW50ZXJOZXdWYWx1ZScpXFxcIj48L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVGl0bGVcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMjBweFxcXCIgLz48L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8dGQ+PGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG5cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRwYXJlbnQub25EZWxldGVDbGlja1xcXCI+PHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2hcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIj48L3NwYW4+PC9idXR0b24+PC90ZD5cXHJcXG4gICAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XFxcIjNcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93IGJ0bi10b29sYmFyXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zdWNjZXNzXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBvbkFkZENsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hZGROZXcnKVxcXCIvPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRhbmdlclxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25DbGVhckNsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5yZW1vdmVBbGwnKVxcXCJcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgPC90Ym9keT5cXHJcXG4gICAgPC90YWJsZT5cXHJcXG4gICAgIDwhLS0ga28gaWY6ICFrb0lzTGlzdCgpIC0tPlxcclxcbiAgICAgICAgPGRpdiBzdHlsZT1cXFwicGFkZGluZzogNXB4XFxcIj5cXHJcXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0blxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25DYW5jZWxFZGl0SXRlbUNsaWNrXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tbGlzdC1hbHRcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICA8L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IGtvRWRpdEl0ZW0oKS5rb0VkaXRvck5hbWVcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicXVlc3Rpb25lZGl0b3ItY29udGVudFxcXCIsIGRhdGE6IGNvbHVtbkVkaXRvciB9IC0tPlxcclxcbiAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDwhLS0gL2tvIC0tPlxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbWF0cml4ZHJvcGRvd25jb2x1bW5zLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDQ1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW1vZGFsXFxcIj5cXHJcXG4gICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXBcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTohZWRpdG9yLmlzRWRpdGFibGVcXFwiPlxcclxcbiAgICAgICAgPGEgZGF0YS10b2dnbGU9XFxcIm1vZGFsXFxcIiBkYXRhLWJpbmQ9XFxcImF0dHI6IHsnZGF0YS10YXJnZXQnIDogbW9kYWxOYW1lVGFyZ2V0fVxcXCI+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBrb1RleHRcXFwiPjwvc3Bhbj48L2E+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cC1idG5cXFwiPlxcclxcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdFxcXCIgZGF0YS10b2dnbGU9XFxcIm1vZGFsXFxcIiBzdHlsZT1cXFwicGFkZGluZzogMnB4O1xcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7J2RhdGEtdGFyZ2V0JyA6IG1vZGFsTmFtZVRhcmdldH1cXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0XFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgIDwvZGl2PlxcclxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmVkaXRvci5pc0VkaXRhYmxlXFxcIiBzdHlsZT1cXFwiZGlzcGxheTp0YWJsZVxcXCI+XFxyXFxuICAgICAgICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgdHlwZT1cXFwidGV4dFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZVxcXCIgc3R5bGU9XFxcImRpc3BsYXk6dGFibGUtY2VsbDsgd2lkdGg6MTAwJVxcXCIgLz5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0blxcXCI+XFxyXFxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHRcXFwiIHN0eWxlPVxcXCJkaXNwbGF5OnRhYmxlLWNlbGw7IHBhZGRpbmc6IDJweDtcXFwiICBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjogeydkYXRhLXRhcmdldCcgOiBtb2RhbE5hbWVUYXJnZXR9XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tZWRpdFxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICA8L2J1dHRvbj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICA8L2Rpdj5cXHJcXG5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcImF0dHI6IHtpZCA6IG1vZGFsTmFtZX1cXFwiIGNsYXNzPVxcXCJtb2RhbCBmYWRlXFxcIiByb2xlPVxcXCJkaWFsb2dcXFwiPlxcclxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nXFxcIj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1jb250ZW50XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIGRhdGEtZGlzbWlzcz1cXFwibW9kYWxcXFwiPiZ0aW1lczs8L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDplZGl0b3IudGl0bGVcXFwiPjwvaDQ+XFxyXFxuICAgICAgICAgICAgICAgIDwvZGl2PiAgXFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWJvZHkgc3ZkX25vdG9wYm90dG9tcGFkZGluZ3NcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3Jjb250ZW50LScgKyBlZGl0b3JUeXBlLCBkYXRhOiBlZGl0b3IgfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZm9vdGVyXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGVkaXRvci5vbkFwcGx5Q2xpY2ssIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmFwcGx5JylcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHRcXFwiIGRhdGEtZGlzbWlzcz1cXFwibW9kYWxcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGVkaXRvci5vbkFwcGx5Q2xpY2ssIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLm9rJylcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtZGlzbWlzcz1cXFwibW9kYWxcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGVkaXRvci5vblJlc2V0Q2xpY2ssIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmNhbmNlbCcpXFxcIiBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWwuaHRtbFxuLy8gbW9kdWxlIGlkID0gNDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItbnVtYmVyXFxcIj5cXHJcXG4gICAgPGlucHV0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHR5cGU9XFxcIm51bWJlclxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZVxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiIC8+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1udW1iZXIuaHRtbFxuLy8gbW9kdWxlIGlkID0gNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItcmVzdGZ1bGxcXFwiPlxcclxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuXFxyXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtcmVzdGZ1bGxcXFwiPlxcclxcbiAgICA8Zm9ybT5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcclxcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XFxcInVybFxcXCI+VXJsOjwvbGFiZWw+XFxyXFxuICAgICAgICAgICAgPGlucHV0IGlkPVxcXCJ1cmxcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29VcmxcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIC8+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcclxcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XFxcInBhdGhcXFwiPlBhdGg6PC9sYWJlbD5cXHJcXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XFxcInBhdGhcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29QYXRoXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiAvPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJ2YWx1ZU5hbWVcXFwiPnZhbHVlTmFtZTo8L2xhYmVsPlxcclxcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cXFwidmFsdWVOYW1lXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVmFsdWVOYW1lXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiAvPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJ0aXRsZU5hbWVcXFwiPnRpdGxlTmFtZTo8L2xhYmVsPlxcclxcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cXFwidGl0bGVOYW1lXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVGl0bGVOYW1lXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiAvPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJ0aXRsZU5hbWVcXFwiPjxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDokcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnRlc3RTZXJ2aWNlJylcXFwiPjwvc3Bhbj48L2xhYmVsPlxcclxcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJvcHRpb25zOiBxdWVzdGlvbi5rb1Zpc2libGVDaG9pY2VzLCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICd2YWx1ZScsIG9wdGlvbnNDYXB0aW9uOiBxdWVzdGlvbi5vcHRpb25zQ2FwdGlvblxcXCI+PC9zZWxlY3Q+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgPC9mb3JtPlxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItcmVzdGZ1bGwuaHRtbFxuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Itc3RyaW5nXFxcIj5cXHJcXG4gICAgPGlucHV0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6IGtvVmFsdWVcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlXFxcIiAvPlxcclxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3Itc3RyaW5nLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXRleHRcXFwiPlxcclxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuXFxyXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdGV4dFxcXCI+XFxyXFxuICAgIDx0ZXh0YXJlYSBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVmFsdWVcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlXFxcIiByb3dzPVxcXCIxMFxcXCIgYXV0b2ZvY3VzPVxcXCJhdXRvZm9jdXNcXFwiPjwvdGV4dGFyZWE+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10ZXh0Lmh0bWxcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXRleHRpdGVtc1xcXCI+XFxyXFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT48IS0tIC9rbyAtLT5cXHJcXG48L3NjcmlwdD5cXHJcXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC10ZXh0aXRlbXNcXFwiPlxcclxcbjxkaXYgY2xhc3M9XFxcInBhbmVsXFxcIj5cXHJcXG4gICAgPHRhYmxlIGNsYXNzPVxcXCJ0YWJsZVxcXCI+XFxyXFxuICAgICAgICA8dGhlYWQ+XFxyXFxuICAgICAgICAgICAgPHRyPlxcclxcbiAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmlzUmVxdWlyZWQnKVxcXCI+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5uYW1lJylcXFwiPjwvdGg+XFxyXFxuICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudGl0bGUnKVxcXCI+PC90aD5cXHJcXG4gICAgICAgICAgICAgICAgPHRoPjwvdGg+XFxyXFxuICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgIDwvdGhlYWQ+XFxyXFxuICAgICAgICA8dGJvZHk+XFxyXFxuICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb0l0ZW1zIC0tPlxcclxcbiAgICAgICAgICAgIDx0cj5cXHJcXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOiBrb0lzUmVxdWlyZWRcXFwiIC8+PC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvTmFtZVxcXCIgc3R5bGU9XFxcIndpZHRoOjE4MHB4XFxcIiAvPjwvdGQ+XFxyXFxuICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1RpdGxlXFxcIiBzdHlsZT1cXFwid2lkdGg6MTgwcHhcXFwiIC8+PC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgPHRkPjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkcGFyZW50Lm9uRGVsZXRlQ2xpY2tcXFwiPjxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoXFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+PC9zcGFuPjwvYnV0dG9uPjwvdGQ+XFxyXFxuICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICA8dHI+XFxyXFxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVxcXCI0XFxcIj48aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zdWNjZXNzXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBvbkFkZENsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hZGROZXcnKVxcXCIvPjwvdGQ+XFxyXFxuICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgIDwvdGJvZHk+XFxyXFxuICAgIDwvdGFibGU+XFxyXFxuPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10ZXh0aXRlbXMuaHRtbFxuLy8gbW9kdWxlIGlkID0gNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItdHJpZ2dlcnNcXFwiPlxcclxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdHJpZ2dlcnNcXFwiPlxcclxcbjxkaXYgY2xhc3M9XFxcInBhbmVsXFxcIj5cXHJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbToxMHB4XFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMlxcXCI+XFxyXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgZm9ybS1pbmxpbmVcXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cC1idG5cXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlXFxcIiBkYXRhLXRvZ2dsZT1cXFwiZHJvcGRvd25cXFwiIGFyaWEtaGFzcG9wdXA9XFxcInRydWVcXFwiIGFyaWEtZXhwYW5kZWQ9XFxcImZhbHNlXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzXFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwiZHJvcGRvd24tbWVudVxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBhdmFpbGFibGVUcmlnZ2VycyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgZGF0YS1iaW5kPVxcXCJjbGljazogJHBhcmVudC5vbkFkZENsaWNrKCRkYXRhKVxcXCI+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhXFxcIj48L3NwYW4+PC9hPjwvbGk+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJvcHRpb25zOiBrb0l0ZW1zLCBvcHRpb25zVGV4dDogJ2tvVGV4dCcsIHZhbHVlOiBrb1NlbGVjdGVkXFxcIj48L3NlbGVjdD5cXHJcXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0blxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS1iaW5kPVxcXCJlbmFibGU6IGtvU2VsZWN0ZWQoKSAhPSBudWxsLCBjbGljazogb25EZWxldGVDbGlja1xcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdFxcXCI+PHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlXFxcIj48L3NwYW4+PC9idXR0b24+XFxyXFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cXHJcXG4gICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2VsZWN0ZWQoKSA9PSBudWxsXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1F1ZXN0aW9ucygpLmxlbmd0aCA9PSAwLCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLm5vcXVlc3Rpb25zJylcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvUXVlc3Rpb25zKCkubGVuZ3RoID4gMCwgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5jcmVhdGV0cmlnZ2VyJylcXFwiPjwvZGl2PlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2VsZWN0ZWQoKSAhPSBudWxsXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ3aXRoOiBrb1NlbGVjdGVkXFxcIj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiICBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbToxMHB4XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTQgY29sLXNtLTRcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgIGZvcm0taW5saW5lXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudHJpZ2dlck9uJylcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6JHBhcmVudC5rb1F1ZXN0aW9ucywgdmFsdWU6IGtvTmFtZVxcXCI+PC9zZWxlY3Q+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy00IGNvbC1zbS00XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczphdmFpbGFibGVPcGVyYXRvcnMsIG9wdGlvbnNWYWx1ZTogJ25hbWUnLCBvcHRpb25zVGV4dDogJ3RleHQnLCB2YWx1ZTprb09wZXJhdG9yXFxcIj48L3NlbGVjdD5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTQgY29sLXNtLTRcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXBcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvUmVxdWlyZVZhbHVlLCB2YWx1ZTprb1ZhbHVlXFxcIiAvPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IGtvVHlwZSgpID09ICd2aXNpYmxldHJpZ2dlcicgLS0+XFxyXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTYgY29sLXNtLTZcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtcycsIGRhdGE6IHBhZ2VzIH0gLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy02IGNvbC1zbS02XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzaXRlbXMnLCBkYXRhOiBxdWVzdGlvbnMgfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICA8IS0tIGtvIGlmOiBrb1R5cGUoKSA9PSAnY29tcGxldGV0cmlnZ2VyJyAtLT5cXHJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcclxcbiAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XFxcIm1hcmdpbjogMTBweFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnRyaWdnZXJDb21wbGV0ZVRleHQnKVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgPCEtLSBrbyBpZjoga29UeXBlKCkgPT0gJ3NldHZhbHVldHJpZ2dlcicgLS0+XFxyXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTQgY29sLXNtLTRcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgZm9ybS1pbmxpbmVcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VyU2V0VG9OYW1lJylcXFwiPjwvc3Bhbj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgdHlwZT1cXFwidGV4dFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb3NldFRvTmFtZVxcXCIgLz5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTQgY29sLXNtLTRcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgZm9ybS1pbmxpbmVcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VyU2V0VmFsdWUnKVxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvc2V0VmFsdWVcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTQgY29sLXNtLTRcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXBcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOiBrb2lzVmFyaWFibGVcXFwiIC8+IDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VySXNWYXJpYWJsZScpXFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy04IGNvbC1zbS04XFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgPC9kaXY+XFxyXFxuPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10cmlnZ2Vycy5odG1sXG4vLyBtb2R1bGUgaWQgPSA1MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc2l0ZW1zXFxcIj5cXHJcXG4gICAgPGRpdiBjbGFzcz1cXFwicGFuZWwgbm8tbWFyZ2lucyBuby1wYWRkaW5nXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0aXRsZVxcXCIgc3R5bGU9XFxcIm1hcmdpbi1ib3R0b206MTBweFxcXCI+PC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCI+XFxyXFxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBtdWx0aXBsZT1cXFwibXVsdGlwbGVcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczprb0Nob29zZW4sIHZhbHVlOiBrb0Nob29zZW5TZWxlY3RlZFxcXCI+PC9zZWxlY3Q+XFxyXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0blxcXCIgc3R5bGU9XFxcInZlcnRpY2FsLWFsaWduOnRvcFxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcImVuYWJsZToga29DaG9vc2VuU2VsZWN0ZWQoKSAhPSBudWxsLCBjbGljazogb25EZWxldGVDbGlja1xcXCIgY2xhc3M9XFxcImJ0blxcXCI+PHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlXFxcIj48L3NwYW4+PC9idXR0b24+XFxyXFxuICAgICAgICAgICAgPC9zcGFuPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCIgc3R5bGU9XFxcIm1hcmdpbi10b3A6NXB4XFxcIj5cXHJcXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczprb09iamVjdHMsIHZhbHVlOiBrb1NlbGVjdGVkXFxcIj48L3NlbGVjdD5cXHJcXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYnRuXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHRcXFwiIGRhdGEtYmluZD1cXFwiZW5hYmxlOiBrb1NlbGVjdGVkKCkgIT0gbnVsbCwgY2xpY2s6IG9uQWRkQ2xpY2tcXFwiIGNsYXNzPVxcXCJidG4gYnRuLXN1Y2Nlc3NcXFwiPjxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXNcXFwiPjwvc3Bhbj48L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICA8L3NwYW4+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc2l0ZW1zLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDUzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXZhbGlkYXRvcnNcXFwiPlxcclxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxyXFxuPC9zY3JpcHQ+XFxyXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdmFsaWRhdG9yc1xcXCI+XFxyXFxuPGRpdiBjbGFzcz1cXFwicGFuZWxcXFwiPlxcclxcbiAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInJvdyBpbnB1dC1ncm91cFxcXCI+XFxyXFxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJkcm9wZG93bi10b2dnbGUgaW5wdXQtZ3JvdXAtYWRkb25cXFwiIGRhdGEtdG9nZ2xlPVxcXCJkcm9wZG93blxcXCIgYXJpYS1oYXNwb3B1cD1cXFwidHJ1ZVxcXCIgYXJpYS1leHBhbmRlZD1cXFwiZmFsc2VcXFwiPlxcclxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzXFxcIj48L3NwYW4+XFxyXFxuICAgICAgICAgICAgPC9idXR0b24+XFxyXFxuICAgICAgICAgICAgPHVsIGNsYXNzPVxcXCJkcm9wZG93bi1tZW51IGlucHV0LWdyb3VwXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBhdmFpbGFibGVWYWxpZGF0b3JzIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cXFwiI1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogJHBhcmVudC5vbkFkZENsaWNrKCRkYXRhKVxcXCI+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhXFxcIj48L3NwYW4+PC9hPjwvbGk+XFxyXFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvICAtLT5cXHJcXG4gICAgICAgICAgICA8L3VsPlxcclxcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJvcHRpb25zOiBrb0l0ZW1zLCBvcHRpb25zVGV4dDogJ3RleHQnLCB2YWx1ZToga29TZWxlY3RlZFxcXCI+PC9zZWxlY3Q+XFxyXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0blxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcImVuYWJsZToga29TZWxlY3RlZCgpICE9IG51bGwsIGNsaWNrOiBvbkRlbGV0ZUNsaWNrXFxcIiBjbGFzcz1cXFwiYnRuXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmVcXFwiPjwvc3Bhbj48L2J1dHRvbj5cXHJcXG4gICAgICAgICAgICA8L3NwYW4+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgPC9kaXY+XFxyXFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnb2JqZWN0ZWRpdG9yJywgZGF0YTogc2VsZWN0ZWRPYmplY3RFZGl0b3IgfVxcXCI+PC9kaXY+XFxyXFxuPC9kaXY+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci12YWxpZGF0b3JzLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInF1ZXN0aW9uZWRpdG9yLWNvbnRlbnRcXFwiPlxcclxcbiAgICA8dWwgY2xhc3M9XFxcIm5hdiBuYXYtdGFic1xcXCIgZGF0YS1iaW5kPVxcXCJmb3JlYWNoOiBrb1RhYnNcXFwiPlxcclxcbiAgICAgICAgPGxpIHJvbGU9XFxcInByZXNlbnRhdGlvblxcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHthY3RpdmU6ICRwYXJlbnQua29BY3RpdmVUYWIoKSA9PSAkZGF0YS5uYW1lfSwgY2xpY2s6ICRwYXJlbnQub25UYWJDbGlja1xcXCI+PGE+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLnRpdGxlXFxcIj48L3NwYW4+PC9hPjwvbGk+XFxyXFxuICAgIDwvdWw+ICAgICAgICAgICAgICAgXFxyXFxuICAgIDwhLS0ga28gZm9yZWFjaDoga29UYWJzIC0tPlxcclxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTokcGFyZW50LmtvQWN0aXZlVGFiKCkgPT0gJGRhdGEubmFtZVxcXCIgc3R5bGU9XFxcIm1hcmdpbi10b3A6NXB4XFxcIj5cXHJcXG4gICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJGRhdGEuaHRtbFRlbXBsYXRlLCBkYXRhOiAkZGF0YS50ZW1wbGF0ZU9iamVjdCB9IC0tPlxcclxcbiAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgIDwvZGl2PlxcclxcbiAgICA8IS0tIC9rbyAgLS0+XFxyXFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvci1jb250ZW50Lmh0bWxcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInF1ZXN0aW9uZWRpdG9yXFxcIj5cXHJcXG4gICAgPGRpdiBpZD1cXFwic3VydmV5cXVlc3Rpb25lZGl0b3J3aW5kb3dcXFwiIGNsYXNzPVxcXCJtb2RhbCBmYWRlXFxcIiByb2xlPVxcXCJkaWFsb2dcXFwiZGF0YS1iaW5kPVxcXCJ3aXRoOmtvRWRpdG9yXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxyXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtY29udGVudFxcXCI+XFxyXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWhlYWRlclxcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj4mdGltZXM7PC9idXR0b24+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XFxcIm1vZGFsLXRpdGxlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6a29UaXRsZVxcXCI+PC9oND5cXHJcXG4gICAgICAgICAgICAgICAgPC9kaXY+ICBcXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtYm9keSBzdmRfbm90b3Bib3R0b21wYWRkaW5nc1xcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJxdWVzdGlvbmVkaXRvci1jb250ZW50XFxcIiwgZGF0YTogJGRhdGEgfSAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcclxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZm9vdGVyXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uQXBwbHlDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuYXBwbHknKVxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMHB4XFxcIiAvPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdFxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25Pa0NsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5vaycpXFxcIiBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBvblJlc2V0Q2xpY2ssIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmNhbmNlbCcpXFxcIiBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicXVlc3Rpb25lZGl0b3J0YWItZ2VuZXJhbFxcXCI+XFxyXFxuICAgIDxkaXY+XFxyXFxuICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHByb3BlcnRpZXMucm93cyAtLT5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcclxcbiAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogcHJvcGVydGllcyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFsZXJ0IGFsZXJ0LWRhbmdlclxcXCIgcm9sZT1cXFwiYWxlcnRcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTprb0hhc0Vycm9yXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduXFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzci1vbmx5XFxcIj5FcnJvcjo8L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGRhdGEtYmluZD1cXFwidGV4dDprb0Vycm9yVGV4dFxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgXFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBlZGl0VHlwZSAhPSAnY2hlY2snIC0tPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XFxcInRleHQ6dGl0bGVcXFwiPjwvbGFiZWw+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGVkaXRUeXBlID09ICd0ZXh0JyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZSwgZGlzYWJsZTogZGlzYWJsZWRcXFwiIC8+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGVkaXRUeXBlID09ICd0ZXh0YXJlYScgLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHR5cGU9XFxcInRleHRcXFwiIHJvd3M9XFxcIjJcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6IGtvVmFsdWUsIGRpc2FibGU6IGRpc2FibGVkXFxcIj48L3RleHRhcmVhPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBlZGl0VHlwZSA9PSAnY2hlY2snIC0tPlxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJjaGVja2JveC1pbmxpbmVcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOiBrb1ZhbHVlLCBkaXNhYmxlOiBkaXNhYmxlZFxcXCI+PGxhYmVsIGRhdGEtYmluZD1cXFwidGV4dDp0aXRsZVxcXCI+PC9sYWJlbD48L3NwYW4+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXHJcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGVkaXRUeXBlID09ICdkcm9wZG93bicgLS0+XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiAgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZSwgb3B0aW9uczogY2hvaWNlcywgZGlzYWJsZTogZGlzYWJsZWRcXFwiPjwvc2VsZWN0PlxcclxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxyXFxuICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcclxcbiAgICAgICAgPC9kaXY+XFxyXFxuICAgICAgICA8IS0tIC9rbyAgLS0+XFxyXFxuICAgIDwvZGl2Plxcclxcbjwvc2NyaXB0PlxcclxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3J0YWItZ2VuZXJhbC5odG1sXG4vLyBtb2R1bGUgaWQgPSA1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXllbWJlZGluZ1xcXCI+XFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cXFwidmFsdWU6a29MaWJyYXJ5VmVyc2lvblxcXCI+XFxyXFxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiYW5ndWxhclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LmFuZ3VsYXInKVxcXCI+PC9vcHRpb24+XFxyXFxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwianF1ZXJ5XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuanF1ZXJ5JylcXFwiPjwvb3B0aW9uPlxcclxcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcImtub2Nrb3V0XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcua25vY2tvdXQnKVxcXCI+PC9vcHRpb24+XFxyXFxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwicmVhY3RcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5yZWFjdCcpXFxcIj48L29wdGlvbj5cXHJcXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJ2dWVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy52dWUnKVxcXCI+PC9vcHRpb24+XFxyXFxuICAgICAgICA8L3NlbGVjdD5cXHJcXG4gICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1NjcmlwdFVzaW5nXFxcIj5cXHJcXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJib290c3RyYXBcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5ib290c3RyYXAnKVxcXCI+PC9vcHRpb24+XFxyXFxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwic3RhbmRhcmRcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5zdGFuZGFyZCcpXFxcIj48L29wdGlvbj5cXHJcXG4gICAgICAgIDwvc2VsZWN0PlxcclxcbiAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvU2hvd0FzV2luZG93XFxcIj5cXHJcXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJwYWdlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc2hvd09uUGFnZScpXFxcIj48L29wdGlvbj5cXHJcXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJ3aW5kb3dcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5zaG93SW5XaW5kb3cnKVxcXCI+PC9vcHRpb24+XFxyXFxuICAgICAgICA8L3NlbGVjdD5cXHJcXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cXFwiY2hlY2tib3gtaW5saW5lXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29IYXNJZHNcXFwiPlxcclxcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOmtvTG9hZFN1cnZleVxcXCIgLz5cXHJcXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcubG9hZEZyb21TZXJ2ZXInKVxcXCI+PC9zcGFuPlxcclxcbiAgICAgICAgPC9sYWJlbD5cXHJcXG4gICAgPC9kaXY+XFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy50aXRsZVNjcmlwdCcpXFxcIj48L2Rpdj5cXHJcXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmhhc0FjZUVkaXRvclxcXCI+XFxyXFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwic3VydmV5RW1iZWRpbmdIZWFkXFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjcwcHg7d2lkdGg6MTAwJVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgIDx0ZXh0YXJlYSBkYXRhLWJpbmQ9XFxcInZpc2libGU6IWhhc0FjZUVkaXRvciwgdGV4dDoga29IZWFkVGV4dFxcXCIgc3R5bGU9XFxcImhlaWdodDo3MHB4O3dpZHRoOjEwMCVcXFwiPjwvdGV4dGFyZWE+XFxyXFxuICAgIDwvZGl2PlxcclxcbiAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1Zpc2libGVIdG1sXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiICBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcudGl0bGVIdG1sJylcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6aGFzQWNlRWRpdG9yXFxcIj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlFbWJlZGluZ0JvZHlcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6MzBweDt3aWR0aDoxMDAlXFxcIj48L2Rpdj5cXHJcXG4gICAgICAgIDwvZGl2PlxcclxcbiAgICAgICAgPHRleHRhcmVhIGRhdGEtYmluZD1cXFwidmlzaWJsZTohaGFzQWNlRWRpdG9yLCB0ZXh0OiBrb0JvZHlUZXh0XFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjMwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXHJcXG4gICAgPC9kaXY+XFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsXFxcIj5cXHJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiICBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcudGl0bGVKYXZhU2NyaXB0JylcXFwiPjwvZGl2PlxcclxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6aGFzQWNlRWRpdG9yXFxcIj5cXHJcXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlFbWJlZGluZ0phdmFcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJVxcXCI+PC9kaXY+XFxyXFxuICAgICAgICA8L2Rpdj5cXHJcXG4gICAgICAgIDx0ZXh0YXJlYSBkYXRhLWJpbmQ9XFxcInZpc2libGU6IWhhc0FjZUVkaXRvciwgdGV4dDoga29KYXZhVGV4dFxcXCIgc3R5bGU9XFxcImhlaWdodDozMDBweDt3aWR0aDoxMDAlXFxcIj48L3RleHRhcmVhPlxcclxcbiAgICA8L2Rpdj5cXHJcXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvc3VydmV5ZW1iZWRpbmcuaHRtbFxuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIlwiICsgcmVxdWlyZSgnLi9pbmRleC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9qc29uZWRpdG9yLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL29iamVjdGVkaXRvci5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9vYmplY3R2ZXJicy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wYWdlZWRpdG9yLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3N1cnZleWVtYmVkaW5nLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvci5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3ItY29udGVudC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3J0YWItZ2VuZXJhbC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItYm9vbGVhbi5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZHJvcGRvd24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWh0bWwuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWl0ZW12YWx1ZXMuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW1hdHJpeGRyb3Bkb3duY29sdW1ucy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWwuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW51bWJlci5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItcmVzdGZ1bGwuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXN0cmluZy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdGV4dC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdGV4dGl0ZW1zLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10cmlnZ2Vycy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtcy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdmFsaWRhdG9ycy5odG1sJykgKyBcIlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy90ZW1wbGF0ZXMvZW50cnkuaHRtbFxuLy8gbW9kdWxlIGlkID0gNTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XHJcbmltcG9ydCB7U3VydmV5VGV4dFdvcmtlcn0gZnJvbSBcIi4vdGV4dFdvcmtlclwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUpTT05FZGl0b3Ige1xyXG4gICAgcHVibGljIHN0YXRpYyB1cGRhdGVUZXh0VGltZW91dDogbnVtYmVyID0gMTAwMDtcclxuXHJcbiAgICBwcml2YXRlIGlzUHJvY2Vzc2luZ0ltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGFjZUVkaXRvcjogQWNlQWpheC5FZGl0b3I7XHJcbiAgICBwcml2YXRlIHRleHRXb3JrZXI6IFN1cnZleVRleHRXb3JrZXI7XHJcbiAgICBrb1RleHQ6IGFueTtcclxuICAgIGtvRXJyb3JzOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5rb1RleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xyXG4gICAgICAgIHRoaXMua29FcnJvcnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5rb1RleHQuc3Vic2NyaWJlKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBzZWxmLm9uSnNvbkVkaXRvckNoYW5nZWQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBpbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNBY2VFZGl0b3IpIHJldHVybjtcclxuICAgICAgICB0aGlzLmFjZUVkaXRvciA9IGFjZS5lZGl0KFwic3VydmV5anNKU09ORWRpdG9yXCIpO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvL1RPRE8gYWRkIGV2ZW50IHRvIGNoYW5nZSBhY2UgdGhlbWUgYW5kIG1vZGVcclxuICAgICAgICAvL3RoaXMuYWNlRWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgLy90aGlzLmFjZUVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9qc29uXCIpO1xyXG4gICAgICAgIHRoaXMuYWNlRWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5vbkpzb25FZGl0b3JDaGFuZ2VkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdvcmtlcih0cnVlKTtcclxuICAgICAgICBTdXJ2ZXlUZXh0V29ya2VyLm5ld0xpbmVDaGFyID0gdGhpcy5hY2VFZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0TmV3TGluZUNoYXJhY3RlcigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBoYXNBY2VFZGl0b3IoKTogYm9vbGVhbiB7IHJldHVybiB0eXBlb2YgYWNlICE9PSBcInVuZGVmaW5lZFwiOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzQWNlRWRpdG9yKSByZXR1cm4gdGhpcy5rb1RleHQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY2VFZGl0b3IuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdJbW1lZGlhdGVseSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5rb1RleHQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmFjZUVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFjZUVkaXRvci5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWNlRWRpdG9yLnJlbmRlcmVyLnVwZGF0ZUZ1bGwodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvY2Vzc0pzb24odmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nSW1tZWRpYXRlbHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzaG93KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5hY2VFZGl0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5hY2VFZGl0b3IuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzSnNvbkNvcnJlY3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy50ZXh0V29ya2VyID0gbmV3IFN1cnZleVRleHRXb3JrZXIodGhpcy50ZXh0KTtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0V29ya2VyLmlzSnNvbkNvcnJlY3Q7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHsgcmV0dXJuIHRoaXMudGV4dFdvcmtlci5zdXJ2ZXk7IH1cclxuICAgIHByaXZhdGUgdGltZW91dElkOiBudW1iZXIgPSAtMTtcclxuICAgIHByaXZhdGUgb25Kc29uRWRpdG9yQ2hhbmdlZCgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXRJZCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZ0ltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0SWQgPSAtMTtcclxuICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc0pzb24oc2VsZi50ZXh0KTtcclxuICAgICAgICAgICAgfSwgU3VydmV5SlNPTkVkaXRvci51cGRhdGVUZXh0VGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzSnNvbih0ZXh0OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHRoaXMudGV4dFdvcmtlciA9IG5ldyBTdXJ2ZXlUZXh0V29ya2VyKHRleHQpO1xyXG4gICAgICAgIGlmICh0aGlzLmFjZUVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFjZUVkaXRvci5nZXRTZXNzaW9uKCkuc2V0QW5ub3RhdGlvbnModGhpcy5jcmVhdGVBbm5vdGF0aW9ucyh0ZXh0LCB0aGlzLnRleHRXb3JrZXIuZXJyb3JzKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5rb0Vycm9ycyh0aGlzLnRleHRXb3JrZXIuZXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNyZWF0ZUFubm90YXRpb25zKHRleHQ6IHN0cmluZywgZXJyb3JzOiBhbnlbXSk6IEFjZUFqYXguQW5ub3RhdGlvbltdIHtcclxuICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBuZXcgQXJyYXk8QWNlQWpheC5Bbm5vdGF0aW9uPigpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IGVycm9yc1tpXTtcclxuICAgICAgICAgICAgdmFyIGFubm90YXRpb246IEFjZUFqYXguQW5ub3RhdGlvbiA9IHsgcm93OiBlcnJvci5wb3NpdGlvbi5zdGFydC5yb3csIGNvbHVtbjogZXJyb3IucG9zaXRpb24uc3RhcnQuY29sdW1uLCB0ZXh0OiBlcnJvci50ZXh0LCB0eXBlOiBcImVycm9yXCIgfTtcclxuICAgICAgICAgICAgYW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zO1xyXG4gICAgfVxyXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleUpTT05FZGl0b3IudHMiLCIvLyBzdHlsZXNcclxuaW1wb3J0IFwiLi4vbWFpbi5zY3NzXCI7XHJcblxyXG5leHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcclxuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcclxuXHJcbmltcG9ydCAqIGFzIGpRdWVyeSBmcm9tIFwianF1ZXJ5XCI7XHJcbmdsb2JhbFtcImpRdWVyeVwiXSA9IGpRdWVyeTtcclxuaW1wb3J0IFwiYm9vdHN0cmFwXCI7XHJcblxyXG5leHBvcnQge0RyYWdEcm9wSGVscGVyfSBmcm9tIFwiLi4vZHJhZ2Ryb3BoZWxwZXJcIjtcclxuZXhwb3J0IHtcclxuICAgIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSwgU3VydmV5U3RyaW5nUHJvcGVydHlFZGl0b3IsXHJcbiAgICBTdXJ2ZXlEcm9wZG93blByb3BlcnR5RWRpdG9yLCBTdXJ2ZXlCb29sZWFuUHJvcGVydHlFZGl0b3IsIFN1cnZleU51bWJlclByb3BlcnR5RWRpdG9yXHJcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcclxuZXhwb3J0IHtTdXJ2ZXlQcm9wZXJ0eVRleHRJdGVtc0VkaXRvcn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVRleHRJdGVtc0VkaXRvclwiO1xyXG5leHBvcnQge1N1cnZleVByb3BlcnR5SXRlbXNFZGl0b3J9IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlJdGVtc0VkaXRvclwiO1xyXG5leHBvcnQge1N1cnZleVByb3BlcnR5SXRlbVZhbHVlc0VkaXRvcn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3JcIjtcclxuZXhwb3J0IHtTdXJ2ZXlQcm9wZXJ0eURyb3Bkb3duQ29sdW1uc0VkaXRvciwgU3VydmV5UHJvcGVydHlNYXRyaXhEcm9wZG93bkNvbHVtbnNJdGVtfVxyXG4gICAgZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0VkaXRvclwiO1xyXG5leHBvcnQge1N1cnZleVByb3BlcnR5TW9kYWxFZGl0b3J9IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNb2RhbEVkaXRvclwiO1xyXG5leHBvcnQge1N1cnZleVByb3BlcnR5UmVzdWx0ZnVsbEVkaXRvcn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVJlc3RmdWxsRWRpdG9yXCI7XHJcbmV4cG9ydCB7U3VydmV5UHJvcGVydHlUcmlnZ2Vyc0VkaXRvcn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVRyaWdnZXJzRWRpdG9yXCI7XHJcbmV4cG9ydCB7U3VydmV5UHJvcGVydHlWYWxpZGF0b3JzRWRpdG9yfSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VmFsaWRhdG9yc0VkaXRvclwiO1xyXG5leHBvcnQge1N1cnZleU9iamVjdHN9IGZyb20gXCIuLi9zdXJ2ZXlPYmplY3RzXCI7XHJcblxyXG5leHBvcnQge2VkaXRvckxvY2FsaXphdGlvbn0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xyXG5cclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxQcm9wZXJ0aWVzLCBTdXJ2ZXlRdWVzdGlvbkVkaXRvckdlbmVyYWxSb3csIFN1cnZleVF1ZXN0aW9uRWRpdG9yR2VuZXJhbFByb3BlcnR5fSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yR2VuZXJhbFByb3BlcnRpZXNcIjtcclxuZXhwb3J0IHtTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb259IGZyb20gXCIuLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uXCI7XHJcbmV4cG9ydCB7U3VydmV5UHJvcGVydHlFZGl0b3JTaG93V2luZG93LCBTdXJ2ZXlRdWVzdGlvbkVkaXRvciwgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWJHZW5lcmFsLCBTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYlByb3BlcnR5fSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XHJcblxyXG5leHBvcnQge1F1ZXN0aW9uVG9vbGJveH0gZnJvbSBcIi4uL3F1ZXN0aW9uVG9vbGJveFwiO1xyXG5leHBvcnQge1N1cnZleU9iamVjdFByb3BlcnR5fSBmcm9tIFwiLi4vb2JqZWN0UHJvcGVydHlcIjtcclxuZXhwb3J0IHtTdXJ2ZXlPYmplY3RFZGl0b3J9IGZyb20gXCIuLi9vYmplY3RFZGl0b3JcIjtcclxuZXhwb3J0IHtTdXJ2ZXlQYWdlc0VkaXRvcn0gZnJvbSBcIi4uL3BhZ2VzRWRpdG9yXCI7XHJcbmV4cG9ydCB7U3VydmV5VGV4dFdvcmtlcn0gZnJvbSBcIi4uL3RleHRXb3JrZXJcIjtcclxuZXhwb3J0IHtPYmpUeXBlLCBTdXJ2ZXlIZWxwZXJ9IGZyb20gXCIuLi9zdXJ2ZXlIZWxwZXJcIjtcclxuZXhwb3J0IHtTdXJ2ZXlFbWJlZGluZ1dpbmRvd30gZnJvbSBcIi4uL3N1cnZleUVtYmVkaW5nV2luZG93XCI7XHJcbmV4cG9ydCB7U3VydmV5VmVyYnMsIFN1cnZleVZlcmJJdGVtLCBTdXJ2ZXlWZXJiQ2hhbmdlVHlwZUl0ZW0sIFN1cnZleVZlcmJDaGFuZ2VQYWdlSXRlbX0gZnJvbSBcIi4uL29iamVjdFZlcmJzXCI7XHJcbmV4cG9ydCB7U3VydmV5VW5kb1JlZG8sIFVuZG9SZWRvSXRlbX0gZnJvbSBcIi4uL3VuZG9yZWRvXCI7XHJcbmV4cG9ydCB7U3VydmV5Rm9yRGVzaWduZXJ9IGZyb20gXCIuLi9zdXJ2ZXlqc09iamVjdHNcIlxyXG5leHBvcnQge1N1cnZleUVkaXRvcn0gZnJvbSBcIi4uL2VkaXRvclwiO1xyXG5cclxuLy9lZGl0b3JMb2NhbGl6YXRpb25cclxuaW1wb3J0ICcuLi9sb2NhbGl6YXRpb24vZnJlbmNoJztcclxuXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2luZGV4LnRzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/0.12.8/surveyeditor.min.js b/0.12.8/surveyeditor.min.js new file mode 100644 index 00000000..5ad14224 --- /dev/null +++ b/0.12.8/surveyeditor.min.js @@ -0,0 +1,7 @@ +/*! + * surveyjs Editor v0.12.8 + * (c) Devsoft Baltic O� - http://surveyjs.io/ + * Github - https://github.com/surveyjs/editor + * License: (http://editor.surveyjs.io/license.html) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("knockout"),require("survey-knockout"),require("jquery"),require("bootstrap")):"function"==typeof define&&define.amd?define("SurveyEditor",["knockout","survey-knockout","jquery","bootstrap"],t):"object"==typeof exports?exports.SurveyEditor=t(require("knockout"),require("survey-knockout"),require("jquery"),require("bootstrap")):e.SurveyEditor=t(e.ko,e.Survey,e.jQuery,e.bootstrap)}(this,function(e,t,r,n){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=61)}([function(t,r){t.exports=e},function(e,r){e.exports=t},function(e,t,r){"use strict";r.d(t,"a",function(){return n});var n={currentLocale:"",locales:{},getString:function(e,t){void 0===t&&(t=null),t||(t=this.currentLocale);var r=t?this.locales[t]:o;r||(r=o);for(var n=e.split("."),i=r,s=0;s",fastEntry:"Fast Entry",formEntry:"Form Entry",testService:"Test the service",expressionHelp:"Please enter a boolean expression. It should return true to keep the question/page visible. For example: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)",propertyIsEmpty:"Please enter value into the property",value:"Value",text:"Text",required:"Required?",columnEdit:"Edit column: {0}",hasOther:"Has other item",name:"Name",title:"Title",cellType:"Cell type",colCount:"Column count",choicesOrder:"Select choices order",visible:"Is visible?",isRequired:"Is required?",startWithNewLine:"Is start with new line?",rows:"Row count",placeHolder:"Input place holder",showPreview:"Is image preview shown?",storeDataAsText:"Store file content in JSON result as text",maxSize:"Maximum file size in bytes",imageHeight:"Image height",imageWidth:"Image width",rowCount:"Row count",addRowText:"Add row button text",removeRowText:"Remove row button text",minRateDescription:"Minimum rate description",maxRateDescription:"Maximum rate description",inputType:"Input type",optionsCaption:"Options caption",qEditorTitle:"Edit question: {0}",tabs:{general:"General",fileOptions:"Options",html:"Html Editor",columns:"Columns",rows:"Rows",choices:"Choices",visibleIf:"Visible If",rateValues:"Rate Values",choicesByUrl:"Choices from Web",matrixChoices:"Default Choices",multipleTextItems:"Text Inputs"},editProperty:"Edit property '{0}'",items:"[ Items: {0} ]",enterNewValue:"Please, enter the value.",noquestions:"There is no any question in the survey.",createtrigger:"Please create a trigger",triggerOn:"On ",triggerMakePagesVisible:"Make pages visible:",triggerMakeQuestionsVisible:"Make questions visible:",triggerCompleteText:"Complete the survey if succeed.",triggerNotSet:"The trigger is not set",triggerRunIf:"Run if",triggerSetToName:"Change value of: ",triggerSetValue:"to: ",triggerIsVariable:"Do not put the variable into the survey result.",verbChangeType:"Change type ",verbChangePage:"Change page "},op:{empty:"is empty",notempty:"is not empty",equal:"equals",notequal:"not equals",contains:"contains",notcontains:"not contains",greater:"greater",less:"less",greaterorequal:"greater or equals",lessorequal:"Less or Equals"},ew:{angular:"Use Angular version",jquery:"Use jQuery version",knockout:"Use Knockout version",react:"Use React version",vue:"Use Vue version",bootstrap:"For bootstrap framework",standard:"No bootstrap",showOnPage:"Show survey on a page",showInWindow:"Show survey in a window",loadFromServer:"Load Survey JSON from server",titleScript:"Scripts and styles",titleHtml:"HTML",titleJavaScript:"JavaScript"},p:{name:"name",title:{name:"title",title:"Leave it empty, if it is the same as 'Name'"},survey_title:{name:"title",title:"It will be shown on every page."},page_title:{name:"title",title:"Page title"}}};n.locales.en=o},function(e,t,r){"use strict";function n(e,t){function r(){this.constructor=e}for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}t.a=n;Object.assign},function(e,t,r){"use strict";var n=r(3);r.d(t,"a",function(){return o}),r.d(t,"b",function(){return i}),r.d(t,"c",function(){return s}),r.d(t,"d",function(){return a}),r.d(t,"e",function(){return l});var o=function(){function e(){this.value_=null,this.options=null}return e.registerEditor=function(t,r){e.editorRegisteredList[t]=r},e.createEditor=function(t,r){var n=e.editorRegisteredList[t];n||(n=e.editorRegisteredList[e.defaultEditor]);var o=n();return o.onChanged=r,o},Object.defineProperty(e.prototype,"editorType",{get:function(){throw"editorType is not defined"},enumerable:!0,configurable:!0}),e.prototype.getValueText=function(e){return e},Object.defineProperty(e.prototype,"value",{get:function(){return this.value_},set:function(e){e=this.getCorrectedValue(e),this.setValueCore(e),this.onValueChanged()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"locale",{get:function(){return this.onGetLocale?this.onGetLocale():""},enumerable:!0,configurable:!0}),e.prototype.setValueCore=function(e){this.value_=e},e.prototype.setTitle=function(e){},e.prototype.setObject=function(e){},e.prototype.onValueChanged=function(){},e.prototype.getCorrectedValue=function(e){return e},e}();o.defaultEditor="string",o.editorRegisteredList={};var i=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"string"},enumerable:!0,configurable:!0}),t}(o),s=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"dropdown"},enumerable:!0,configurable:!0}),t}(o),a=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"boolean"},enumerable:!0,configurable:!0}),t}(o),l=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"number"},enumerable:!0,configurable:!0}),t}(o);o.registerEditor("string",function(){return new i}),o.registerEditor("dropdown",function(){return new s}),o.registerEditor("boolean",function(){return new a}),o.registerEditor("number",function(){return new l})},function(e,t,r){"use strict";var n=r(3),o=r(0),i=(r.n(o),r(8)),s=r(2);r.d(t,"a",function(){return a});var a=function(e){function t(){var t=e.call(this)||this;t.koItems=o.observableArray(),t.value=[];var r=t;return r.onDeleteClick=function(e){r.koItems.remove(e)},r.onClearClick=function(e){r.koItems.removeAll()},r.onAddClick=function(){r.AddItem()},r.onMoveUpClick=function(e){r.moveUp(e)},r.onMoveDownClick=function(e){r.moveDown(e)},t}return n.a(t,e),t.prototype.getValueText=function(e){var t=e?e.length:0;return s.a.getString("pe.items").format(t)},t.prototype.getCorrectedValue=function(e){return null!=e&&Array.isArray(e)||(e=[]),e},t.prototype.AddItem=function(){this.koItems.push(this.createNewEditorItem())},t.prototype.moveUp=function(e){var t=this.koItems(),r=t.indexOf(e);r<1||(t[r]=t[r-1],t[r-1]=e,this.koItems(t))},t.prototype.moveDown=function(e){var t=this.koItems(),r=t.indexOf(e);r<0||r>=t.length-1||(t[r]=t[r+1],t[r+1]=e,this.koItems(t))},t.prototype.onValueChanged=function(){this.koItems(this.getItemsFromValue())},t.prototype.getItemsFromValue=function(e){void 0===e&&(e=null);var t=[];e||(e=this.value);for(var r=0;rt.name?1:-1});for(var r=[],n=this,a=function(t,r){n.onPropertyValueChanged.fire(e,{property:t.property,object:t.object,newValue:r})},l=0;l20&&(t=t.substr(0,20)+"..."),t},t.prototype.onValueChanged=function(){this.koValue(this.value)},t.prototype.onBeforeApply=function(){this.setValueCore(this.koValue())},t}(s),l=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"html"},enumerable:!0,configurable:!0}),t}(a),u=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"expression"},enumerable:!0,configurable:!0}),t}(a);i.a.registerEditor("text",function(){return new a}),i.a.registerEditor("html",function(){return new l}),i.a.registerEditor("expression",function(){return new u})},function(e,t,r){"use strict";var n=r(3),o=r(0),i=(r.n(o),r(24)),s=(r.n(i),r(4)),a=r(2),l=r(18),u=r(17),d=r(1);r.n(d);r.d(t,"a",function(){return c}),r.d(t,"b",function(){return h}),r.d(t,"c",function(){return y}),r.d(t,"d",function(){return g});var c=function(){function e(){this.koVisible=o.observable(!1),this.koEditor=o.observable(null)}return e.prototype.show=function(e,t){var r=new h(e,this.onCanShowPropertyCallback);r.onChanged=t,this.koEditor(r),this.koVisible(!0),i("#surveyquestioneditorwindow").modal("show"),r.onHideWindow=function(){i("#surveyquestioneditorwindow").modal("hide")}},e}(),p=function(){function e(e,t){this.obj=e,this.onCanShowPropertyCallback=t,this.properties=d.JsonObject.metaData.getProperties(this.obj.getType())}return e.prototype.getProperty=function(e){for(var t=null,r=0;r0&&t.push({at:o.end,obj:n}))}return t.sort(function(e,t){return e.at>t.at?1:e.at-1&&this.at>=this.endAt?"":this.text.charAt(this.at)},e.prototype.identifier=function(){var e=this.ch;for("_"!==this.ch&&"$"!==this.ch&&(this.ch<"a"||this.ch>"z")&&(this.ch<"A"||this.ch>"Z")&&this.error("Bad identifier");this.next()&&("_"===this.ch||"$"===this.ch||this.ch>="a"&&this.ch<="z"||this.ch>="A"&&this.ch<="Z"||this.ch>="0"&&this.ch<="9");)e+=this.ch;return e},e.prototype.number=function(){var e,t="",r="",n=10;if("-"!==this.ch&&"+"!==this.ch||(t=this.ch,this.next(this.ch)),"I"===this.ch)return e=this.word(),("number"!=typeof e||isNaN(e))&&this.error("Unexpected word for number"),"-"===t?-e:e;if("N"===this.ch)return e=this.word(),isNaN(e)||this.error("expected word to be NaN"),e;switch("0"===this.ch&&(r+=this.ch,this.next(),"x"===this.ch||"X"===this.ch?(r+=this.ch,this.next(),n=16):this.ch>="0"&&this.ch<="9"&&this.error("Octal literal")),n){case 10:for(;this.ch>="0"&&this.ch<="9";)r+=this.ch,this.next();if("."===this.ch)for(r+=".";this.next()&&this.ch>="0"&&this.ch<="9";)r+=this.ch;if("e"===this.ch||"E"===this.ch)for(r+=this.ch,this.next(),"-"!==this.ch&&"+"!==this.ch||(r+=this.ch,this.next());this.ch>="0"&&this.ch<="9";)r+=this.ch,this.next();break;case 16:for(;this.ch>="0"&&this.ch<="9"||this.ch>="A"&&this.ch<="F"||this.ch>="a"&&this.ch<="f";)r+=this.ch,this.next()}if(e="-"===t?-r:+r,isFinite(e))return e;this.error("Bad number")},e.prototype.string=function(){var t,r,n,o,i="";if('"'===this.ch||"'"===this.ch)for(n=this.ch;this.next();){if(this.ch===n)return this.next(),i;if("\\"===this.ch)if(this.next(),"u"===this.ch){for(o=0,r=0;r<4&&(t=parseInt(this.next(),16),isFinite(t));r+=1)o=16*o+t;i+=String.fromCharCode(o)}else if("\r"===this.ch)"\n"===this.peek()&&this.next();else{if("string"!=typeof e.escapee[this.ch])break;i+=e.escapee[this.ch]}else{if("\n"===this.ch)break;i+=this.ch}}this.error("Bad string")},e.prototype.inlineComment=function(){"/"!==this.ch&&this.error("Not an inline comment");do{if(this.next(),"\n"===this.ch||"\r"===this.ch)return void this.next()}while(this.ch)},e.prototype.blockComment=function(){"*"!==this.ch&&this.error("Not a block comment");do{for(this.next();"*"===this.ch;)if(this.next("*"),"/"===this.ch)return void this.next("/")}while(this.ch);this.error("Unterminated block comment")},e.prototype.comment=function(){"/"!==this.ch&&this.error("Not a comment"),this.next("/"),"/"===this.ch?this.inlineComment():"*"===this.ch?this.blockComment():this.error("Unrecognized comment")},e.prototype.white=function(){for(;this.ch;)if("/"===this.ch)this.comment();else{if(!(e.ws.indexOf(this.ch)>=0))return;this.next()}},e.prototype.word=function(){switch(this.ch){case"t":return this.next("t"),this.next("r"),this.next("u"),this.next("e"),!0;case"f":return this.next("f"),this.next("a"),this.next("l"),this.next("s"),this.next("e"),!1;case"n":return this.next("n"),this.next("u"),this.next("l"),this.next("l"),null;case"I":return this.next("I"),this.next("n"),this.next("f"),this.next("i"),this.next("n"),this.next("i"),this.next("t"),this.next("y"),1/0;case"N":return this.next("N"),this.next("a"),this.next("N"),NaN}this.error("Unexpected '"+this.ch+"'")},e.prototype.array=function(){var e=[];if("["===this.ch)for(this.next("["),this.white();this.ch;){if("]"===this.ch)return this.next("]"),e;if(","===this.ch?this.error("Missing array element"):e.push(this.value()),this.white(),","!==this.ch)return this.next("]"),e;this.next(","),this.white()}this.error("Bad array")},e.prototype.object=function(){var t,r,n=!0,o={};if(this.parseType>0&&(o[e.positionName]={start:this.at-1}),"{"===this.ch)for(this.next("{"),this.white(),r=this.at-1;this.ch;){if("}"===this.ch)return this.parseType>0&&(o[e.positionName].end=r),this.next("}"),o;if(t='"'===this.ch||"'"===this.ch?this.string():this.identifier(),this.white(),this.parseType>1&&(o[e.positionName][t]={start:r,valueStart:this.at}),this.next(":"),o[t]=this.value(),this.parseType>1&&(r=this.at-1,o[e.positionName][t].valueEnd=r,o[e.positionName][t].end=r),this.white(),","!==this.ch)return this.parseType>1&&(o[e.positionName][t].valueEnd--,o[e.positionName][t].end--),this.parseType>0&&(o[e.positionName].end=this.at-1),this.next("}"),o;this.parseType>1&&(o[e.positionName][t].valueEnd--,n||o[e.positionName][t].end--),this.next(","),this.white(),n=!1}this.error("Bad object")},e.prototype.value=function(){switch(this.white(),this.ch){case"{":return this.object();case"[":return this.array();case'"':case"'":return this.string();case"-":case"+":case".":return this.number();default:return this.ch>="0"&&this.ch<="9"?this.number():this.word()}},e.prototype.stringify=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=null),t&&"function"!=typeof t&&!this.isArray(t))throw new Error("Replacer must be a function or an array");this.replacer=t,this.indentStr=this.getIndent(r),this.objStack=[];var n={"":e};return void 0===e?this.getReplacedValueOrUndefined(n,"",!0):this.internalStringify(n,"",!0)},e.prototype.getIndent=function(e){if(e){if("string"==typeof e)return e;if("number"==typeof e&&e>=0)return this.makeIndent(" ",e,!0)}return""},e.prototype.getReplacedValueOrUndefined=function(e,t,r){var n=e[t];return n&&n.toJSON&&"function"==typeof n.toJSON&&(n=n.toJSON()),"function"==typeof this.replacer?this.replacer.call(e,t,n):this.replacer?r||this.isArray(e)||this.replacer.indexOf(t)>=0?n:void 0:n},e.prototype.isWordChar=function(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"_"===e||"$"===e},e.prototype.isWordStart=function(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||"_"===e||"$"===e},e.prototype.isWord=function(e){if("string"!=typeof e)return!1;if(!this.isWordStart(e[0]))return!1;for(var t=1,r=e.length;t10&&(e=e.substring(0,10));for(var n=r?"":"\n",o=0;o1},e.prototype.isLastElementInRow=function(e){return e.elIndex==e.panel.koRows()[e.rIndex].koElements().length-1},e.prototype.updateInfo=function(e,t,r){e.rIndex<0||(this.target.startWithNewLine?t&&e.rIndex++:t?e.elIndex++:0==e.elIndex&&e.rIndex>0&&(e.rIndex--,e.elIndex=e.panel.koRows()[e.rIndex].koElements().length))},e.prototype.addInfo=function(e){if(this.target.startWithNewLine||e.elIndex<1||e.rIndex<0||e.rIndex>=e.panel.koRows().length)this.AddInfoAsRow(e);else{var t=e.panel.koRows()[e.rIndex],r=t.koElements();e.elIndex=0&&e.rIndex=t.length)){var r=t[e.rIndex],n=r.koElements();r.koElements().length>1?(n.splice(e.elIndex,1),r.koElements(n),r.updateVisible()):(t.splice(e.rIndex,1),e.panel.koRows(t))}}},e.prototype.isInfoEquals=function(e,t){return null!=e&&null!=t&&(e.panel===t.panel&&e.rIndex===t.rIndex&&e.elIndex===t.elIndex)},e.prototype.findInfo=function(e,t){return void 0===t&&(t=!1),this.findInfoInPanel(this.page,e,t)},e.prototype.findInfoInPanel=function(e,t,r){if(t==e){var n=e;return e.parent&&(r||this.target.isPanel)&&(n=e.parent),{panel:n,row:null,rIndex:0,elIndex:0,element:e}}for(var o=e.koRows(),i=0;i0||this.ddTarget.moveTo(t,n.isBottom,r)}},e.prototype.end=function(){this.ddTarget&&this.ddTarget.clear(),this.isScrollStop=!0,this.clearData()},e.prototype.doDrop=function(e){e.stopPropagation&&e.stopPropagation(),this.isSurveyDragging(e)&&(this.ddTarget.doDrop(),this.onModifiedCallback&&this.onModifiedCallback()),this.end()},e.prototype.doLeavePage=function(e){this.ddTarget.clear()},e.prototype.scrollToElement=function(e){this.scrollableElement&&e&&e.scrollIntoView(!1)},e.prototype.createTargetElement=function(e,t){if(!e||!t)return null;var r=null;return r=n.JsonObject.metaData.createClass(t.type),(new n.JsonObject).toObject(t,r),r.name=e,r.setData(this.survey),r.renderWidth="100%",r.koIsDragging(!0),r},e.prototype.isBottom=function(t,r){t=this.getEvent(t);var n=t.currentTarget.clientHeight,o=t.offsetY;return t.hasOwnProperty("layerX")&&(o=t.layerY-t.currentTarget.offsetTop),{isBottom:o>n/2,isEdge:o<=e.edgeHeight||n-o<=e.edgeHeight}},e.prototype.isSameCoordinates=function(e){var t=Math.abs(e.pageX-this.prevCoordinates.x)>5||Math.abs(e.pageY-this.prevCoordinates.y)>5;return t&&(this.prevCoordinates.x=e.pageX,this.prevCoordinates.y=e.pageY),!t},e.prototype.isSamePlace=function(t,r){var n=e.prevEvent;return!(n.element!=r||Math.abs(t.clientX-n.x)>5||Math.abs(t.clientY-n.y)>5)||(n.element=r,n.x=t.clientX,n.y=t.clientY,!1)},e.prototype.checkScrollY=function(t){if(this.scrollableElement){var r=this.getScrollableElementPosY(t);if(!(r<0)){this.isScrollStop=!0;var n=this.scrollableElement.clientHeight;r=0&&(this.isScrollStop=!1,this.doScrollY(-1)),n-r=r&&(this.isScrollStop=!1,this.doScrollY(1))}}},e.prototype.doScrollY=function(t){var r=this.scrollableElement,n=r.scrollTop+t;if(n<0)return void(this.isScrollStop=!0);r.scrollTop=n;var o=this;this.isScrollStop||setTimeout(function(){o.doScrollY(t)},e.ScrollDelay)},e.prototype.getScrollableElementPosY=function(e){if(!this.scrollableElement||!e.currentTarget)return-1;for(var t=e.currentTarget,r=0;t&&t!=this.scrollableElement;)r+=t.offsetTop,t=t.offsetParent;return e.offsetY+e.currentTarget.offsetTop-this.scrollableElement.offsetTop-this.scrollableElement.scrollTop},e.prototype.getEvent=function(e){return e.originalEvent?e.originalEvent:e},e.prototype.getY=function(e){for(var t=0;e;)t+=e.offsetTop-e.scrollTop+e.clientTop,e=e.offsetParent;return t},e.prototype.prepareData=function(t,r,n){var i=e.dataStart+"questionname:"+r;this.setData(t,i);var s=this.createTargetElement(r,n);this.ddTarget=new o(this.survey.currentPage,s,null)},e.prototype.setData=function(t,r){t.originalEvent&&(t=t.originalEvent),t.dataTransfer&&(t.dataTransfer.setData("Text",r),t.dataTransfer.effectAllowed="copy"),e.dragData={text:r}},e.prototype.getData=function(t){if(t.originalEvent&&(t=t.originalEvent),t.dataTransfer){var r=t.dataTransfer.getData("Text");r&&(e.dragData.text=r)}return e.dragData},e.prototype.clearData=function(){e.dragData={text:"",json:null};var t=e.prevEvent;t.element=null,t.x=-1,t.y=-1,this.prevCoordinates.x=-1,this.prevCoordinates.y=-1},e}();i.edgeHeight=20,i.dataStart="surveyjs,",i.dragData={text:"",json:null},i.prevEvent={element:null,x:-1,y:-1},i.counter=1,i.ScrollDelay=30,i.ScrollOffset=100},function(e,t,r){"use strict";var n=r(0),o=(r.n(n),r(4)),i=r(2);r.d(t,"a",function(){return s});var s=function(){function e(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null),this.property=e,this.isApplyingNewValue=!1,this.onPropertyChanged=t,this.name=this.property.name,this.disabled=e.readOnly,this.koValue=n.observable(),this.choices=e.choices;var i=this;this.editorType=e.type,null!=this.choices&&(this.editorType="dropdown");var s=function(e){i.onApplyEditorValue(e)};this.editor=o.a.createEditor(this.editorType,s),this.editor.onGetLocale=this.doOnGetLocale,this.editor.options=r,this.editorType=this.editor.editorType,this.modalName="modelEditor"+this.editorType+this.name,this.modalNameTarget="#"+this.modalName,this.koValue.subscribe(function(e){i.onkoValueChanged(e)}),this.koText=n.computed(function(){return i.getValueText(i.koValue())}),this.koIsDefault=n.computed(function(){return i.property.isDefaultValue(i.koValue())})}return e.prototype.doOnGetLocale=function(){return this.object&&this.object.getLocale?this.object.getLocale():""},Object.defineProperty(e.prototype,"object",{get:function(){return this.objectValue},set:function(e){this.objectValue=e,this.updateValue()},enumerable:!0,configurable:!0}),e.prototype.updateValue=function(){this.isValueUpdating=!0,this.koValue(this.getValue()),this.editor.setObject(this.object),this.editor.setTitle(i.a.getString("pe.editProperty").format(this.property.name)),this.updateEditorData(this.koValue()),this.isValueUpdating=!1},e.prototype.onApplyEditorValue=function(e){this.isApplyingNewValue=!0,this.koValue(e),this.isApplyingNewValue=!1},e.prototype.onkoValueChanged=function(e){this.isApplyingNewValue||this.updateEditorData(e),null!=this.object&&this.getValue()!=e&&(null==this.onPropertyChanged||this.isValueUpdating||this.onPropertyChanged(this,e))},e.prototype.updateEditorData=function(e){this.editor.value=e},e.prototype.getValue=function(){return this.property.getPropertyValue?this.property.getPropertyValue(this.object):this.property.hasToUseGetValue?this.property.getValue(this.object):this.object[this.name]},e.prototype.getValueText=function(e){return this.editor.getValueText(e)},e}()},function(e,t,r){"use strict";var n=r(3),o=r(0),i=(r.n(o),r(2)),s=r(6),a=r(1);r.n(a);r.d(t,"a",function(){return l}),r.d(t,"b",function(){return u}),r.d(t,"c",function(){return d}),r.d(t,"d",function(){return c});var l=function(){function e(e){this.onModifiedCallback=e,this.koVerbs=o.observableArray(),this.koHasVerbs=o.observable();var t=a.JsonObject.metaData.getChildrenClasses("selectbase",!0);this.choicesClasses=[];for(var r=0;r1&&e.push(new c(this.survey,t,this.onModifiedCallback)),this.choicesClasses.indexOf(t.getType())>-1&&e.push(new d(this.survey,t,this.onModifiedCallback))}this.koVerbs(e),this.koHasVerbs(e.length>0)},e}(),u=function(){function e(e,t,r){this.survey=e,this.question=t,this.onModifiedCallback=r,this.koItems=o.observableArray(),this.koSelectedItem=o.observable()}return Object.defineProperty(e.prototype,"text",{get:function(){return""},enumerable:!0,configurable:!0}),e}(),d=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;o.survey=t,o.question=r,o.onModifiedCallback=n;for(var s=a.JsonObject.metaData.getChildrenClasses("selectbase",!0),l=[],u=0;u-1&&this.koPages.splice(t,1)},e.prototype.changeName=function(e){var t=this.getIndexByPage(e);t>-1&&this.koPages()[t].title(o.b.getObjectName(e))},e.prototype.getIndexByPage=function(e){for(var t=this.koPages(),r=0;r=r.length&&(n=0);var i=r[n].page;this.onSelectPageCallback(i),this.setSelectedPage(i)}}},e.prototype.updatePages=function(){if(null==this.surveyValue)return void this.koPages([]);for(var e=[],t=0;t0?this.koItems()[0]:null)},t.prototype.createEditorItem=function(e){var t=new l.JsonObject,r=l.JsonObject.metaData.createClass(e.getType());return t.toObject(e,r),new d(r)},t.prototype.createItemFromEditorItem=function(e){return e.validator},t.prototype.addItem=function(e){var t=new d(l.JsonObject.metaData.createClass(e));this.koItems.push(t),this.koSelected(t)},t.prototype.getAvailableValidators=function(){for(var e=[],t=0;t=0;o--){var i=n[o];if(i.properties)for(var s=0;s=0;o--){var i=n[o];if(i.tabs)for(var s=0;st.index?1:0}),r},e.getAllDefinitionsByClass=function(t){var r=[];if(t.indexOf("@")>-1&&e.definition[t])return r.push(e.definition[t]),r;for(;t;){var o=n.JsonObject.metaData.findClass(t);if(!o)break;e.definition[o.name]&&r.push(e.definition[o.name]),t=o.parentName}return r},e}();o.definition={questionbase:{properties:["name","title",{name:"visible",category:"checks"},{name:"isRequired",category:"checks"},{name:"startWithNewLine",category:"checks"}],tabs:[{name:"visibleIf",index:100}]},comment:{properties:["rows","placeHolder"]},file:{properties:[{name:"showPreview",category:"imageChecks"},{name:"storeDataAsText",category:"imageChecks"},"maxSize","imageHeight","imageWidth"]},html:{tabs:[{name:"html",index:10}]},matrixdropdownbase:{properties:["cellType"],tabs:[{name:"columns",index:10},{name:"rows",index:11},{name:"choices",index:12}]},matrixdynamic:{properties:["rowCount","addRowText","removeRowText"]},matrix:{tabs:[{name:"columns",index:10},{name:"rows",index:11}]},multipletext:{properties:["colCount"],tabs:[{name:"items",index:10}]},rating:{properties:["minRateDescription","maxRateDescription"],tabs:[{name:"rateValues",index:10}]},selectbase:{properties:["hasOther","choicesOrder","colCount"],tabs:[{name:"choices",index:10},{name:"choicesByUrl",index:11}]},dropdown:{properties:["optionsCaption"]},text:{properties:["inputType","placeHolder"]},"matrixdropdowncolumn@checkbox":{properties:["hasOther","choicesOrder","colCount"],tabs:[{name:"choices",index:10},{name:"choicesByUrl",index:11}]},"matrixdropdowncolumn@radiogroup":{properties:["hasOther","choicesOrder","colCount"],tabs:[{name:"choices",index:10},{name:"choicesByUrl",index:11}]},"matrixdropdowncolumn@dropdown":{properties:["hasOther","choicesOrder","optionsCaption"],tabs:[{name:"choices",index:10},{name:"choicesByUrl",index:11}]},"matrixdropdowncolumn@text":{properties:["inputType","placeHolder"]},"matrixdropdowncolumn@comment":{properties:["placeHolder"]},panel:{properties:["name","title",{name:"visible",category:"checks"}],tabs:[{name:"visibleIf",index:100}]}}},function(e,t,r){"use strict";var n=r(0),o=(r.n(n),r(2)),i=r(1);r.n(i);r.d(t,"c",function(){return s}),r.d(t,"b",function(){return a}),r.d(t,"a",function(){return l});var s=function(){function e(e,t,r){void 0===r&&(r=!1),this.obj=e,this.property=t,this.isRequired=r,this.choices=[],this.name=t.name,this.disabled=t.readOnly,this.editType="text","text"==t.type&&(this.editType="textarea"),"boolean"==t.type&&(this.editType="check"),t.choices&&(this.choices=t.choices,this.editType="dropdown"),this.koValue=n.observable(),this.koErrorText=n.observable(""),this.koHasError=n.observable(!1),this.title=o.a.getString("pe."+this.name),this.title||(this.title=this.name),this.reset()}return e.prototype.hasError=function(){var e=this.isRequired&&!1!==this.koValue()&&!this.koValue();return this.koErrorText(e?o.a.getString("pe.propertyIsEmpty"):""),this.koHasError(e),e},e.prototype.apply=function(){this.obj[this.name]=this.koValue()},e.prototype.reset=function(){this.koValue(this.getValue())},e.prototype.getValue=function(){return this.property.getPropertyValue?this.property.getPropertyValue(this.obj):this.property.hasToUseGetValue?this.property.getValue(this.obj):this.obj[this.name]},e}(),a=function(){function e(e,t,r){void 0===r&&(r=!1),this.obj=e,this.properties=[],this.addProperty(t,r)}return e.prototype.addProperty=function(e,t){void 0===t&&(t=!1),this.properties.push(new s(this.obj,e,t))},e.prototype.hasError=function(){for(var e=!1,t=0;t-1,l=this.getRowByCategory(e[r].category);l?l.addProperty(o,s):(l=new a(this.obj,o,s),e[r].category&&(l.category=e[r].category),this.rows.push(l)),e[r].title&&(l.properties[l.properties.length-1].title=e[r].title)}}},e.prototype.getName=function(e){return e?"string"==typeof e?e:e.name?e.name:null:null},e.prototype.getRowByCategory=function(e){if(!e)return null;for(var t=0;t0&&r.length==this.copiedItemMaxCount&&this.removeItem(r[this.copiedItemMaxCount-1].name),this.addItem(t)}},e.prototype.addItem=function(e){this.itemsValue.push(e),this.onItemsChanged()},e.prototype.replaceItem=function(e){var t=this.indexOf(e.name);if(!(t<0))return this.itemsValue[t]=e,this.onItemsChanged(),!0},e.prototype.removeItem=function(e){var t=this.indexOf(e);return!(t<0)&&(this.itemsValue.splice(t,1),this.onItemsChanged(),!0)},e.prototype.clearItems=function(){this.itemsValue=[],this.onItemsChanged()},e.prototype.clearCopiedItems=function(){for(var e=this.copiedItems,t=0;t-1&&t.indexOf(i)>-1&&r.push(i)}for(var n=0;n-1&&r.push(i)}return r},e}()},function(e,t,r){"use strict";var n=r(0),o=(r.n(n),r(1)),i=(r.n(o),r(11));r.d(t,"a",function(){return s});var s=function(){function e(){this.surveyId=null,this.surveyPostId=null,this.generateValidJSON=!1,this.surveyJSVersion=o.Version,this.surveyCDNPath="https://surveyjs.azureedge.net/",this.platformSurveyJSPrefix={angular:"angular",jquery:"jquery",knockout:"ko",react:"react",vue:"vue"},this.platformJSonPage={angular:"@Component({\n selector: 'ng-app',\n template: \n
\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyNG.render(\"surveyElement\", { model: survey });\n }\n}",jquery:'var survey = new Survey.Model(surveyJSON);\n$("#surveyContainer").Survey({\n model: survey,\n onComplete: sendDataToServer\n});',knockout:'var survey = new Survey.Model(surveyJSON, "surveyContainer");\nsurvey.onComplete.add(sendDataToServer);',react:'ReactDOM.render(\n , document.getElementById("surveyContainer"));',vue:"var survey = new Survey.Model(surveyJSON);\nnew Vue({ el: '#surveyContainer', data: { survey: survey } });"},this.platformJSonWindow={angular:"@Component({\n selector: 'ng-app',\n template: \n
\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyWindowNG.render(\"surveyElement\", { model: survey });\n }\n}",jquery:'var survey = new Survey.Model(surveyJSON);\n$("#surveyContainer").SurveyWindow({\n model: survey,\n onComplete: sendDataToServer\n});',knockout:"var survey = new Survey.Model(surveyJSON);\nsurveyWindow.show();\nsurvey.onComplete.add(sendDataToServer);",react:'ReactDOM.render(\n , document.getElementById("surveyContainer"));',vue:""},this.platformHtmlonPage={angular:"",jquery:'
',knockout:'
',react:'
',vue:'
'},this.platformHtmlonWindow={angular:"",jquery:'
',knockout:"",react:'
',vue:"
"};var e=this;this.koLibraryVersion=n.observable("jquery"),this.koShowAsWindow=n.observable("page"),this.koScriptUsing=n.observable("bootstrap"),this.koHasIds=n.observable(!1),this.koLoadSurvey=n.observable(!1),this.koHeadText=n.observable(""),this.koJavaText=n.observable(""),this.koBodyText=n.observable(""),this.koVisibleHtml=n.computed(function(){return"page"==e.koShowAsWindow()||""!=e.platformHtmlonWindow[e.koLibraryVersion()]}),this.koLibraryVersion.subscribe(function(t){e.setHeadText(),e.setJavaTest(),e.setBodyText()}),this.koShowAsWindow.subscribe(function(t){e.setJavaTest(),e.setBodyText()}),this.koScriptUsing.subscribe(function(t){e.setHeadText(),e.setJavaTest()}),this.koLoadSurvey.subscribe(function(t){e.setJavaTest()}),this.surveyEmbedingHead=null}return Object.defineProperty(e.prototype,"json",{get:function(){return this.jsonValue},set:function(e){this.jsonValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasAceEditor",{get:function(){return"undefined"!=typeof ace},enumerable:!0,configurable:!0}),e.prototype.show=function(){this.hasAceEditor&&null==this.surveyEmbedingHead&&(this.surveyEmbedingHead=this.createEditor("surveyEmbedingHead"),this.surveyEmbedingBody=this.createEditor("surveyEmbedingBody"),this.surveyEmbedingJava=this.createEditor("surveyEmbedingJava")),this.koHasIds(this.surveyId&&this.surveyPostId),this.setBodyText(),this.setHeadText(),this.setJavaTest()},e.prototype.setBodyText=function(){this.setTextToEditor(this.surveyEmbedingBody,this.koBodyText,this.platformHtmlonPage[this.koLibraryVersion()])},Object.defineProperty(e.prototype,"getCDNPath",{get:function(){return this.surveyCDNPath+this.surveyJSVersion+"/"},enumerable:!0,configurable:!0}),e.prototype.setHeadText=function(){var e="\n";"bootstrap"!=this.koScriptUsing()&&(e+='\n'),e+='\n',this.setTextToEditor(this.surveyEmbedingHead,this.koHeadText,e)},e.prototype.setJavaTest=function(){this.setTextToEditor(this.surveyEmbedingJava,this.koJavaText,this.getJavaText())},e.prototype.createEditor=function(e){var t=ace.edit(e);return t.setTheme("ace/theme/monokai"),t.session.setMode("ace/mode/json"),t.setShowPrintMargin(!1),t.renderer.setShowGutter(!1),t.setReadOnly(!0),t},e.prototype.getJavaText=function(){var e="page"==this.koShowAsWindow(),t=this.getSaveFunc()+"\n\n";t+=e?this.platformJSonPage[this.koLibraryVersion()]:this.platformJSonWindow[this.koLibraryVersion()];var r="var surveyJSON = "+this.getJsonText()+"\n\n";return this.getSetCss()+"\n"+r+t},e.prototype.getSetCss=function(){return"bootstrap"!=this.koScriptUsing()?"":'Survey.Survey.cssType = "bootstrap";\n'},e.prototype.getSaveFunc=function(){return"function sendDataToServer(survey) {\n"+this.getSaveFuncCode()+"\n}"},e.prototype.getSaveFuncCode=function(){return this.koHasIds()?" survey.sendResult('"+this.surveyPostId+"');":' //send Ajax request to your web server.\n alert("The results are:" + JSON.stringify(s.data));'},e.prototype.getJsonText=function(){return this.koHasIds()&&this.koLoadSurvey()?"{ surveyId: '"+this.surveyId+"'}":this.generateValidJSON?JSON.stringify(this.json):(new i.a).stringify(this.json)},e.prototype.setTextToEditor=function(e,t,r){e&&e.setValue(r),t&&t(r)},e}()},function(e,t,r){"use strict";var n=r(0),o=(r.n(n),r(6));r.d(t,"a",function(){return s});var i=function(){function e(){this.level=0}return e}(),s=function(){function e(e,t){this.koObjects=e,this.koSelected=t}return Object.defineProperty(e.prototype,"survey",{get:function(){return this.surveyValue},set:function(e){this.survey!=e&&(this.surveyValue=e,this.rebuild())},enumerable:!0,configurable:!0}),e.prototype.addPage=function(e){this.addElement(e,null)},e.prototype.addElement=function(e,t){var r=null!=t?this.getItemIndex(t):0;if(!(r<0)){var n=null!=t?t.elements:this.survey.pages,o=n.indexOf(e),i=o+1+r;if(o>0){var s=n[o-1];i=this.getItemIndex(s)+this.getAllElementCount(s)+1}var a=this.createItem(e,this.koObjects()[r]);if(this.addItem(a,i),e.elements){var l=[];this.buildElements(l,e.elements,a);for(var u=0;uthis.koObjects().length?this.koObjects.push(e):this.koObjects.splice(t,0,e)},e.prototype.rebuild=function(){var e=[];if(null==this.survey)return this.koObjects(e),void this.koSelected(null);var t=this.createItem(this.survey,null);e.push(t);for(var r=0;r0?"none":"")})}function o(e,t){e.dragDropHelperValue=null,e.dragDropHelper=function(){return null==e.dragDropHelperValue&&(e.dragDropHelperValue=e.data.dragDropHelper),e.dragDropHelperValue},e.renderedElement=null,e.addonsElement=null,e.koIsDragging=d.observable(!1),e.koIsSelected=d.observable(!1),e.koIsDragging.subscribe(function(t){e.renderedElement&&(e.renderedElement.style.opacity=t?.4:1)}),e.koIsSelected.subscribe(function(r){if(e.renderedElement){var n=t;r&&(n+=" svd_q_selected "),e.renderedElement.className=n}e.addonsElement&&(e.addonsElement.style.display=r?"":"none")})}function i(e,t,r){var n=document.createElement("div");n.className="well",n.ondragover=function(e){t.doDragDropOver(e,r)};var o=document.createElement("span");return o.textContent=r.data.getEditorLocString("survey.dropQuestion"),n.appendChild(o),e.appendChild(n),n}function s(e,t){var r=document.createElement("li"),n=document.createElement("button");return n.innerText=t,n.onclick=e,n.className="btn btn-primary btn-xs",r.appendChild(n),r}function a(e,t){var r=document.createElement("div");r.className="svd_question_menu btn-group",r.role="group";var n=document.createElement("button");n.type="button",n.className="btn btn-primary btn-xs",n.onclick=function(t){e.editQuestionClick()};var o=document.createElement("span");o.innerText="Edit",n.appendChild(o),r.appendChild(n),n=document.createElement("button"),n.type="button",n.className="btn btn-primary btn-xs dropdown-toggle",n.setAttribute("data-toggle","dropdown"),n.setAttribute("aria-haspopup","true"),n.setAttribute("aria-expanded","false"),o=document.createElement("span"),o.className="glyphicon glyphicon-option-horizontal",n.appendChild(o),r.appendChild(n);var i=document.createElement("ul");i.className="dropdown-menu",i.appendChild(s(e.copyQuestionClick,e.getEditorLocString("survey.addToToolbox"))),i.appendChild(s(e.fastCopyQuestionClick,e.getEditorLocString("survey.copy")));var a=t?"survey.deletePanel":"survey.deleteQuestion";return i.appendChild(s(e.deleteCurrentObjectClick,e.getEditorLocString(a))),r.appendChild(i),r}function l(e,t,r,n,o){t.renderedElement=e;var i=r;if(t.koIsSelected()&&(i+=" svd_q_selected"),e.className=i,e.style.opacity=t.koIsDragging()?.4:1,e.draggable=!0,e.ondragover=function(e){e.markEvent||(e.markEvent=!0,t.dragDropHelper().doDragDropOver(e,t,!0))},e.ondrop=function(e){e.markEvent||(e.markEvent=!0,t.dragDropHelper().doDrop(e))},e.ondragstart=function(e){e.markEvent||(e.markEvent=!0,t.dragDropHelper().startDragQuestion(e,t))},e.ondragend=function(e){t.dragDropHelper().end()},e.onclick=function(e){e.markEvent||(e.markEvent=!0,t.data.selectedElement=t)},e.onkeydown=function(e){return 46==e.witch&&t.data.deleteCurrentObjectClick(),!0},o)for(var s=e.childNodes,l=0;l=0&&this.index=1&&this.index1&&this.index1),r==v.a.Question||r==v.a.Panel?(this.survey.selectedElement=e,t=!0,this.survey.currentPage=this.survey.getPageByQuestion(this.survey.selectedElement)):this.survey.selectedElement=null,this.koCanDeleteObject(t)},e.prototype.applyBinding=function(){if(null!=this.renderedElement){if(n.cleanNode(this.renderedElement),n.applyBindings(this,this.renderedElement),this.surveyjs=document.getElementById("surveyjs"),this.surveyjs){var t=this;this.surveyjs.onkeydown=function(e){e&&(46==e.keyCode&&t.deleteQuestion(),38!=e.keyCode&&40!=e.keyCode||t.selectQuestion(38==e.keyCode))}}this.surveyjsExample=document.getElementById("surveyjsExample"),this.initSurvey((new b.a).parse(e.defaultNewSurveyText)),this.setUndoRedoCurrentState(!0),this.jsonEditor.init(),jQuery&&jQuery().select2&&(jQuery("#objectSelector").select2(),jQuery("#objectSelector").width("100%"))}},e.prototype.initSurvey=function(t){var r=this;this.surveyValue=new m.a,this.dragDropHelper=new y.a(this.survey,function(){r.setModified()}),this.surveyValue.setJsonObject(t),this.surveyValue.isEmpty&&this.surveyValue.setJsonObject((new b.a).parse(e.defaultNewSurveyText)),this.surveyValue.dragDropHelper=this.dragDropHelper,this.survey.render(this.surveyjs),this.surveyObjects.survey=this.survey,this.pagesEditor.survey=this.survey,this.pagesEditor.setSelectedPage(this.survey.currentPage),this.surveyVerbs.survey=this.survey,this.surveyValue.onSelectedElementChanged.add(function(e,t){r.surveyObjects.selectObject(e.selectedElement)}),this.surveyValue.onEditQuestion.add(function(e,t){r.showQuestionEditor(r.koSelectedObject().value)}),this.surveyValue.onCopyQuestion.add(function(e,t){r.addCustomToolboxQuestion(r.koSelectedObject().value)}),this.surveyValue.onFastCopyQuestion.add(function(e,t){r.fastCopyQuestion(r.koSelectedObject().value)}),this.surveyValue.onDeleteCurrentObject.add(function(e,t){r.deleteCurrentObject()}),this.surveyValue.onProcessHtml.add(function(e,t){t.html=r.processHtml(t.html)}),this.surveyValue.onCurrentPageChanged.add(function(e,t){r.pagesEditor.setSelectedPage(e.currentPage)}),this.surveyValue.onQuestionAdded.add(function(e,t){r.doOnQuestionAdded(t.question,t.parentPanel)}),this.surveyValue.onQuestionRemoved.add(function(e,t){r.doOnElementRemoved(t.question)}),this.surveyValue.onPanelAdded.add(function(e,t){r.doOnPanelAdded(t.panel,t.parentPanel)}),this.surveyValue.onPanelRemoved.add(function(e,t){r.doOnElementRemoved(t.panel)})},e.prototype.processHtml=function(e){if(!e)return e;for(var t=/)<[^<]*)*<\/script>/gi;t.test(e);)e=e.replace(t,"");return e},e.prototype.doDraggingToolboxItem=function(e,t){this.dragDropHelper.startDragToolboxItem(t,this.getNewName(e.type),e)},e.prototype.doClickToolboxItem=function(e){var t=this.getNewName(e.type),r=f.JsonObject.metaData.createClass(e.type);(new f.JsonObject).toObject(e,r),r.name=t,this.doClickQuestionCore(r)},e.prototype.getNewName=function(e){return"panel"==e?this.getNewPanelName():this.getNewQuestionName()},e.prototype.getNewQuestionName=function(){return v.b.getNewQuestionName(this.survey.getAllQuestions())},e.prototype.getNewPanelName=function(){return v.b.getNewPanelName(this.getAllPanels())},e.prototype.getAllPanels=function(){for(var e=[],t=0;t",enterNewValue:"Veuillez saisir la valeur.",expressionHelp:'Veuillez entrer une expression booléenne. Elle doit retourner Vrai(true) pour garder la question/page visible. Par exemple: {question1} = "valeur1" or ({question2} = 3 and {question3} < 5)',fastEntry:"Ajout rapide",formEntry:"Ajout via formulaire",hasOther:"Has other item",imageHeight:"Hauteur de l'image",imageWidth:"Largeur de l'image",inputType:"Type de champ",isRequired:"Est requis ?",items:"[ Elements: {0} ]",maxRateDescription:"Description note maximum",maxSize:"Taille maximum du fichier en octets",minRateDescription:"Description note minimum",name:"Nom",noquestions:"Il n'y a aucune question dans le questionnaire.",ok:"OK",optionsCaption:"Texte par défaut",placeHolder:"PlaceHolder (indice dans le champs)",propertyIsEmpty:"Veuillez entrer une valeur pour la propriété",qEditorTitle:"Editer la question: {0}",removeAll:"Tout supprimer",removeRowText:"Texte bouton supprimer une ligne",required:"Requis ?",reset:"Réinitialiser",rowCount:"Nombre de lignes",rows:"Nombre de lignes",showPreview:"L'aperçu d'image est-il affiché ?",startWithNewLine:"Commencer avec une nouvelle ligne ?",storeDataAsText:"Stocker le contenu du fichier dans le résultat JSON sous forme de texte",tabs:{choices:"Choix",choicesByUrl:"Choix depuis api web",columns:"Colonnes",fileOptions:"Options",general:"Général",html:"Editeur Html",matrixChoices:"Choix par defaut",multipleTextItems:"Text Inputs",rateValues:"Barème",rows:"Lignes",visibleIf:"Visible Si"},testService:"Tester le service",text:"Texte",title:"Titre",triggerCompleteText:"Complete the survey if succeed.",triggerIsVariable:"Ne placez pas la variable dans le résultat du questionnaire.",triggerMakePagesVisible:"Rendre les pages visibles:",triggerMakeQuestionsVisible:"Rendre les questions visibles:",triggerNotSet:"Le déclencheur n'est pas défini",triggerOn:"On ",triggerRunIf:"Exécuster si",triggerSetToName:"Changer la valeur de: ",triggerSetValue:"à: ",value:"Valeur",verbChangePage:"Changer de page ",verbChangeType:"Changer le type ",visible:"Est visible ?"},qt:{checkbox:"Cases à cocher",comment:"Commentaire",dropdown:"Liste déroulante",file:"Fichier",html:"Html",matrix:"Matice (choix unique)",matrixdropdown:"Matrice (choix multiples)",matrixdynamic:"Matrice (Lignes dynamiques)",multipletext:"champ multilignes",radiogroup:"Boutons radio",rating:"Evaluation",text:"Champ simple"},survey:{addToToolbox:"Ajouter à la boîte à outils",copy:"Copier",deleteQuestion:"Supprimer la question",dropQuestion:"Déposer votre question ici."}};n.a.locales.fr=o},function(e,t,r){"use strict";var n=r(3),o=r(0),i=(r.n(o),r(5)),s=r(4),a=r(1);r.n(a);r.d(t,"a",function(){return l});var l=function(e){function t(){var t=e.call(this)||this,r=t;return t.koActiveView=o.observable("form"),t.koItemsText=o.observable(""),t.koActiveView.subscribe(function(e){"form"==e?r.updateItems(r.koItemsText()):r.koItemsText(r.getItemsText())}),t.changeToTextViewClick=function(){r.koActiveView("text")},t.changeToFormViewClick=function(){r.koActiveView("form")},t}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"itemvalues"},enumerable:!0,configurable:!0}),t.prototype.hasError=function(){for(var e=!1,t=0;t20&&(t=t.substr(0,20)+"..."),t},t.prototype.onValueChanged=function(){var e=this.restfullValue;this.koUrl(e?e.url:""),this.koPath(e?e.path:""),this.koValueName(e?e.valueName:""),this.koTitleName(e?e.titleName:"")},t.prototype.onBeforeApply=function(){var e=new l.ChoicesRestfull;e.url=this.koUrl(),e.path=this.koPath(),e.valueName=this.koValueName(),e.titleName=this.koTitleName(),this.setValueCore(e)},t.prototype.run=function(){this.question.choicesByUrl.run()},t.prototype.createSurvey=function(){this.survey=new l.Survey,this.survey.showNavigationButtons=!1,this.survey.showQuestionNumbers="off";var e=this.survey.addNewPage("page1");this.question=e.addNewQuestion("dropdown","q1"),this.question.title=a.a.getString("pe.testService"),this.question.choices=[]},t}(i.a);s.a.registerEditor("restfull",function(){return new u})},function(e,t,r){"use strict";var n=r(3),o=r(5),i=r(4),s=r(6),a=r(2),l=r(16),u=r(1),d=(r.n(u),r(0));r.n(d);r.d(t,"a",function(){return c});var c=function(e){function t(){return e.call(this)||this}return n.a(t,e),Object.defineProperty(t.prototype,"editorType",{get:function(){return"textitems"},enumerable:!0,configurable:!0}),t.prototype.createNewEditorItem=function(){for(var e=[],t=this.koItems(),r=0;r0?this.koItems()[0]:null)},t.prototype.addItem=function(e){var t=l.JsonObject.metaData.createClass(e),r=this.createPropertyTrigger(t);this.koItems.push(r),this.koSelected(r)},t.prototype.createEditorItem=function(e){var t=new l.JsonObject,r=l.JsonObject.metaData.createClass(e.getType());return t.toObject(e,r),this.createPropertyTrigger(r)},t.prototype.createItemFromEditorItem=function(e){return e.createTrigger()},t.prototype.getAvailableTriggers=function(){for(var e=[],t=0;t\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n'},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports='\r\n\r\n\r\n'},function(e,t){e.exports='\r\n\r\n\r\n'},function(e,t){e.exports='\r\n\r\n'},function(e,t){e.exports='\r\n\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports='\r\n\r\n\r\n'},function(e,t){e.exports=''},function(e,t){e.exports='\r\n\r\n\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t){e.exports='\r\n'},function(e,t){e.exports='\r\n'},function(e,t){e.exports=''},function(e,t,r){e.exports=r(35)+"\n"+r(36)+"\n"+r(37)+"\n"+r(38)+"\n"+r(39)+"\n"+r(58)+"\n"+r(56)+"\n"+r(55)+"\n"+r(57)+"\n"+r(40)+"\n"+r(41)+"\n"+r(43)+"\n"+r(42)+"\n"+r(44)+"\n"+r(45)+"\n"+r(46)+"\n"+r(47)+"\n"+r(48)+"\n"+r(49)+"\n"+r(50)+"\n"+r(51)+"\n"+r(52)+"\n"+r(53)+"\n"+r(54)},function(e,t,r){"use strict";var n=r(0),o=(r.n(n),r(10));r.d(t,"a",function(){return i});var i=function(){function e(){this.isProcessingImmediately=!1,this.timeoutId=-1,this.koText=n.observable(""),this.koErrors=n.observableArray();var e=this;this.koText.subscribe(function(t){e.onJsonEditorChanged()})}return e.prototype.init=function(){if(this.hasAceEditor){this.aceEditor=ace.edit("surveyjsJSONEditor");var e=this;this.aceEditor.setShowPrintMargin(!1),this.aceEditor.getSession().on("change",function(){e.onJsonEditorChanged()}),this.aceEditor.getSession().setUseWorker(!0),o.a.newLineChar=this.aceEditor.session.doc.getNewLineCharacter()}},Object.defineProperty(e.prototype,"hasAceEditor",{get:function(){return"undefined"!=typeof ace},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.hasAceEditor?this.aceEditor.getValue():this.koText()},set:function(e){this.isProcessingImmediately=!0,this.koText(e),this.aceEditor&&(this.aceEditor.setValue(e),this.aceEditor.renderer.updateFull(!0)),this.processJson(e),this.isProcessingImmediately=!1},enumerable:!0,configurable:!0}),e.prototype.show=function(e){this.text=e,this.aceEditor&&this.aceEditor.focus()},Object.defineProperty(e.prototype,"isJsonCorrect",{get:function(){return this.textWorker=new o.a(this.text),this.textWorker.isJsonCorrect},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"survey",{get:function(){return this.textWorker.survey},enumerable:!0,configurable:!0}),e.prototype.onJsonEditorChanged=function(){if(this.timeoutId>-1&&clearTimeout(this.timeoutId),this.isProcessingImmediately)this.timeoutId=-1;else{var t=this;this.timeoutId=setTimeout(function(){t.timeoutId=-1,t.processJson(t.text)},e.updateTextTimeout)}},e.prototype.processJson=function(e){this.textWorker=new o.a(e),this.aceEditor?this.aceEditor.getSession().setAnnotations(this.createAnnotations(e,this.textWorker.errors)):this.koErrors(this.textWorker.errors)},e.prototype.createAnnotations=function(e,t){for(var r=new Array,n=0;n